Login | Register
My pages Projects Community openCollabNet

Discussions > dev > [ANNOUNCE] FSVS 1.2.0 released

Discussion topic

2020-04-07: This site is going to be decommissioned and shut down on 2020-07-01. Please copy and archive any data you wish to keep before that date.

Back to topic list

[ANNOUNCE] FSVS 1.2.0 released

Author pmarek
Full name P.Marek
Date 2009-06-18 10:57:00 PDT
Message 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
but don't complain afterwards ;-)

 About the incompatibilities


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

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

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-m​igration/convert-ign​ores.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-soft​ware.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

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.o​rg/install.html for a bit
of help.


There are too many changes to show them all; for the complete list please
go to
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.

* 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



Ad 1:

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,

Ad 3:
"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)!

« Previous message in topic | 1 of 1 | Next message in topic »


Show all messages in topic

[ANNOUNCE] FSVS 1.2.0 released pmarek P.Marek 2009-06-18 10:57:00 PDT
Messages per page: