Author: hwright
Date: Fri Aug 12 03:32:50 2011
New Revision: 1156952

URL: http://svn.apache.org/viewvc?rev=1156952&view=rev
Log:
On the fs-py branch:
Write the skeleton configuration file when creating a filesystem in Python.
Also tweak some error handling.

* subversion/python/svn/err.py:
  New.

* subversion/python/svn/__init__.py
  (SubversionException.__init__): Switch order of arguments, since that's how
    we were calling them.
 
* subversion/python/svn/_cache.py:
  New.

* subversion/python/svn/fs.py
  (): More constants and imports.
  (FS._write_config): New.
  (FS._ensure_revision_exists): Remove i18n wrapper from error message.
  (FS.__setup_paths): Add a path for the config file.

* subversion/libsvn_fs_py/fs_fs.c
  (svn_fs_py__create): Remove the call to create the config.

Added:
    subversion/branches/fs-py/subversion/python/svn/_cache.py   (with props)
    subversion/branches/fs-py/subversion/python/svn/err.py   (with props)
Modified:
    subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c
    subversion/branches/fs-py/subversion/python/svn/__init__.py
    subversion/branches/fs-py/subversion/python/svn/fs.py

Modified: subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c?rev=1156952&r1=1156951&r2=1156952&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c Fri Aug 12 
03:32:50 2011
@@ -6286,8 +6286,6 @@ svn_fs_py__create(svn_fs_t *fs,
   SVN_ERR(svn_fs_py__get_int_attr(&max_files_per_dir, ffd->p_fs,
                                   "max_files_per_dir"));
 
-  SVN_ERR(write_config(fs, pool));
-
   SVN_ERR(read_config(fs, pool));
 
   /* Create the txn-current file if the repository supports

Modified: subversion/branches/fs-py/subversion/python/svn/__init__.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/python/svn/__init__.py?rev=1156952&r1=1156951&r2=1156952&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/python/svn/__init__.py (original)
+++ subversion/branches/fs-py/subversion/python/svn/__init__.py Fri Aug 12 
03:32:50 2011
@@ -20,7 +20,7 @@
 
 
 class SubversionException(Exception):
-    def __init__(self, msg, code = 0):
+    def __init__(self, code, msg):
         self.message = msg
         self.code = code
 

Added: subversion/branches/fs-py/subversion/python/svn/_cache.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/python/svn/_cache.py?rev=1156952&view=auto
==============================================================================
--- subversion/branches/fs-py/subversion/python/svn/_cache.py (added)
+++ subversion/branches/fs-py/subversion/python/svn/_cache.py Fri Aug 12 
03:32:50 2011
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+CONFIG_CATEGORY_MEMCACHED_SERVERS = "memcached-servers"

Propchange: subversion/branches/fs-py/subversion/python/svn/_cache.py
------------------------------------------------------------------------------
    svn:eol-style = native

Added: subversion/branches/fs-py/subversion/python/svn/err.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/python/svn/err.py?rev=1156952&view=auto
==============================================================================
--- subversion/branches/fs-py/subversion/python/svn/err.py (added)
+++ subversion/branches/fs-py/subversion/python/svn/err.py Fri Aug 12 03:32:50 
2011
@@ -0,0 +1,279 @@
+#!/usr/bin/env python
+### This file automatically generated by tools/dev/gen-py-error.py,
+### which see for more information
+###
+### It is versioned for convenience.
+
+APMOD_ACTIVITY_NOT_FOUND = 190002
+APMOD_BAD_BASELINE = 190003
+APMOD_CONNECTION_ABORTED = 190004
+APMOD_MALFORMED_URI = 190001
+APMOD_MISSING_PATH_TO_FS = 190000
+ASSERTION_FAIL = 235000
+ASSERTION_ONLY_TRACING_LINKS = 235001
+ATOMIC_INIT_FAILURE = 200029
+AUTHN_CREDS_NOT_SAVED = 215003
+AUTHN_CREDS_UNAVAILABLE = 215000
+AUTHN_FAILED = 215004
+AUTHN_NO_PROVIDER = 215001
+AUTHN_PROVIDERS_EXHAUSTED = 215002
+AUTHZ_INVALID_CONFIG = 220003
+AUTHZ_PARTIALLY_READABLE = 220002
+AUTHZ_ROOT_UNREADABLE = 220000
+AUTHZ_UNREADABLE = 220001
+AUTHZ_UNWRITABLE = 220004
+BAD_CHANGELIST_NAME = 125014
+BAD_CHECKSUM_KIND = 125011
+BAD_CHECKSUM_PARSE = 125012
+BAD_CONFIG_VALUE = 125009
+BAD_CONTAINING_POOL = 125000
+BAD_DATE = 125003
+BAD_FILENAME = 125001
+BAD_MIME_TYPE = 125004
+BAD_PROPERTY_VALUE = 125005
+BAD_PROP_KIND = 200008
+BAD_RELATIVE_PATH = 125007
+BAD_SERVER_SPECIFICATION = 125010
+BAD_TOKEN = 125013
+BAD_URL = 125002
+BAD_UUID = 125008
+BAD_VERSION_FILE_FORMAT = 125006
+BASE = 200000
+CANCELLED = 200015
+CATEGORY_SIZE = 5000
+CEASE_INVOCATION = 200021
+CHECKSUM_MISMATCH = 200014
+CLIENT_BAD_REVISION = 195002
+CLIENT_CYCLE_DETECTED = 195019
+CLIENT_DUPLICATE_COMMIT_URL = 195003
+CLIENT_FILE_EXTERNAL_OVERWRITE_VERSIONED = 195017
+CLIENT_INVALID_EXTERNALS_DESCRIPTION = 195005
+CLIENT_INVALID_RELOCATION = 195009
+CLIENT_IS_BINARY_FILE = 195004
+CLIENT_IS_DIRECTORY = 195007
+CLIENT_MISSING_LOCK_TOKEN = 195013
+CLIENT_MODIFIED = 195006
+CLIENT_MULTIPLE_SOURCES_DISALLOWED = 195014
+CLIENT_NOT_READY_TO_MERGE = 195016
+CLIENT_NO_VERSIONED_PARENT = 195015
+CLIENT_PATCH_BAD_STRIP_COUNT = 195018
+CLIENT_PROPERTY_NAME = 195011
+CLIENT_RA_ACCESS_REQUIRED = 195001
+CLIENT_REVISION_AUTHOR_CONTAINS_NEWLINE = 195010
+CLIENT_REVISION_RANGE = 195008
+CLIENT_UNRELATED_RESOURCES = 195012
+CLIENT_VERSIONED_PATH_REQUIRED = 195000
+CL_ADM_DIR_RESERVED = 205003
+CL_ARG_PARSING_ERROR = 205000
+CL_BAD_LOG_MESSAGE = 205008
+CL_COMMIT_IN_ADDED_DIR = 205006
+CL_ERROR_PROCESSING_EXTERNALS = 205011
+CL_INSUFFICIENT_ARGS = 205001
+CL_LOG_MESSAGE_IS_PATHNAME = 205005
+CL_LOG_MESSAGE_IS_VERSIONED_FILE = 205004
+CL_MUTUALLY_EXCLUSIVE_ARGS = 205002
+CL_NO_EXTERNAL_EDITOR = 205007
+CL_NO_EXTERNAL_MERGE_TOOL = 205010
+CL_UNNECESSARY_LOG_MESSAGE = 205009
+DELTA_MD5_CHECKSUM_ABSENT = 200010
+DIFF_DATASOURCE_MODIFIED = 225000
+DIR_NOT_EMPTY = 200011
+ENTRY_ATTRIBUTE_INVALID = 150005
+ENTRY_EXISTS = 150002
+ENTRY_FORBIDDEN = 150006
+ENTRY_MISSING_REVISION = 150003
+ENTRY_MISSING_URL = 150004
+ENTRY_NOT_FOUND = 150000
+EXTERNAL_PROGRAM = 200012
+FS_ALREADY_EXISTS = 160020
+FS_ALREADY_OPEN = 160002
+FS_BAD_LOCK_TOKEN = 160037
+FS_BERKELEY_DB = 160029
+FS_BERKELEY_DB_DEADLOCK = 160030
+FS_CLEANUP = 160001
+FS_CONFLICT = 160024
+FS_CORRUPT = 160004
+FS_GENERAL = 160000
+FS_ID_NOT_FOUND = 160014
+FS_LOCK_EXPIRED = 160041
+FS_LOCK_OWNER_MISMATCH = 160039
+FS_MALFORMED_SKEL = 160027
+FS_NOT_DIRECTORY = 160016
+FS_NOT_FILE = 160017
+FS_NOT_FOUND = 160013
+FS_NOT_ID = 160015
+FS_NOT_MUTABLE = 160019
+FS_NOT_OPEN = 160003
+FS_NOT_REVISION_ROOT = 160023
+FS_NOT_SINGLE_PATH_COMPONENT = 160018
+FS_NOT_TXN_ROOT = 160022
+FS_NO_LOCK_TOKEN = 160038
+FS_NO_SUCH_CHECKSUM_REP = 160048
+FS_NO_SUCH_COPY = 160011
+FS_NO_SUCH_ENTRY = 160008
+FS_NO_SUCH_LOCK = 160040
+FS_NO_SUCH_NODE_ORIGIN = 160046
+FS_NO_SUCH_REPRESENTATION = 160009
+FS_NO_SUCH_REVISION = 160006
+FS_NO_SUCH_STRING = 160010
+FS_NO_SUCH_TRANSACTION = 160007
+FS_NO_USER = 160034
+FS_OUT_OF_DATE = 160042
+FS_PATH_ALREADY_LOCKED = 160035
+FS_PATH_NOT_LOCKED = 160036
+FS_PATH_SYNTAX = 160005
+FS_PROP_BASEVALUE_MISMATCH = 160049
+FS_REP_BEING_WRITTEN = 160044
+FS_REP_CHANGED = 160025
+FS_REP_NOT_MUTABLE = 160026
+FS_ROOT_DIR = 160021
+FS_TRANSACTION_DEAD = 160031
+FS_TRANSACTION_NOT_DEAD = 160032
+FS_TRANSACTION_NOT_MUTABLE = 160012
+FS_TXN_NAME_TOO_LONG = 160045
+FS_TXN_OUT_OF_DATE = 160028
+FS_UNKNOWN_FS_TYPE = 160033
+FS_UNSUPPORTED_FORMAT = 160043
+FS_UNSUPPORTED_UPGRADE = 160047
+ILLEGAL_TARGET = 200009
+INCOMPLETE_DATA = 200003
+INCORRECT_PARAMS = 200004
+INVALID_DIFF_OPTION = 200016
+IO_CORRUPT_EOL = 135002
+IO_INCONSISTENT_EOL = 135000
+IO_PIPE_FRAME_ERROR = 135004
+IO_PIPE_READ_ERROR = 135005
+IO_UNIQUE_NAMES_EXHAUSTED = 135003
+IO_UNKNOWN_EOL = 135001
+IO_WRITE_ERROR = 135006
+ITER_BREAK = 200023
+LAST = 235002
+MALFORMED_FILE = 200002
+MERGEINFO_PARSE_ERROR = 200020
+NODE_UNEXPECTED_KIND = 145001
+NODE_UNKNOWN_KIND = 145000
+NO_APR_MEMCACHE = 200028
+NO_AUTH_FILE_PATH = 200018
+PLUGIN_LOAD_FAILURE = 200001
+PROPERTY_NOT_FOUND = 200017
+RA_DAV_ALREADY_EXISTS = 175005
+RA_DAV_CONN_TIMEOUT = 175012
+RA_DAV_CREATING_REQUEST = 175001
+RA_DAV_FORBIDDEN = 175013
+RA_DAV_INVALID_CONFIG_VALUE = 175006
+RA_DAV_MALFORMED_DATA = 175009
+RA_DAV_OPTIONS_REQ_FAILED = 175003
+RA_DAV_PATH_NOT_FOUND = 175007
+RA_DAV_PROPPATCH_FAILED = 175008
+RA_DAV_PROPS_NOT_FOUND = 175004
+RA_DAV_RELOCATED = 175011
+RA_DAV_REQUEST_FAILED = 175002
+RA_DAV_RESPONSE_HEADER_BADNESS = 175010
+RA_DAV_SOCK_INIT = 175000
+RA_ILLEGAL_URL = 170000
+RA_LOCAL_REPOS_NOT_FOUND = 180000
+RA_LOCAL_REPOS_OPEN_FAILED = 180001
+RA_NOT_AUTHORIZED = 170001
+RA_NOT_IMPLEMENTED = 170003
+RA_NOT_LOCKED = 170007
+RA_NO_REPOS_UUID = 170005
+RA_OUT_OF_DATE = 170004
+RA_PARTIAL_REPLAY_NOT_SUPPORTED = 170008
+RA_REPOS_ROOT_URL_MISMATCH = 170010
+RA_SERF_GSSAPI_INITIALISATION_FAILED = 230002
+RA_SERF_SSL_CERT_UNTRUSTED = 230001
+RA_SERF_SSPI_INITIALISATION_FAILED = 230000
+RA_SERF_WRAPPED_ERROR = 230003
+RA_SESSION_URL_MISMATCH = 170011
+RA_SVN_BAD_VERSION = 210006
+RA_SVN_CMD_ERR = 210000
+RA_SVN_CONNECTION_CLOSED = 210002
+RA_SVN_EDIT_ABORTED = 210008
+RA_SVN_IO_ERROR = 210003
+RA_SVN_MALFORMED_DATA = 210004
+RA_SVN_NO_MECHANISMS = 210007
+RA_SVN_REPOS_NOT_FOUND = 210005
+RA_SVN_UNKNOWN_CMD = 210001
+RA_UNKNOWN_AUTH = 170002
+RA_UNSUPPORTED_ABI_VERSION = 170006
+RA_UUID_MISMATCH = 170009
+REPOS_BAD_ARGS = 165002
+REPOS_BAD_REVISION_REPORT = 165004
+REPOS_DISABLED_FEATURE = 165006
+REPOS_HOOK_FAILURE = 165001
+REPOS_LOCKED = 165000
+REPOS_NO_DATA_FOR_REPORT = 165003
+REPOS_POST_COMMIT_HOOK_FAILED = 165007
+REPOS_POST_LOCK_HOOK_FAILED = 165008
+REPOS_POST_UNLOCK_HOOK_FAILED = 165009
+REPOS_UNSUPPORTED_UPGRADE = 165010
+REPOS_UNSUPPORTED_VERSION = 165005
+RESERVED_FILENAME_SPECIFIED = 200025
+REVNUM_PARSE_FAILURE = 200022
+SQLITE_BUSY = 200033
+SQLITE_ERROR = 200030
+SQLITE_READONLY = 200031
+SQLITE_RESETTING_FOR_ROLLBACK = 200034
+SQLITE_UNSUPPORTED_SCHEMA = 200032
+STREAM_MALFORMED_DATA = 140001
+STREAM_SEEK_NOT_SUPPORTED = 140003
+STREAM_UNEXPECTED_EOF = 140000
+STREAM_UNRECOGNIZED_DATA = 140002
+SVNDIFF_BACKWARD_VIEW = 185002
+SVNDIFF_CORRUPT_WINDOW = 185001
+SVNDIFF_INVALID_COMPRESSED_DATA = 185005
+SVNDIFF_INVALID_HEADER = 185000
+SVNDIFF_INVALID_OPS = 185003
+SVNDIFF_UNEXPECTED_END = 185004
+SWIG_PY_EXCEPTION_SET = 200013
+TEST_FAILED = 200006
+TEST_SKIPPED = 200027
+UNKNOWN_CAPABILITY = 200026
+UNKNOWN_CHANGELIST = 200024
+UNSUPPORTED_FEATURE = 200007
+UNVERSIONED_RESOURCE = 200005
+VERSION_MISMATCH = 200019
+WC_BAD_ADM_LOG = 155009
+WC_BAD_ADM_LOG_START = 155020
+WC_BAD_PATH = 155022
+WC_CANNOT_DELETE_FILE_EXTERNAL = 155030
+WC_CANNOT_MOVE_FILE_EXTERNAL = 155031
+WC_CHANGELIST_MOVE = 155029
+WC_CLEANUP_REQUIRED = 155037
+WC_CONFLICT_RESOLVER_FAILURE = 155027
+WC_COPYFROM_PATH_NOT_FOUND = 155028
+WC_CORRUPT = 155016
+WC_CORRUPT_TEXT_BASE = 155017
+WC_DB_ERROR = 155032
+WC_FOUND_CONFLICT = 155015
+WC_INVALID_LOCK = 155006
+WC_INVALID_OPERATION_DEPTH = 155038
+WC_INVALID_OP_ON_CWD = 155019
+WC_INVALID_RELOCATION = 155024
+WC_INVALID_SCHEDULE = 155023
+WC_INVALID_SWITCH = 155025
+WC_LEFT_LOCAL_MOD = 155012
+WC_LOCKED = 155004
+WC_MISMATCHED_CHANGELIST = 155026
+WC_MISSING = 155033
+WC_NODE_KIND_CHANGE = 155018
+WC_NOT_FILE = 155008
+WC_NOT_LOCKED = 155005
+WC_NOT_SYMLINK = 155034
+WC_NOT_UP_TO_DATE = 155011
+WC_NOT_WORKING_COPY = 155007
+WC_OBSTRUCTED_UPDATE = 155000
+WC_PATH_FOUND = 155014
+WC_PATH_NOT_FOUND = 155010
+WC_PATH_UNEXPECTED_STATUS = 155035
+WC_SCHEDULE_CONFLICT = 155013
+WC_UNSUPPORTED_FORMAT = 155021
+WC_UNWIND_EMPTY = 155002
+WC_UNWIND_MISMATCH = 155001
+WC_UNWIND_NOT_EMPTY = 155003
+WC_UPGRADE_REQUIRED = 155036
+XML_ATTRIB_NOT_FOUND = 130000
+XML_MALFORMED = 130003
+XML_MISSING_ANCESTRY = 130001
+XML_UNESCAPABLE_DATA = 130004
+XML_UNKNOWN_ENCODING = 130002

Propchange: subversion/branches/fs-py/subversion/python/svn/err.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/fs-py/subversion/python/svn/fs.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/python/svn/fs.py?rev=1156952&r1=1156951&r2=1156952&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/python/svn/fs.py (original)
+++ subversion/branches/fs-py/subversion/python/svn/fs.py Fri Aug 12 03:32:50 
2011
@@ -23,6 +23,8 @@ import os, uuid, stat, shutil, tempfile,
 import svn
 import svn.hash
 import svn.prop
+import svn._cache
+import svn.err
 
 # Some constants
 CONFIG_PRE_1_4_COMPATIBLE   = "pre-1.4-compatible"
@@ -39,6 +41,7 @@ PATH_TXNS_DIR               = "transacti
 PATH_TXN_PROTOS_DIR         = "txn-protorevs"   # Directory of proto-revs
 PATH_MIN_UNPACKED_REV       = "min-unpacked-rev" # Oldest revision which
                                                  # has not been packed.
+PATH_CONFIG                 = "fsfs.conf"       # Configuration
 
 FORMAT_NUMBER                       = 4
 
@@ -50,6 +53,56 @@ MIN_PACKED_FORMAT                   = 4
 _DEFAULT_MAX_FILES_PER_DIR = 1000
 _TIMESTAMP_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'
 
+# Names of sections and options in fsfs.conf.
+CONFIG_SECTION_CACHES               = "caches"
+CONFIG_OPTION_FAIL_STOP             = "fail-stop"
+CONFIG_SECTION_REP_SHARING          = "rep-sharing"
+CONFIG_OPTION_ENABLE_REP_SHARING    = "enable-rep-sharing"
+
+_DEFAULT_CONFIG_CONTENTS = \
+'''### This file controls the configuration of the FSFS filesystem.
+
+[%s]
+### These options name memcached servers used to cache internal FSFS
+### data.  See http://www.danga.com/memcached/ for more information on
+### memcached.  To use memcached with FSFS, run one or more memcached
+### servers, and specify each of them as an option like so:
+# first-server = 127.0.0.1:11211
+# remote-memcached = mymemcached.corp.example.com:11212
+### The option name is ignored; the value is of the form HOST:PORT.
+### memcached servers can be shared between multiple repositories;
+### however, if you do this, you *must* ensure that repositories have
+### distinct UUIDs and paths, or else cached data from one repository
+### might be used by another accidentally.  Note also that memcached has
+### no authentication for reads or writes, so you must ensure that your
+### memcached servers are only accessible by trusted users.
+
+[%s]
+### When a cache-related error occurs, normally Subversion ignores it
+### and continues, logging an error if the server is appropriately
+### configured (and ignoring it with file:// access).  To make
+### Subversion never ignore cache errors, uncomment this line.
+# %s = true
+
+[%s]
+### To conserve space, the filesystem can optionally avoid storing
+### duplicate representations.  This comes at a slight cost in
+### performance, as maintaining a database of shared representations can
+### increase commit times.  The space savings are dependent upon the size
+### of the repository, the number of objects it contains and the amount of
+### duplication between them, usually a function of the branching and
+### merging process.
+###
+### The following parameter enables rep-sharing in the repository.  It can
+### be switched on and off at will, but for best space-saving results
+### should be enabled consistently over the life of the repository.
+### 'svnadmin verify' will check the rep-cache regardless of this setting.
+### rep-sharing is enabled by default.
+# %s = true
+''' % (svn._cache.CONFIG_CATEGORY_MEMCACHED_SERVERS, CONFIG_SECTION_CACHES,
+       CONFIG_OPTION_FAIL_STOP, CONFIG_SECTION_REP_SHARING,
+       CONFIG_OPTION_ENABLE_REP_SHARING)
+
 
 class FS(object):
     def __path_rev_shard(self, rev):
@@ -111,6 +164,10 @@ class FS(object):
         shutil.copymode(self.__path_current, self.__path_uuid)
 
 
+    def _write_config(self):
+        with open(self.__path_config, 'w') as f:
+            f.write(_DEFAULT_CONFIG_CONTENTS)
+
     def _ensure_revision_exists(self, rev):
         if not svn.is_valid_revnum(rev):
             raise svn.SubversionException(svn.err.FS_NO_SUCH_REVISION,
@@ -126,7 +183,7 @@ class FS(object):
             return
 
         raise svn.SubversionException(svn.err.FS_NO_SUCH_REVISION,
-                                      _("No such revision %ld") % rev)
+                                      "No such revision %ld" % rev)
 
     def _set_revision_proplist(self, rev, props):
         self._ensure_revision_exists(rev)
@@ -262,6 +319,7 @@ class FS(object):
         self.__path_min_unpacked_rev = os.path.join(self.path,
                                                     PATH_MIN_UNPACKED_REV)
         self.__path_lock = os.path.join(self.path, PATH_LOCK_FILE)
+        self.__path_config = os.path.join(self.path, PATH_CONFIG)
 
 
     def __init__(self, path, create=False, config=None):


Reply via email to