.dir-locals: rename python-indent (obsolete) to python-indent-offset.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
tgit.py: set BUP_MAIN_EXE and BUP_DIR in testpacks().

Set these variables in testpacks(), just as we do for
test_pack_name_lookup(), since it also depends on path.exe().

This was causing 'make check' to fail on Cygwin, and could be
reproduced on Linux by explicitly invoking tgit.py via "./wvtest.py
lib/bup/t/tgit.py".

Reported-by: Will Rouesnel <w.rouesnel@gmail.com>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
bup-save.md: note that restoration requires --name or the commit/tree id.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
rm-between-index-and-save.sh: fix race condition.

Fix a timing issue that often caused the test to fail -- the (removed)
file "foo" was marked as invalid in the index when it shouldn't have
been because it was modified less than tmax before the index run.

Insert a "bup tick" just before "bup index" so that foo won't be
marked invalid by the second run.

Don't expect the second "bup save" to fail since foo will now be valid
in the index (and hence ignored), even though it is no longer
available.  The removal will be noticed by the next index+save.

When removing directories, the outcome is different: since metadata is
saved per directory, "bup save" notices that the directory is missing
and logs an "errno 2" error, but does not crash, which is what the
tested patch is concerned with.  A third index+save run completes
without error.

This also means that without a "bup tick" before an index run, calls,
"bup save" might exit with non-zero exitcode when files/directories
are removed after bup index, but bup is not guaranteed to notice
missing files.

Signed-off-by: Tim Riemenschneider <git@tim-riemenschneider.de>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Rework "bup fsck" output; allow less verbosity.

Only print debug messages when verbose > 1 (i.e. -vv).

Use log() to print error messages to stderr instead of stdout.

When verbose level is at least 1, print a single descriptive line to
stdout.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
fsck-cmd.py: add par2_exists as a do_pack() argument.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
fsck-cmd.py: simplify do_pack() else clause.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Documentation: replace ~/.bup with $BUP_DIR in bup-index.md and bup-save.md.

When one is not using the default bupdir placement, then those files
aren't found inside ~/.bup, but wherever "-d /path.." or $BUP_DIR are
pointing to.

Thanks to krichter722@aol.de for mentioning this.

Signed-off-by: Gabriel Filion <gabster@lelutin.ca>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Catch errors when restoring Linux attrs into xfs or btrfs

Both xfs and btrfs turn out to return EOPNOTSUPP, rather than ENOTTY,
when we try to apply Linux attrs that they do not support.  This patch
improves matters in that it ensures we can restore into these file
systems without crashing, but does not quite address all issues yet:

- if any of the attributes we try to apply is not supported, none of
  them will be applied to the file at all
- the user will typically drown in error output; eg. for a backup
  originating from an ext4 file system, we can expect endless error
  output relating to the extents-flag not being supported on xfs/btrfs

Signed-off-by: Yung-Chin Oei <yungchin@yungchin.nl>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
README.md: describe mmap problems with limited address spaces.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
meta-cmd.py: mention --list in the invocation summary.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Use sys.platform instead of platform.system().

If nothing else, the former is computed at compile time, and so should
be more efficient.  Use the recommended "startswith()" idiom.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
metadata.py: use socket() instead of mknod(...IF_SOCK) on Cygwin.

Apparently os.mknod(...IF_SOCK) fails on Cygwin, but our t/mksock tool
(which uses socket()) works just fine, so use that in
_create_via_common_rec() when on Cygwin.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Remove lib.sh actually-root in favor of t/root-status.

Create a t/root-status command that outputs root, fake, or none and
that uses the same cross-platform logic as helpers.py is_superuser().
Use it everywhere.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
t/compare-trees: don't check ACLs on Cygwin (no support).

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
README.md: add Cygwin dependencies.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
t/test.sh: skip two "tree SHA1 didn't change" tests on Cygwin for now.

Apparently Cygwin has some unusual behaviors with respect to access
times, so disable these two tests for now.

Possibly related: http://cygwin.com/ml/cygwin/2007-06/msg00436.html

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Skip the large bloom filter test if mmap fails on 32-bit archtectures.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Fix completely broken invocations of t/root-status.

No idea what I was thinking.

Thanks to Sascha Silbe <sascha-ml-reply-to-2013-2@silbe.org> for the
report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
git.py: flush idx_map before close so FILE* operations will see changes.

Flush idx_map (msync()) before closing it, since it doesn't look like
POSIX guarantees that a matching FILE* (i.e. idx_f) will see the
parallel changes if we don't.

From the original report:

  After `bup save`, `git fsck` would show messages like
  "Packfile index for %s SHA1 mismatch"
  This indicated a bad trailing checksum on the pack index file.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Reported-by: Alan Jenkins <alan.christopher.jenkins@gmail.com>
Reviewed-by: Alan Jenkins <alan.christopher.jenkins@gmail.com>
Tested-by: Alan Jenkins <alan.christopher.jenkins@gmail.com>