Further options for FSVS.
[Documentation for users]

List of settings that modify FSVS' behaviour. More...

List of settings that modify FSVS' behaviour.

FSVS understands some options that modify its behaviour in various small ways.

Overview

This document

This document lists all available options in FSVS, in an full listing and in groups.

Furthermore you can see their relative priorities and some examples.

Semantic groups

Sorted list of options

FSVS currently knows:

Priorities for option setting

The priorities are

Note:
The $HOME-dependent configuration files are not implemented currently. Volunteers?

Furthermore there are "intelligent" run-time dependent settings, like turning off colour output when the output is redirected. Their priority is just below the command line - so they can always be overridden if necessary.

Examples

Using the commandline:

     fsvs -o path=environment
     fsvs -opath=environment

Using environment variables:

     FSVS_PATH=absolute fsvs st

A configuration file, from $FSVS_CONF/config or in a WC-specific path below $FSVS_CONF:

     # FSVS configuration file
     path=wcroot

Output settings and entry filtering

Trimming the list of deleted entries

If you remove a directory, all entries below are implicitly known to be deleted, too. To make the status output shorter there's the all_removed option which, if set to no, will cause children of removed entries to be omitted.

Example for the config file:

    all_removed=no

Directory sorting

If you'd like to have the output of status sorted, you can use the option dir_sort=yes. FSVS will do a run through the tree, to read the status of the entries, and then go through it again, but sorted by name.

Note:
If FSVS aborts with an error during status output, you might want to turn this option off again, to see where FSVS stops; the easiest way is on the command line with -odir_sort=no.

Filtering entries

Please see the command line parameter for -f, which is identical.

    fsvs -o filter=mtime

"fsvs log" revision limit

There are some defaults for the number of revisions that are shown on a "fsvs log" command:

As this option can only be used to set an upper limit of revisions, it makes most sense for the no-revision-arguments case.

"fsvs log" output format

You can modify aspects of the fsvs log output format by setting the log_output option to a combination of these flags:

Furthermore the value normal is available; this turns off all special handling.

Note:
If you start such an option, the value is reset; so if you specify log_output=color,indent in the global config file, and use log_output=color on the commandline, only colors are used. This is different to the Filtering entries option, which is cumulating.

Displaying paths

You can specify how paths printed by FSVS should look like; this is used for the entry status output of the various actions, and for the diff header lines.

There are several possible settings, of which one can be chosen via the path option.

The next two are nearly identical to absolute, but the beginning of paths are substituted by environment variables. This makes sense if you want the advantage of full paths, but have some of them abbreviated.

Example, with / as working copy base:

$ cd /etc

$ fsvs -o path=wcroot st
.mC.     1001  ./etc/X11/xorg.conf

$ fsvs -o path=absolute st
.mC.     1001  /etc/X11/xorg.conf

$ fsvs -o path=parameters st
.mC.     1001  X11/xorg.conf
$ fsvs -o path=parameters st .
.mC.     1001  ./X11/xorg.conf
$ fsvs -o path=parameters st /
.mC.     1001  /etc/X11/xorg.conf
$ fsvs -o path=parameters st X11
.mC.     1001  X11/xorg.conf
$ fsvs -o path=parameters st ../dev/..
.mC.     1001  ../dev/../etc/X11/xorg.conf
$ fsvs -o path=parameters st X11 ../etc
.mC.     1001  X11/xorg.conf
$ fsvs -o path=parameters st ../etc X11
.mC.     1001  ../etc/X11/xorg.conf

$ fsvs -o path=environ st
.mC.     1001  ./etc/X11/xorg.conf
$ WCBAR=/etc fsvs -o path=wcroot st
.mC.     1001  $WCBAR/X11/xorg.conf
$ WCBAR=/etc fsvs -o path=wcroot st /
.mC.     1001  $WCBAR/X11/xorg.conf
$ WCBAR=/e fsvs -o path=wcroot st
.mC.     1001  /etc/X11/xorg.conf
$ WCBAR=/etc WCFOO=/etc/X11 fsvs -o path=wcroot st
.mC.     1001  $WCFOO/xorg.conf

$ touch /etc/X11/xinit/xinitrc
$ fsvs -o path=parameters st
.mC.     1001  X11/xorg.conf
.m.?     1001  X11/xinit/xinitrc
$ fsvs -o path=parameters st X11 /etc/X11/xinit
.mC.     1001  X11/xorg.conf
.m.?     1001  /etc/X11/xinit/xinitrc
Note:
At least for the command line options the strings can be abbreviated, as long as they're still identifiable. Please use the full strings in the configuration file, to avoid having problems in future versions when more options are available.

Status output coloring

FSVS can colorize the output of the status lines; removed entries will be printed in red, new ones in green, and otherwise changed in blue. Unchanged (for -v) will be given in the default color.

For this you can set stat_color=yes; this is turned off per default.

As with the other colorizing options this gets turned off automatically if the output is not on a tty; on the command line you can override this, though.

