Hello everybody!
After a long time I'm happy to release a new version. The delay can be explained by it being incompatible with the older versions; this is the cause for it being labeled for the new 1.2 series, although the next big feature (mixed version working copies) is not included yet. For the impatient: see http://freshmeat.net/projects/fsvs (once it's updated) and http://doc.fsvs-software.org/, but don't complain afterwards ;-) About the incompatibilities ============================= WAA_CHARS ----------- FSVS uses (the MD5 of) the absolute pathname as a key for storing internal data - user-defined properties, a list of block-MD5s for faster change detection, and things like that. Now that has a problem if you're (very) unlucky and two of your paths hash to the same MD5; or if you have nested working copies, eg. "/" and "/etc". Here all files in the "/etc" working copy get the same internal key as the ones below "etc" in the "/" working copy, and this will cause problems, as the FSVS-managed meta-data gets partly changed from two working copies simultaneously. If you need this, there are several ways to do that: * Ignore the shared paths in the upper WC * Use different FSVS_WAA directories And, exclusively with this newer version, * use the "--with-waa_md5=N" switch on "configure". This switch (with values for "N" from 6 to 32) inserts a WC-specific directory in the WAA hierarchy, so that the absolute path MD5s do not collide anymore. This might also be useful if you need to create and remove WCs often (and need to clean up the space), as there's no "wc disconnect" command [1] yet. The default value is 0, which is compatible with earlier versions, as my suggestion for nested WCs is to avoid them, or at least ignore the shared paths. Looking for a sane way to convert the old-format WAA to the newer one is one of the things that delayed the new release, until I settled for the common default value [2]. Grouping patterns ------------------- The ignore patterns been transformed to grouping patterns, and their format has changed; it is a bit more verbose now, but much more readable this way. The distribution includes a perl script to convert to the new version; the easiest way might be to do $FSVS_SRC/pre-1.2-migration/convert-ignores.pl /etc/fsvs/*/Ign and you're done, at least if you're using the default $FSVS_CONF. The advantage is that you can now use groups to give properties to entries automatically when they're being committed; see http://doc.fsvs-software.org/gif/groups.html for details. (This is like the auto-props in subversion.) The "ignore" command still has the default for the "ignore" group, so the command line interface doesn't change that much. URL list ---------- Some people (including me) found out that it's a bit unaesthetic that after a commit in "/etc" FSVS would show the URL lists as changed. They have been split in two; the user-defined, nearly constant values still live in "/etc/fsvs/*/Urls" (but don't get written unless that's really necessary), but the current revision number of the URLs is stored in the WAA. So you get the best of both worlds; you keep your list versioned, but (normally) see no changes. The code handling that is backward compatible; it can use the old lists without any manual intervention. Getting the new release ========================= You can get the sources (soon) from http://freshmeat.net/projects/fsvs, but quite a few distributions include packages, so that you don't have to compile it yourself. If you want to do that, see http://fsvs.tigris.org/install.html for a bit of help. Changes ========= There are too many changes to show them all; for the complete list please go to http://fsvs.tigris.org/source/browse/fsvs/tags/fsvs-1.2.0/fsvs/CHANGES?view=markup and look through the >50 changelist entries. Here I'll just present the most important points. New features: * An additional level in the WAA (optionally, on compile time), to make nested WCs non-overlapping. * Using lchown()/lutimes() to set ownership for symlinks, too. Thank you for noticing, Nebojsa. * Pattern "groups"; with the new subcommand "groups test" you can test patterns and group assignments, and with the option "group_stats" see pattern match frequencies. * The read-only commands now only test for read access to CONF; so, depending on the permissions of the wc entries, other users than UID 0 might be able to do "status", "prop-list", "prop-get" and "info", and (if the user has repository access) "diff", too. * Splitted "-v" and "-q" into a more detailed "verbose" option, which can now show the group and URL on status, too. * New option "debug_buffer" allows to capture debug information in RAM and only print it if an error happens. * New option "empty_message", to avoid commits without a message. * New option "mkdir_base", to create non-existing but needed directories in the repository above the given URL on commit. * "fsvs add" (and "fsvs prop-set") can now store a destination URL, which is very useful in multi-URL setups. * "fsvs log" can now report for other defined URLs. * Updating to revision 0 should now work, and means to remove that URL. * Readonly flag for URLs, so that no commit is allowed. Performance: * A "status" after test 019 is at about 41% cpu cycles compared to the old version (blame sscanf(); now calls strtoul()). * An fsync() per property-less entry on commit avoided. * Copied entries that are unchanged at commit time got no manber-hashes, so the entire file had to get read to detect a change. Important fixes: * Bugfix: Using a commit-pipe on an empty file would hang in a tight loop. * Fixed a memleak in "checkout" (and "export"). This was needed to recover a 56GB installation [3]. Thank you, Omar. * "revert" now works even if sockets or fifos are in the way. * "urls load" now tries to keep the internal numbers by matching against an old URL list. Visible behavior changes: * Changed the default for the "conflict" option to "merge". * "fsvs log -v" now sorts the filenames. * Handling symlinks to directories on the commandline fixed, eg. for "fsvs st symlink-to-dir/file". * URLs can be now modified by name, too, eg. to set the target revision. * Changed the default URL dump format to something more readable. Dear packagers, please create the $FSVS_CONF/auth hierarchy in your packages, so that automatic password storage works. Ideas, hints, tips & tricks, bug reports and all other feedback is welcome. Does anybody have some hints whether SSL with client certificates works currently? Regards, Phil Ad 1: http://fsvs.tigris.org/ds/viewMessage.do?dsForumId=3928&dsMessageId=996569 Ad 2: The mixed-WC parts need a SQLite database for tracking the revision numbers; and then it's likely that I'll put some other data in the DB as well, so that the multitude of WAA directories is likely to vanish, and be replaced by a smaller list. Using SQLite is not such a problem, because subversion 1.6 will require it, too. Ad 3: http://article.gmane.org/gmane.comp.sysutils.backup.fsvs.general/738 "Restore finished in 82 minutes with 56 GB of data restored." -- Versioning your /etc, /home or even your whole installation? Try fsvs (fsvs.tigris.org)! ------------------------------------------------------ http://fsvs.tigris.org/ds/viewMessage.do?dsForumId=3926&dsMessageId=2363280 To unsubscribe from this discussion, e-mail: [announce-unsubscr...@fsvs.tigris.org].