Author: hwright Date: Mon Aug 15 20:03:41 2011 New Revision: 1157972 URL: http://svn.apache.org/viewvc?rev=1157972&view=rev Log: On the fs-py branch: Implement the write_format() function in Python, thereby allowing the entire "create a filesystem" functionality to live all in Python.
* subversion/python/svn/fs.py (_write_format): New. (FS._create_fs): Write the format file upon creation. * subversion/libsvn_fs_py/fs_fs.c (svn_fs_py__create): Remove any remaining C, just let the Python method do the work! Modified: subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c 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=1157972&r1=1157971&r2=1157972&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 Mon Aug 15 20:03:41 2011 @@ -6271,8 +6271,6 @@ svn_fs_py__create(svn_fs_t *fs, apr_pool_t *pool) { fs_fs_data_t *ffd = fs->fsap_data; - int max_files_per_dir; - int format; fs->path = apr_pstrdup(pool, path); @@ -6282,14 +6280,6 @@ svn_fs_py__create(svn_fs_t *fs, apr_pool_cleanup_register(fs->pool, ffd->p_fs, svn_fs_py__destroy_py_object, apr_pool_cleanup_null); - SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format")); - SVN_ERR(svn_fs_py__get_int_attr(&max_files_per_dir, ffd->p_fs, - "max_files_per_dir")); - - /* This filesystem is ready. Stamp it with a format number. */ - SVN_ERR(write_format(path_format(fs, pool), - format, max_files_per_dir, FALSE, pool)); - return SVN_NO_ERROR; } 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=1157972&r1=1157971&r2=1157972&view=diff ============================================================================== --- subversion/branches/fs-py/subversion/python/svn/fs.py (original) +++ subversion/branches/fs-py/subversion/python/svn/fs.py Mon Aug 15 20:03:41 2011 @@ -113,6 +113,31 @@ _DEFAULT_CONFIG_CONTENTS = \ CONFIG_OPTION_ENABLE_REP_SHARING) +def _write_format(path, format, max_files_per_dir, overwrite=True): + assert 1 <= format and format <= FORMAT_NUMBER + + if format >= MIN_LAYOUT_FORMAT_OPTION_FORMAT: + if max_files_per_dir: + contents = "%d\nlayout sharded %d\n" % (format, max_files_per_dir) + else: + contents = "%d\nlayout linear\n" % (format, max_files_per_dir) + else: + format = "%d\n" % format + + if not overwrite: + with open(path, 'wb') as f: + f.write(contents) + else: + tempf = tempfile.NamedTemporaryFile(dir=os.path.dirname(path), + delete=False) + tempf.write(contents) + tempf.close() + os.rename(tempf.name, path) + + # And set the perms to make it read only + os.chmod(path, stat.S_IREAD) + + class FS(object): def __path_rev_shard(self, rev): assert self.max_files_per_dir @@ -330,6 +355,10 @@ class FS(object): with open(self.__path_txn_current_lock, 'wb') as f: f.write('') + # This filesystem is ready. Stamp it with a format number. + _write_format(self.__path_format, self.format, self.max_files_per_dir, + False) + def _open_fs(self): 'Open an existing Subvesion filesystem'