Checking for changes in a script

If you want to use FSVS in scripts, you might simply want to know whether anything was changed.

In this case use the stop_on_change option, possibly combined with Filtering entries; this gives you no output on STDOUT, but an error code on the first change seen:

    fsvs -o stop_change=yes st /etc
        if fsvs status -o stop_change=yes -o filter=text /etc/init.d
        then
            echo No change found ...
        else
            echo Changes seen.
        fi

Verbosity flags

If you want a bit more control about the data you're getting you can use some specific flags for the verbose options.

Please note that if you want to display fewer items than per default, you'll have to clear the bitmask first, like this:

    fsvs status -o verbose=none,changes,path

Diffing and merging on update

Options relating to the "diff" action

The diff is not done internally in FSVS, but some other program is called, to get the highest flexibility.

There are several option values:

The call is done as

    $diff_prg $diff_opt $file1 --label "$label1" $file2 --label "$label2" $diff_extra
Note:
In diff_opt you should use only use command line flags without parameters; in diff_extra you can encode a single flag with parameter (like "-U5"). If you need more flexibility, write a shell script and pass its name as diff_prg.

Advanced users might be interested in exported environment variables, too; with their help you can eg. start different diff programs depending on the filename.

Using colordiff

If you have colordiff installed on your system, you might be interested in the colordiff option.

It can take one of these values:

Please note that if STDOUT is not a tty (eg. is redirected into a file), this option must be given on the command line to take effect.

How to resolve conflicts on update

If you start an update, but one of the entries that was changed in the repository is changed locally too, you get a conflict.

There are some ways to resolve a conflict:

Note:
As in the subversion command line client svn the auxiliary files are seen as new, although that might change in the future (so that they automatically get ignored).

Options regarding the "merge" program

Like with diff, the merge operation is not done internally in FSVS.

To have better control

The option "-p" is always used:

    $merge_prg $merge_opt -p $file1 $common $file2

Options for commit

Author

You can specify an author to be used on commit. This option has a special behaviour; if the first character of the value is an '$', the value is replaced by the environment variable named.

Empty strings are ignored; that allows an /etc/fsvs/config like this:

  author=unknown
  author=$LOGNAME
  author=$SUDO_USER

where the last non-empty value is taken; and if your .authorized_keys has lines like

  environment="FSVS_AUTHOR=some_user" ssh-rsa ...

that would override the config values.

Note:
Your sshd_config needs the PermitUserEnvironment setting; you can also take a look at the AcceptEnv and SendEnv documentation.

Destination URL for commit

If you defined multiple URLs for your working copy, FSVS needs to know which URL to commit to.

For this you would set commit_to to the name of the URL; see this example:

        fsvs urls N:master,P:10,http://... N:local,P:20,file:///...
        fsvs ci /etc/passwd -m "New user defined" -ocommit_to=local

Doing empty commits

In the default settings FSVS will happily create empty commits, ie. revisions without any changed entry. These just have a revision number, an author and a timestamp; this is nice if FSVS is run via CRON, and you want to see when FSVS gets run.

If you would like to avoid such revisions, set this option to no; then such commits will be avoided.

Example:

        fsvs commit -o empty_commit=no -m "cron" /etc

Avoid commits without a commit message

If you don't like the behaviour that FSVS does commits with an empty message received from $EDITOR (eg if you found out that you don't want to commit after all), you can change this option to no; then FSVS won't allow empty commit messages.

Example for the config file:

        empty_message=no

Creating directories in the repository above the URL

If you want to keep some data versioned, the first commit is normally the creation of the base directories above the given URL (to keep that data separate from the other repository data).

Previously this had to be done manually, ie. with a svn mkdir $URL --parents or similar command.
With the mkdir_base option you can tell FSVS to create directories as needed; this is mostly useful on the first commit.

        fsvs urls ...
        fsvs group 'group:ignore,./**'
        fsvs ci -m "First post!" -o mkdir_base=yes

Waiting for a time change after working copy operations

If you're using FSVS in automated systems, you might see that changes that happen in the same second as a commit are not seen with status later; this is because the timestamp granularity of FSVS is 1 second.

For backward compatibility the default value is no (don't delay). You can set it to any combination of

for yes all of these actions are delayed until the clock seconds change.

Example how to set that option via an environment variable:

        export FSVS_DELAY=commit,revert

Performance and tuning related options

Change detection

This options allows to specify the trade-off between speed and accuracy.

A file with a changed size can immediately be known as changed; but if only the modification time is changed, this is not so easy. Per default FSVS does a MD5 check on the file in this case; if you don't want that, or if you want to do the checksum calculation for every file (in case a file has changed, but its mtime not), you can use this option to change FSVS' behaviour.

On the command line there's a shortcut for that: for every "-C" another check in this option is chosen.

The recognized specifications are

none

Resets the check bitmask to "no checks".

file_mtime

Check files for modifications (via MD5) and directories for new entries, if the mtime is different - default

dir

Check all directories for new entries, regardless of the timestamp.

allfiles

Check all files with MD5 for changes (tripwire -like operation).

full

All available checks.

You can give multiple options; they're accumulated unless overridden by none.

    fsvs -o change_check=allfiles status
Note:
commit and update set additionally the dir option, to avoid missing new files.

Avoiding expensive compares on \ref cpfd "copyfrom-detect"

If you've got big files that are seen as new, doing the MD5 comparison can be time consuming. So there's the option copyfrom_exp (for "expensive", which takes the usual yes (default) and no arguments.

        fsvs copyfrom-detect -o copyfrom_exp=no some_directory

Getting grouping/ignore statistics

If you need to ignore many entries of your working copy, you might find that the ignore pattern matching takes some valuable time.
In order to optimize the order of your patterns you can specify this option to print the number of tests and matches for each pattern.

        $ fsvs status -o group_stats=yes -q

        Grouping statistics (tested, matched, groupname, pattern):

        4705  80   ignore   group:ignore,.

For optimizing you'll want to put often matching patterns at the front (to make them match sooner, and avoid unnecessary tests); but if you are using other groups than ignore (like take), you will have to take care to keep the patterns within a group together.

Please note that the first line shows how many entries were tested, and that the next lines differ by the number of matches entries for the current line, as all entries being tested against some pattern get tested for the next too, unless they match the current pattern.

This option is available for status and the ignore test commands.

Base configuration

Path definitions for the config and WAA area

The paths given here are used to store the persistent configuration data needed by FSVS; please see Files used by fsvs and Priorities for option setting for more details, and the Using an alternate root directory parameter as well as the Recovery for a non-booting system for further discussion.

    FSVS_CONF=/home/user/.fsvs-conf fsvs -o waa=/home/user/.fsvs-waa st
Note:
Please note that these paths can be given only as environment variables ($FSVS_CONF resp. $FSVS_WAA) or as command line parameter; settings in config files are ignored.

Configuration directory for the subversion libraries

This path specifies where the subversion libraries should take their configuration data from; the most important aspect of that is authentication data, especially for certificate authentication.

The default value is $FSVS_CONF/auth/.

/etc/fsvs/config could have eg.

    config_dir=/root/.subversion

Using an alternate root directory

This is a path that is prepended to $FSVS_WAA and $FSVS_CONF (or their default values, see Files used by fsvs), if they do not already start with it, and it is cut off for the directory-name MD5 calculation.

When is that needed? Imagine that you've booted from some Live-CD like Knoppix; if you want to setup or restore a non-working system, you'd have to transfer all files needed by the FSVS binary to it, and then start in some kind of chroot environment.

With this parameter you can tell FSVS that it should load its libraries from the current filesystem, but use the given path as root directory for its administrative data.

This is used for recovery; see the example in Recovery for a non-booting system.

So how does this work?

Previously you'd have to export your data back to the filesystem and call urls "fsvs urls" and FSVS sync-repos again, to get the WAA data back.

Note:
A plain chroot() would not work, as some needed programs (eg. the decoder for update, see Special property names) would not be available.
The easy way to understand softroot is: If you want to do a chroot() into the given directory (or boot with it as /), you'll want this set.
As this value is used for finding the correct working copy root (by trying to find a conf-path, it cannot be set from a per-wc config file. Only the environment, global configuration or command line parameter make sense.

Debugging and diagnosing

The next two options could be set in the global configuration file, to automatically get the last debug messages when an error happens.

To provide an easy way to get on-line debugging again, debug_output and debug_buffer are both reset to non-redirected, on-line output, if more than a single -d is specified on the command line, like this:

fsvs commit -m "..."  -d -d filenames

In this case you'll get a message telling you about that.

Destination for debug output

You can specify the debug output destination with the option debug_output. This can be a simple filename (which gets truncated on open), or, if it starts with a |, a command that the output gets piped into.

If the destination cannot be opened (or none is given), debug output goes to STDOUT (for easier tracing via less).

Example:

fsvs -o debug_output=/tmp/debug.out -d st /etc
Note:
That string is taken only once - at the first debug output line. So you have to use the correct order of parameters: -o debug_output=... -d.

An example: writing the last 200 lines of debug output into a file.

fsvs -o debug_output='| tail -200 > /tmp/debug.log' -d ....

Using a debug buffer

With the debug_buffer option you can specify the size of a buffer (in kB) that is used to capture the output, and which gets printed automatically if an error occurs.

This must be done before debugging starts, like with the debug_output specification.

fsvs -o debug_buffer=128 ...
Note:
If this option is specified in the configuration file or via the environment, only the buffer is allocated; if it is used on the command line, debugging is automatically turned on, too.

Setting warning behaviour

Please see the command line parameter -W, which is identical.

    fsvs -o warning=diff-status=ignore

Generated for fsvs by  doxygen 1.6.1