]> arthur.barton.de Git - bup.git/log
bup.git
10 years agoRemove vestigial and inappropriate isnan()/isinf() timestamp tests.
Rob Browning [Sat, 28 Dec 2013 18:18:51 +0000 (12:18 -0600)]
Remove vestigial and inappropriate isnan()/isinf() timestamp tests.

I'm fairly sure this is an historical accident, but regardless, remove
the (my) obviously inappropriate floating point tests on integer
values from bup_parse_xutime_args().  Nothing to see here -- move
along.

I've broken this change out from a larger post-0.25 patch, where I'd
already fixed it, so that it'll be easy to pull into stable if we
like.

Thanks to Ed Maste <carpeddiem@gmail.com> for reporting the problem
(which prompted me to go ahead and create the separate fix).

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd -n, -A, -F, --file-type, --numeric-ids and detailed -l to "bup ls".
Rob Browning [Tue, 24 Dec 2013 21:34:44 +0000 (15:34 -0600)]
Add -n, -A, -F, --file-type, --numeric-ids and detailed -l to "bup ls".

With the addition of -A, change -a to behave more conventionally,
i.e. to show "." and "..".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Alexander Barton <alex@barton.de>
Reviewed-By: Zoran Zaric <zz@zoranzaric.de>
[rlb@defaultvalue.org: fall back to n.mode when n.metadata() isn't
 available in node_info() so that CommitDirs ("ls -AF /"), etc. will
 still work; thanks to Gabriel Filion <gabster@lelutin.ca> for the
 report; fix the rdiff-backup test to use -A.]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAlways publish utimensat in helpers when available and fix type conversions.
Rob Browning [Wed, 18 Dec 2013 02:56:52 +0000 (20:56 -0600)]
Always publish utimensat in helpers when available and fix type conversions.

Previously, bup assumed a timespec was (long, long), which agrees with
glibc.info, but utimensat(2) and POSIX say it's (time_t, long).

Since the types vary (and even if they didn't, Python doesn't provide
safe "time_t" conversions), add ASSIGN_PYLONG_TO_INTEGRAL(), which
should handle safely assigning a PyLong value to any given C integral
destination, whenever it will fit -- then use that macro to handle the
utimensat arguments.

Whenever it's available, publish utimensat independently in helpers.
For now, this allows us to test utimensat directly, and in the future,
it may allow us to test bup's behavior with either utimensat or
utimes/lutimes without recompilation, whenever both are available.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't fail tests when the timestamp read resolution is higher than write.
Rob Browning [Wed, 18 Dec 2013 02:19:44 +0000 (20:19 -0600)]
Don't fail tests when the timestamp read resolution is higher than write.

Previously, if bup was able to read path timestamps at a higher
resolution than it could write them, tests would fail.  This situation
can occur (for example) when the stat() resolution is 1ns, but either
the underlying filesystem's isn't, or bup wasn't able to find
utimensat at build time.

To fix this, compute the maximum resolution of the test filesystem
(via "t/ns-timestamp-resolutions HERE"), and then limit the "bup
xstat" timestamp resolution in the tests to match via a new
--mtime-resolution argument.

For completeness, also add --atime-resolution and --ctime-resolution
arguments.

Thanks to Tim Riemenschneider <t.riemenschneider@detco.de> for
reporting the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd restore option "--exclude-rx-from FILE".
Rob Browning [Fri, 20 Dec 2013 23:43:08 +0000 (17:43 -0600)]
Add restore option "--exclude-rx-from FILE".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd simple test for "index --exclude-rx-from FILE".
Rob Browning [Fri, 20 Dec 2013 23:26:11 +0000 (17:26 -0600)]
Add simple test for "index --exclude-rx-from FILE".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoMove the --exclude-rx tests from test.sh to test-save-restore-exclude-rx.sh.
Rob Browning [Fri, 20 Dec 2013 23:15:30 +0000 (17:15 -0600)]
Move the --exclude-rx tests from test.sh to test-save-restore-exclude-rx.sh.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd index option "--exclude-rx-from FILE".
Thomas Klausner [Fri, 20 Dec 2013 16:53:51 +0000 (17:53 +0100)]
Add index option "--exclude-rx-from FILE".

Signed-off-by: Thomas Klausner <tk@giga.or.at>
[rlb@defaultvalue.org: adjust commit message; change "path" to
 "pattern" in bup-index.md description; adjust bup-index.md text;
 adjust optspec text.]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoStop testing negative timestamps -- they're not necessarily valid.
Rob Browning [Thu, 19 Dec 2013 02:19:19 +0000 (20:19 -0600)]
Stop testing negative timestamps -- they're not necessarily valid.

Both timevals and timespecs use a time_t for the seconds which POSIX
requires to be an "integer or real-floating type", so unsigned integer
types are perfectly valid.  (See FUSE for example -- though it's not
even using a time_t; at the moment it's just using uint64_t...).

Thanks to Tim Riemenschneider <t.riemenschneider@detco.de> for
reporting the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRequire utimensat or utimes/lutimes.
Rob Browning [Mon, 16 Dec 2013 02:30:46 +0000 (20:30 -0600)]
Require utimensat or utimes/lutimes.

This was already true (tests would fail), so make it explicit, and if
we do encounter any platforms where none of these functions are
available, we can worry about it then.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoHACKING: update to reflect 0.25 release.
Rob Browning [Wed, 18 Dec 2013 21:37:20 +0000 (15:37 -0600)]
HACKING: update to reflect 0.25 release.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoUpdate README.md for 0.25. 0.25 0.25-rc5
Rob Browning [Sat, 23 Nov 2013 18:32:55 +0000 (12:32 -0600)]
Update README.md for 0.25.

Among other things, shift emphasis to index/save/restore over
split/join.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoid-other-than: exclude names based on their underlying ids.
Rob Browning [Tue, 10 Dec 2013 01:00:57 +0000 (19:00 -0600)]
id-other-than: exclude names based on their underlying ids.

This fixes a failure on systems that have more than one one user/group
name mapped to the same id (i.e. NetBSD's root/toor accounts).

Thanks to Thomas Klausner <tk@giga.or.at> for reporting the problem
and helping track down the solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agot/test-meta.sh: handle systems that have sgid directories.
Rob Browning [Fri, 6 Dec 2013 16:18:37 +0000 (10:18 -0600)]
t/test-meta.sh: handle systems that have sgid directories.

Explicitly chown the test directory to a group we're in so that the
tests will work on systems that have sgid directories by default
(i.e. NetBSD, etc.).

Thanks to Thomas Klausner <tk@giga.or.at> for reporting the problem
and helping track down the solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agotmetadata.py: chmod tree before deletion to fix NetBSD test failure.
Thomas Klausner [Fri, 6 Dec 2013 00:08:01 +0000 (01:08 +0100)]
tmetadata.py: chmod tree before deletion to fix NetBSD test failure.

Apparently NetBSD won't let you recursively delete a parent directory
containing a 000 subdirectory, so "chmod -R u+rwX" the tree first.

Signed-off-by: Thomas Klausner <tk@giga.or.at>
[rlb@defaultvalue.org: adjust commit message.]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd helpers.fdatasync(); fix interleaved mmap/read-write in midx.
Rob Browning [Tue, 3 Dec 2013 18:39:37 +0000 (12:39 -0600)]
Add helpers.fdatasync(); fix interleaved mmap/read-write in midx.

Have helpers.fdatasync() fall back to os.fsync() whenever
os.fdatasync() isn't available.

Thanks to Yann Autissier <yann.autissier@gmail.com> for reporting the
problem that prompted this work.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRemove t/ from the test-meta.sh test tree now that it contains t/tmp/.
Rob Browning [Wed, 4 Dec 2013 17:14:00 +0000 (11:14 -0600)]
Remove t/ from the test-meta.sh test tree now that it contains t/tmp/.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoCreate t/force-delete from t/lib.sh force-delete and use it everywhere.
Rob Browning [Tue, 3 Dec 2013 20:17:26 +0000 (14:17 -0600)]
Create t/force-delete from t/lib.sh force-delete and use it everywhere.

Move the t/lib.sh force-delete code to t/force-delete as a standalone
command, and use it everywhere -- particularly to delete t/tmp during
"make clean", given the recent move to run all tests inside t/ via
TMPDIR (18f838c9a66d521f9fa042eead3c5771ca99b03a).

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't compute local script_home in lib.sh realpath (depended on pwd).
Rob Browning [Tue, 3 Dec 2013 19:49:41 +0000 (13:49 -0600)]
Don't compute local script_home in lib.sh realpath (depended on pwd).

Compute bup_t_lib_script_home once at load time so that it won't be
affected by changes to pwd, and use it in realpath.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoUse the correct types when calling FS_IOC_GETFLAGS/FS_IOC_SETFLAGS.
Aurelien Jarno [Thu, 28 Nov 2013 18:36:16 +0000 (12:36 -0600)]
Use the correct types when calling FS_IOC_GETFLAGS/FS_IOC_SETFLAGS.

Despite the definitions in <linux/fs.h> these ioctls take int
arguments, not longs. This is important for 64-bit big endian
machines.

See http://marc.info/?l=linux-fsdevel&m=138552482917220&w=2

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
[rlb@defaultvalue.org: adjust commit message; use "I" conversion
 to/from Python instead of "k".]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't check ACLs in t/compare-trees on NetBSD.
Rob Browning [Mon, 25 Nov 2013 20:31:28 +0000 (14:31 -0600)]
Don't check ACLs in t/compare-trees on NetBSD.

Treat NetBSD like Cygwin and Darwin (OS X) in t/compare-trees.  This
should finish the process of disabling POSIX ACL support on NetBSD
that was started here: 349ff15c7db09883abc20bdf3e8a4df6bff12cd3.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRevert "Don't check ACLs in t/compare-trees on FreeBSD."
Rob Browning [Mon, 25 Nov 2013 20:27:25 +0000 (14:27 -0600)]
Revert "Don't check ACLs in t/compare-trees on FreeBSD."

This reverts commit 985b17f45707fe3759ca13f005625934f5f63b4c.

That should have been *NetBSD*.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't check ACLs in t/compare-trees on FreeBSD.
Rob Browning [Sun, 24 Nov 2013 18:05:00 +0000 (12:05 -0600)]
Don't check ACLs in t/compare-trees on FreeBSD.

Treat FreeBSD like Cygwin and Darwin (OS X) in t/compare-trees.  This
should finish the process of disabling POSIX ACL support on FreeBSD
that was started here: 349ff15c7db09883abc20bdf3e8a4df6bff12cd3.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoFix off-by-one in MAX_PER_TREE guard in _squish().
Rob Browning [Sat, 23 Nov 2013 19:15:45 +0000 (13:15 -0600)]
Fix off-by-one in MAX_PER_TREE guard in _squish().

Previously bup would allow MAX_PER_TREE + 1 items in a tree.  Change
the guard to ensure that trees really are limited to MAX_PER_TREE.

Thanks to Patrick Rouleau <prouleau72@gmail.com> for reporting the
problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoEnforce MAX_PER_TREE by always _squish()ing in spit_to_shalist().
Rob Browning [Wed, 20 Nov 2013 20:57:53 +0000 (14:57 -0600)]
Enforce MAX_PER_TREE by always _squish()ing in spit_to_shalist().

Previously bup would ignore MAX_PER_TREE whenever it hit a long run of
data that didn't produce a non-zero hashplit "level" (see the
discussion of fanout in DESIGN).  That can happen, for example, when
traversing a file containing large zero regions (sparse or not).

As a result, bup could produce an arbitrarily large number of blobs at
level 0 of the hashsplit tree, causing it to consume increasing memory
during split/save, and to behave badly during join/restore.

To fix that, don't try to outsmart _squish() -- just call it every
time, and let it enforce MAX_PER_TREE when appropriate.

Thanks to trebor <robert.rebstock@tempelhof-projekt.de> for reporting
the problem a long while back, Yung-Chin Oei <yungchin@yungchin.nl>
for tracking down the cause and proposing a slightly different fix,
and Aidan Hobson Sayers <aidanphs@gmail.com> for suggesting this
particular approach.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRemove redundant *bits assignment in bupsplit_find_ofs().
Rob Browning [Wed, 20 Nov 2013 04:18:18 +0000 (22:18 -0600)]
Remove redundant *bits assignment in bupsplit_find_ofs().

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDESIGN: fix typo.
Rob Browning [Tue, 19 Nov 2013 19:11:51 +0000 (13:11 -0600)]
DESIGN: fix typo.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoCompletely disable ACL support on NetBSD for now.
Thomas Klausner [Sat, 16 Nov 2013 02:05:17 +0000 (03:05 +0100)]
Completely disable ACL support on NetBSD for now.

Signed-off-by: Thomas Klausner <tk@giga.or.at>
[rlb@defaultvalue.org: adjust commit message; wrap code.]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agometadata.py: fix incorrectly indented line in Writer._add().
Rob Browning [Tue, 19 Nov 2013 16:29:08 +0000 (10:29 -0600)]
metadata.py: fix incorrectly indented line in Writer._add().

Thanks to Patrick Rouleau <prouleau72@gmail.com> for reporting the
problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agometadata.py: fix variable access in Writer.add(); tmax -> self.tmax.
Rob Browning [Sun, 17 Nov 2013 17:13:04 +0000 (11:13 -0600)]
metadata.py: fix variable access in Writer.add(); tmax -> self.tmax.

Thanks to Patrick Rouleau <prouleau72@gmail.com> for reporting the
problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoManually set TMPDIR to $(CURDIR)/tmp for all tests for now.
Rob Browning [Sat, 16 Nov 2013 23:38:57 +0000 (17:38 -0600)]
Manually set TMPDIR to $(CURDIR)/tmp for all tests for now.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoMakefile: simplify runtests-python since metadata tests aren't conditional.
Rob Browning [Fri, 15 Nov 2013 20:23:12 +0000 (14:23 -0600)]
Makefile: simplify runtests-python since metadata tests aren't conditional.

Since the metadata tests are no longer conditional, revert
runtests-python to the simpler implementation.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't crash; defer an error when a path changes while indexing it. 0.25-rc4
Rob Browning [Tue, 12 Nov 2013 17:38:35 +0000 (11:38 -0600)]
Don't crash; defer an error when a path changes while indexing it.

Mirror the error handling already used by save.

With this change the result for a path that changes or is deleted
between the drecurse traversal and the from_path() call should be the
same as the result for a path that changes or is deleted between index
and save.

Thanks to Yann Autissier <yann.autissier@gmail.com> for reporting the
problem and Gabriel Filion <gabster@lelutin.ca> for helping figure out
the solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agotest.sh: accommodate platforms where root defaults to "ls -A" again.
Rob Browning [Mon, 11 Nov 2013 21:41:08 +0000 (15:41 -0600)]
test.sh: accommodate platforms where root defaults to "ls -A" again.

For now just use "bup ls -a" and "ls -A", which currently match in
behavior.  Of course we'll have to change that to "bup ls -A" once we
fix "bup ls".

Thanks to Thomas Klausner <tk@giga.or.at> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoREADME.md: change python-dev to python-devel for CentOS.
Rob Browning [Mon, 11 Nov 2013 19:05:56 +0000 (13:05 -0600)]
README.md: change python-dev to python-devel for CentOS.

Thanks to Gao Yongwei <itxx00@gmail.com> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRevert "Makefile: avoid using -Werror with clang for now."
Rob Browning [Mon, 11 Nov 2013 18:26:04 +0000 (12:26 -0600)]
Revert "Makefile: avoid using -Werror with clang for now."

Remove the clang -Werror special case after changing the way we handle
integer conversions (9ecba738e119654b7231be08232f8c484f8b1a93).

This reverts commit 3fdd538a22eae6681df3a59c116f78c237c9ecc7.

Thanks to Thomas Klausner <tk@giga.or.at> for the report.

10 years agoAccommodate systems where paths inherit their group from the parent dir.
Rob Browning [Mon, 11 Nov 2013 18:03:25 +0000 (12:03 -0600)]
Accommodate systems where paths inherit their group from the parent dir.

Thanks to Thomas Klausner <tk@giga.or.at> for reporting the problem
and helping test the solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years ago_helpers.c: be smarter when converting unknown integer types to python.
Rob Browning [Sun, 10 Nov 2013 17:21:46 +0000 (11:21 -0600)]
_helpers.c: be smarter when converting unknown integer types to python.

For now assume that long long and unsigned long long are always the
the largest integer types, and convert unknown size integers to Python
via PyLong_FromUnsignedLongLong() or PyLong_FromLongLong(), depending
on the value's sign.

Thanks to Thomas Klausner <tk@giga.or.at> for reporting the problem
and helping  track down the solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoOnly allow "index --clear" to clear the default index (BUP_DIR/bupindex).
Rob Browning [Fri, 8 Nov 2013 17:35:44 +0000 (11:35 -0600)]
Only allow "index --clear" to clear the default index (BUP_DIR/bupindex).

For now, disallow clearing "external" indexes.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoMakefile: avoid using -Werror with clang for now.
Rob Browning [Sun, 10 Nov 2013 20:11:44 +0000 (14:11 -0600)]
Makefile: avoid using -Werror with clang for now.

Apparently the default compiler on OS X and FreeBSD is now clang, and
it doesn't like our CHECK_VALUE_FITS() definition.  So for now, just
don't specify -Werror when we detect clang.

Thanks to Alexander Barton <alex@barton.de>, Thomas Klausner
<tk@giga.or.at>, Sebastian Schumb <sebastian@sebastians-site.de>, and
Zoran Zaric <zz@zoranzaric.de> for reporting the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Alexander Barton <alex@barton.de>
10 years agotag-cmd.py: add "FIXME: review for safe writes.".
Rob Browning [Sat, 9 Nov 2013 20:17:11 +0000 (14:17 -0600)]
tag-cmd.py: add "FIXME: review for safe writes.".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd 'tag -f' support.
Ben Kelly [Sat, 9 Nov 2013 19:21:04 +0000 (14:21 -0500)]
Add 'tag -f' support.

Add a new flag, -f/--force, to bup tag. By analogy with 'git tag',
'bup tag -f foo commit' will create tag *foo* even if a tag with that
name already exists; the existing tag will be silently overwritten.

By analogy with 'rm -f', add 'bup tag -d -f'. All this does is
suppress the error when you attempt to 'bup tag -d' a tag that doesn't
exist; it is primarily for use in scripts that want to delete a tag
that may or may not exist in the first place without 'bup tag'
reporting a failure.

Signed-off-by: Ben Kelly <btk@google.com>
[rlb@defaultvalue.org: add missing "tag" and wrap text in bup-tag.md;
 put "-d" first in tag-cmd.py optspec line and bup-tag.md; adjust
 commit message.]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agobup-index.md: make it clear that *bup* doesn't expand --exclude paths.
Rob Browning [Sat, 9 Nov 2013 18:30:54 +0000 (12:30 -0600)]
bup-index.md: make it clear that *bup* doesn't expand --exclude paths.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoxstat.py: include "s" for socket in mode strings, i.e. "srw-r-----".
Rob Browning [Sat, 9 Nov 2013 18:08:21 +0000 (12:08 -0600)]
xstat.py: include "s" for socket in mode strings, i.e. "srw-r-----".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agotest-meta.sh: add a missing WVPASS in the ownership restoration tests.
Rob Browning [Fri, 8 Nov 2013 17:26:11 +0000 (11:26 -0600)]
test-meta.sh: add a missing WVPASS in the ownership restoration tests.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoindex.py: compute the index metadata offset more carefully.
Rob Browning [Fri, 8 Nov 2013 00:33:43 +0000 (18:33 -0600)]
index.py: compute the index metadata offset more carefully.

Previously when reading bupindex.meta (or similar), bup computed the
metadata file offset for it's internal lookup table by just
subtracting the size of a re-encoding of the metadata from file.tell()
after the read.  This works fine until we change the length of the
metadata representation (which we just did); then bup will get the
wrong length from the re-encoded data.

To fix this, do what we should have done originally and capture the
index metadata offset before reading the metadata via tell(), and use
that instead.

Thanks to Mark J Hewitt <mjh@idnet.com> for being the first (known)
victim and for helping track down the solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agocurrent-filesystem(): accommodate NetBSD and SunOS.
Rob Browning [Thu, 7 Nov 2013 18:29:37 +0000 (12:29 -0600)]
current-filesystem(): accommodate NetBSD and SunOS.

Thanks to Thomas Klausner <tk@giga.or.at> for reporting the problem,
and providing the alternate commands.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agobup-restore.md: add more detail to the restore --map-* documentation.
Rob Browning [Wed, 6 Nov 2013 17:50:21 +0000 (11:50 -0600)]
bup-restore.md: add more detail to the restore --map-* documentation.

Thanks to Gabriel Filion <gabster@lelutin.ca> for the suggestions.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
10 years agoAdd --map-user --map-group --map-uid and --map-gid options to restore.
Rob Browning [Tue, 15 Oct 2013 19:20:10 +0000 (14:20 -0500)]
Add --map-user --map-group --map-uid and --map-gid options to restore.

Note that the usual metadata rules still appply, so a user or group
entry will normally take precedence over a uid/gid unless
--numeric-ids is specified.  So if you want to map a uid, for example,
you'll either need --numeric-ids, or you'll need to clear the
user/group like this:

  bup restore ... --map-user rlb= --map-uid 1000=2000

These options should also make it possible to recover from archives
that were broken as a result of our incorrect handling of
signed/unsigned stat values (recently fixed).

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
10 years agoTreat stat fields correctly as signed, unsigned, or unspecified (cf. POSIX).
Rob Browning [Sat, 12 Oct 2013 18:59:07 +0000 (13:59 -0500)]
Treat stat fields correctly as signed, unsigned, or unspecified (cf. POSIX).

Patrick reported a problem with restore on Cygwin that was being
caused by bup's handling of unknown uid/gid values; it turns out that
Cygwin returns -1 in that situation:

  http://www.cygwin.com/cygwin-ug-net/ntsec.html
  "Special values of user and group ids"

However, bup didn't see -1; bup saw 4294967295, because it was
incorrectly converting some stat field values as unsigned when POSIX
says that they should be signed (or doesn't specify):

  http://pubs.opengroup.org/onlinepubs/009695299/basedefs/sys/types.h.html

To fix the problem, convert the stat fields correctly -- using the
widest type available (PY_LONG_LONG), and add a new common metadata
record (_rec_tag_common_v2) to store them correctly.  Test at runtime
for potential overflows that we can't rule out at compile time.

Store all of the fields (excepting the timestamp ns values, which we
already force to be non-negative) as signed vints because the overhead
should be negligible, and doing so means that we won't have to break
backward compatibility again if we ever decide we actually want to
store negative values.

Continue to read the legacy format as before, with the realization
that this may leave some existing archives broken.  At the moment, the
only known case is the Cygwin "unknown uid/gid" problem cited above,
and to help with that and similar cases, we'll be adding
--map-{user,group,uid,gid} options to restore.

Thanks to Patrick Rouleau <prouleau72@gmail.com> for the initial
report leading to the deeper problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
10 years agoCorrect thanks for commit ff5e91840c92fbb3af70731ede8696114dfee7aa.
Rob Browning [Wed, 6 Nov 2013 22:29:57 +0000 (16:29 -0600)]
Correct thanks for commit ff5e91840c92fbb3af70731ede8696114dfee7aa.

Thanks to Ben Kelly <btk@google.com> for tracking down the problem,
rather than Alexander Barton <alex@barton.de>.

Original message:

  Author: Rob Browning <rlb@defaultvalue.org>
  Date:   Tue Nov 5 17:17:45 2013 -0600

    Don't include atime when determining hardlink compatibility.

    Don't include the atimes since we're comparing two paths stat()ed at
    different times, and depending on the
    platform/filesystem/mount-options, that may result in two different
    atimes, even when the paths refer to the same file.

    Thanks to Alexander Barton <alex@barton.de> for tracking down the
    problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't include atime when determining hardlink compatibility.
Rob Browning [Tue, 5 Nov 2013 23:17:45 +0000 (17:17 -0600)]
Don't include atime when determining hardlink compatibility.

Don't include the atimes since we're comparing two paths stat()ed at
different times, and depending on the
platform/filesystem/mount-options, that may result in two different
atimes, even when the paths refer to the same file.

Thanks to Alexander Barton <alex@barton.de> for tracking down the
problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
10 years agoUse "type -p" instead of "which" in test.sh.
Rob Browning [Tue, 5 Nov 2013 22:39:31 +0000 (16:39 -0600)]
Use "type -p" instead of "which" in test.sh.

Which isn't portable (if I recall correctly), and we know we're in
Bash.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd current-filesystem and path-filesystems to t/lib.sh; use to guard test.
Rob Browning [Tue, 5 Nov 2013 22:29:53 +0000 (16:29 -0600)]
Add current-filesystem and path-filesystems to t/lib.sh; use to guard test.

Add current-filesystem which reports the current filesystem type, and
path-filesystems which reports all the filesystems back up to the
root, and use the latter to skip the "save --strip-path (no match)"
test whenever all the filesystems involved aren't the same type.

This issue was discovered while testing on
/some/ext4/tree/containing/a/btrfs/tree.  When the test indexes/saves,
it picks up the metadata for the parents above the btrfs, which may
have (for example) linux +e attrs.  Then when it tries to restore the
tree fully within the btrfs, the restore defers an error when it tries
to restore the +e, which isn't valid for btrfs.

Normally we can avoid this problem via --strip, but this particular
test is actually checking the behavior when --strip doesn't apply.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoInclude the chattr value in the ApplyError.
Rob Browning [Tue, 5 Nov 2013 22:25:54 +0000 (16:25 -0600)]
Include the chattr value in the ApplyError.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years ago_apply_linux_xattr_rec(): do nothing if no rec; fix restricted access test.
Rob Browning [Tue, 5 Nov 2013 22:17:04 +0000 (16:17 -0600)]
_apply_linux_xattr_rec(): do nothing if no rec; fix restricted access test.

If the metadata object has no linux_xattr, don't do anything at all in
_apply_linux_xattr_rec(), and don't test the filesystem for xattr
support to determine whether or not to expect an xattr error, because
EACCES trumps the other errors.

This should be more efficient and fix a
test_apply_to_path_restricted_access() failure.

Thanks to Sebastian Schumb <sebastian@sebastians-site.de> for
reporting the problem and helping track down the fix.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agotest.sh: remove "wc -l" quoting until/unless we fix the broader issue.
Rob Browning [Mon, 4 Nov 2013 15:34:17 +0000 (09:34 -0600)]
test.sh: remove "wc -l" quoting until/unless we fix the broader issue.

On some platforms "wc -l" returns whitespace along with the count,
which breaks the one case where we quoted the result, i.e. "$(... | wc
-l").  For now, remove the quoting until/unless we decide to fix all
of the affected invocations.

Thanks to Thomas Klausner <tk@giga.or.at> for reporting the problem on
NetBSD.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agotest-meta.sh: prefer the more portable test '=' to '=='.
Thomas Klausner [Sun, 3 Nov 2013 11:55:27 +0000 (12:55 +0100)]
test-meta.sh: prefer the more portable test '=' to '=='.

Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
[rlb@defaultvalue.org: adjust commit message.]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agoCall date with -d since it's more portable than --date.
Thomas Klausner [Sun, 3 Nov 2013 11:55:25 +0000 (12:55 +0100)]
Call date with -d since it's more portable than --date.

Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
[rlb@defaultvalue.org: adjust commit message.]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agoimport-rsnapshot-cmd.sh: add a few missing failure checks.
Rob Browning [Sun, 3 Nov 2013 17:35:37 +0000 (11:35 -0600)]
import-rsnapshot-cmd.sh: add a few missing failure checks.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoSet pipefail so that "x | y || exit $?" will work properly.
Rob Browning [Sat, 2 Nov 2013 17:55:49 +0000 (12:55 -0500)]
Set pipefail so that "x | y || exit $?" will work properly.

Set pipefail so that constructs like this will work properly:

  x | y | z || exit $?

or

  WVPASS x | WVPASS y | WVPASS z || exit $?

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agobup-index.md: indicate that non-rx --exclude paths are taken literally.
Rob Browning [Sat, 2 Nov 2013 16:26:26 +0000 (11:26 -0500)]
bup-index.md: indicate that non-rx --exclude paths are taken literally.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoindex-cmd.py: pass exclude_rxs as an argument to update_index.
Rob Browning [Sat, 2 Nov 2013 16:15:15 +0000 (11:15 -0500)]
index-cmd.py: pass exclude_rxs as an argument to update_index.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agotest-cat-file.sh: use -l instead of -b; explain differences.
Rob Browning [Thu, 31 Oct 2013 15:23:24 +0000 (10:23 -0500)]
test-cat-file.sh: use -l instead of -b; explain differences.

It turns out that cmp -b doesn't work on at least NetBSD, so use -l
instead, and when there's a problem, diff the "bup meta" output as
well.

Thanks to Thomas Klausner <tk@giga.or.at> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't expect an attr error when the metadata has no attr.
Rob Browning [Fri, 1 Nov 2013 23:32:22 +0000 (18:32 -0500)]
Don't expect an attr error when the metadata has no attr.

When the metadata object has no Linux attr, there won't be an attr
related failure, so don't look for it.

Thanks to Alexander Barton <alex@barton.de> and Mark J Hewitt
<mjh@idnet.com> for reporting and helping track down the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agotmetadata.py: don't look for attr and xattr errors when impossible.
Rob Browning [Tue, 29 Oct 2013 21:21:01 +0000 (16:21 -0500)]
tmetadata.py: don't look for attr and xattr errors when impossible.

Don't look for the errors when the current (file)system doesn't
support the relevant features.

Thanks to Alexander Barton <alex@barton.de> and Mark J Hewitt
<mjh@idnet.com> for reporting the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoMake force-delete more flexible, and more likely to succeed.
Rob Browning [Tue, 29 Oct 2013 01:23:38 +0000 (20:23 -0500)]
Make force-delete more flexible, and more likely to succeed.

Thanks to Alexander Barton <alex@barton.de> for helping track down
the correct chattr invocation.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't use "set -e" in import-rdiff-backup.sh.
Rob Browning [Mon, 28 Oct 2013 18:02:45 +0000 (13:02 -0500)]
Don't use "set -e" in import-rdiff-backup.sh.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRemove all of the remaining test-related "set -e" usage.
Rob Browning [Sun, 27 Oct 2013 22:42:39 +0000 (17:42 -0500)]
Remove all of the remaining test-related "set -e" usage.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoFix xattr tests and bugs revealed (fully remove set -e from test-meta.sh).
Rob Browning [Sun, 27 Oct 2013 18:23:20 +0000 (13:23 -0500)]
Fix xattr tests and bugs revealed (fully remove set -e from test-meta.sh).

Fixing the xattr tests to run correctly pointed out that bup stops
trying to apply metadata after the first failure (i.e. after any
metadata record application fails).  Change it so that bup always
tries every metadata record.  Otherwise, bup may skip some forms of
metadata without any notification -- and it shouldn't.  For example,
it shouldn't skip ACLs just because the current filesystem doesn't
support xattrs.

Fix two additional problems that were exposed by the changes described
above.

Check for EACCES when trying to apply an attr record, and properly
convert it to an ApplyError.  This problem was revealed by
test_apply_to_path_restricted_access.

Check for EACCES when trying to read the current filesystem xattrs
during the process of applying the metadata xattrs, and when
encountered, convert it to an ApplyError.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoFix ACL tests, and the bugs revealed thereby.
Rob Browning [Sun, 27 Oct 2013 18:02:08 +0000 (13:02 -0500)]
Fix ACL tests, and the bugs revealed thereby.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRemove more of the "set -e" dependency from test-meta.sh.
Rob Browning [Sun, 27 Oct 2013 16:25:53 +0000 (11:25 -0500)]
Remove more of the "set -e" dependency from test-meta.sh.

Remove the "set -e" dependency from the remaining code where doing so
doesn't reveal any bugs.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoFix the "set -e" problem in the test-meta.sh chattr tests.
Rob Browning [Sat, 26 Oct 2013 20:03:12 +0000 (15:03 -0500)]
Fix the "set -e" problem in the test-meta.sh chattr tests.

Start fixing the "set -e" problem, beginning with the test-meta.sh
chattr tests, and add support to the test filesystem for options
needed by the chattr calls.

To allow us to produce a more digestable sequence of patches for the
broader "set -e" problem, temporarily establish BUP_SKIP_BROKEN_TESTS
which will do what it says when set, and until we finish repairing
everything, it must be set during any testing:

  BUP_SKIP_BROKEN_TESTS=1 make check

The fundamental issue with "set -e" is that it has some unexpected
(but documented) semantics.  For example:

  set -e
  foo() { false; rm -rf /; }

  # Effectively harmless
  foo

  # Erase the filesystem
  foo || true

If nothing else, this behavior appears to have been masking test
failures.  Better to just avoid "set -e" altogether.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd /t/tmp/ to .gitignore.
Phil Hord [Fri, 1 Nov 2013 21:25:01 +0000 (17:25 -0400)]
Add /t/tmp/ to .gitignore.

Signed-off-by: Phil Hord <hordp@cisco.com>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agoREADME.md: fix typo; cited article is about 'git'.
Phil Hord [Fri, 1 Nov 2013 21:25:00 +0000 (17:25 -0400)]
README.md: fix typo; cited article is about 'git'.

Signed-off-by: Phil Hord <hordp@cisco.com>
[rlb@defaultvalue.org: adjust commit message.]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agometa-cmd.py: actually respond to recursion options.
Rob Browning [Thu, 31 Oct 2013 16:57:01 +0000 (11:57 -0500)]
meta-cmd.py: actually respond to recursion options.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoRemove misleading -1 from BUP_WINDOWSIZE definition.
Aidan Hobson Sayers [Sun, 20 Oct 2013 19:32:15 +0000 (20:32 +0100)]
Remove misleading -1 from BUP_WINDOWSIZE definition.

Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
10 years agoCorrect DESIGN to refer to 64 byte rolling window.
Aidan Hobson Sayers [Sun, 20 Oct 2013 19:32:14 +0000 (20:32 +0100)]
Correct DESIGN to refer to 64 byte rolling window.

Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
10 years agoHACKING: correct output folder in the format-patch example
Aidan Hobson Sayers [Thu, 24 Oct 2013 19:57:31 +0000 (20:57 +0100)]
HACKING: correct output folder in the format-patch example

Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
Reviewed-by: Zoran Zaric <zz@zoranzaric.de>
[rlb@defaultvalue.org: adjust commit message.]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agoFix top-level non-dir metadata restoration with /foo/latest/target/ syntax.
Rob Browning [Tue, 22 Oct 2013 17:06:56 +0000 (12:06 -0500)]
Fix top-level non-dir metadata restoration with /foo/latest/target/ syntax.

Previously something like "bup restore -C dest /foo/latest/bar/" would
fail to restore metadata for top-level, non-directory paths inside
bar.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoIgnore atime when testing bup cat-file --meta.
Rob Browning [Wed, 23 Oct 2013 20:43:38 +0000 (15:43 -0500)]
Ignore atime when testing bup cat-file --meta.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoDon't create ACL objects until they're needed.
Rob Browning [Mon, 21 Oct 2013 20:57:40 +0000 (15:57 -0500)]
Don't create ACL objects until they're needed.

Previously bup would store the POSIX1e ACL information in metadata
objects as pylibacl objects.  That meant bup would have to be able to
create those objects immediately when loading the metadata record.

Aside from being unnecessary, that was causing top-level crashes in
cases where the ACL object creation failed.  That's because bup would
throw an exception (deferred via add_error()) without skipping the ACL
metadata record content.  After that, all metadata reads would be out
of sync, resulting in erroneous reads, and an eventual EOFError.

To fix the problem, don't convert the encoded ACL data to pylibacl
objects until necessary (i.e. unless trying to apply the ACLs to the
filesystem via bup restore).  With that change bup should no longer
get out of sync when reading the metadata, and in cases where it would
be impossible to create the pylibacl objects (i.e. the local machine's
user/groups won't allow it), bup won't just drop the metadata.  For
example,

  bup meta --edit --set-user rlb < metadata.old > metadata.new

will no longer silently drop ACL information in metadata.old on error.

Thanks to Anton Eliasson <devel@antoneliasson.se> for reporting the
problem and helping track it down.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agometadata_file(): don't load metadata objects for all the files in a dir.
Rob Browning [Fri, 18 Oct 2013 23:30:01 +0000 (18:30 -0500)]
metadata_file(): don't load metadata objects for all the files in a dir.

When only asked for the .bupm via metdata_file(), don't also parse the
.bupm and create all the metadata objects for the dir.  Aside from
being potentially wasteful, that may also make it impossible to
retrieve a broken .bupm via "cat-file --bupm" (for analysis).

Thanks to Anton Eliasson <devel@antoneliasson.se> for helping find the
problem and test the fix.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoAdd "bup cat-file [--meta|--bupm] /branch/revision/[path]".
Rob Browning [Tue, 15 Oct 2013 02:29:45 +0000 (21:29 -0500)]
Add "bup cat-file [--meta|--bupm] /branch/revision/[path]".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoFix id-other-than usage message.
Rob Browning [Tue, 22 Oct 2013 15:56:19 +0000 (10:56 -0500)]
Fix id-other-than usage message.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoOnly forward signals when appropriate; on SIGTSTP suspend parent too.
Rob Browning [Fri, 18 Oct 2013 18:46:05 +0000 (13:46 -0500)]
Only forward signals when appropriate; on SIGTSTP suspend parent too.

Finish the main.py work, started in
aa6f2c87e6f1292f1fa22f618532b65a5565d604, which began forwarding
SIGTSTP and SIGCONT to the child process so that it would
suspend/resume with the parent.

Only forward signals to the child when appropriate -- guarded by p and
forward_signals.  After forwarding SIGTSTP (as SIGSTOP) to the child,
reset the SIGTSTP handler to its default behavior and re-send SIGTSTP
to the parent so that it will actually suspend too.

Thanks to Karl Kiniger <karl.kiniger@med.ge.com> for reporting the
problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoUpdate version extraction for _version.py to work with the new tag syntax.
Patrick Rouleau [Mon, 30 Sep 2013 04:10:50 +0000 (00:10 -0400)]
Update version extraction for _version.py to work with the new tag syntax.

The version tag used to be in the form "bup-<version>".

The syntax is now just "<version>" to allow github to produce
reasonable archives (i.e. not bup-bup-VERSION).

Signed-off-by: Patrick Rouleau <prouleau72@gmail.com>
Reviewed-by: Gabriel Filion <gabster@lelutin.ca>
[rlb@defaultvalue.org: adjust commit message.]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agobloom-cmd.py: close open file object for tfname before attempting a rename.
Rob Browning [Sun, 6 Oct 2013 19:33:35 +0000 (14:33 -0500)]
bloom-cmd.py: close open file object for tfname before attempting a rename.

Ben Kelly reported a an IOException (permission denied) during "bup
bloom" on Cygwin.  The exception was caused by the attempt to
os.rename(tfname, outfilename) in do_bloom().

This appears to be because Cygwin doesn't allow you to rename a file
while it's still open.  At first, we thought this might be because
bloom.py create() opens tfname, passes the resulting file to ShaBloom,
and then no one ever explicitly closes it.  So if the gc hasn't
collected the ShaBloom object before the rename, we're in trouble.

However, the problem may also have been caused by an unrelated process
scanning the file at the same time.

In any case, for the moment, explicitly close the ShaBloom object
before the rename.  That shouldn't hurt, and may help.

Thanks to Ben Kelly <btk@google.com> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoFall back from mknod() to socket()/bind() on EPERM for SOCK_STREAM.
Rob Browning [Tue, 8 Oct 2013 16:18:00 +0000 (11:18 -0500)]
Fall back from mknod() to socket()/bind() on EPERM for SOCK_STREAM.

Apparently OS X is throwing EPERM for mknod(... SOCK_STREAM), and the
current OS X manpage does state that mknod() requires superuser
privileges.

Thanks to Zoran Zaric <zz@zoranzaric.de> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoHandle EOPNOTSUPP as an indicator that Linux attrs are not supported.
Rob Browning [Sat, 5 Oct 2013 18:01:37 +0000 (13:01 -0500)]
Handle EOPNOTSUPP as an indicator that Linux attrs are not supported.

Add EOPNOTSUPP to the set of errno values in _add_linux_attr() that
indicate Linux attrs are not supported by the target filesystem.  The
problem was observed on ZFS-on-Linux, 0.6.2.

Thanks to Will Rouesnel <w.rouesnel@gmail.com> for the report and an
initial patch.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoBe more careful when testing that repeated saves can produce the same tree.
Rob Browning [Sat, 5 Oct 2013 01:58:07 +0000 (20:58 -0500)]
Be more careful when testing that repeated saves can produce the same tree.

Previously, test.sh would run multiple saves with no intervening
modifications, and check to see that the top-level "save -t" hash
didn't change, but with the addition of metadata this may fail on some
platforms where the test process itself (the save runs, etc.) affects
atime values.  That's because save is pulling the metadata for
unindexed parent directories directly from the filesystem.  And note
that atime is only special here because the test itself may
incidentally alter it -- we would see the same problem if any of the
other metdata for one of the unindexed parent directories changed
during the test run (i.e. mtime, uid, gid, ...).

To fix this, move the relevant test code from test.sh to
test-redundant-saves.sh, and use a newly added subdir-hash tool so
that we can compare the hashes of the roots of the indexed subtrees
instead of the top-level "save -t" hashes, ignoring the unindexed
parents entirely.

Thanks to Robert Edmonds <edmonds@debian.org> for running rc3 through
the Debian buildds which lead to the kFreeBSD test failure that
demonstrated the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoMove _helper.c's Python.h back up (now to the top), because Python. 0.25-rc3
Rob Browning [Mon, 23 Sep 2013 00:18:24 +0000 (19:18 -0500)]
Move _helper.c's Python.h back up (now to the top), because Python.

Move the Python.h include in _helper.c to the top because Python says
so:

  http://docs.python.org/2/c-api/intro.html#include-files

Though according to this, it's been fixed upstream:

  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=206805

Which might explain why I didn't see the problem here.

Thanks to Chandan Kumar <chandank.kumar@gmail.com> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoMove non-system includes after system includes in _helpers.c.
Rob Browning [Fri, 20 Sep 2013 18:33:02 +0000 (13:33 -0500)]
Move non-system includes after system includes in _helpers.c.

Having Python.h before assert.h was apparently causing trouble on
OpenBSD:

  _helpers.c: In function 'bup_xutime_ns':
  _helpers.c:842: warning: implicit declaration of function 'utimensat'
  _helpers.c:842: error: 'AT_FDCWD' undeclared (first use in this function)
  _helpers.c:842: error: (Each undeclared identifier is reported only once
  _helpers.c:842: error: for each function it appears in.)
  _helpers.c:843: error: 'AT_SYMLINK_NOFOLLOW' undeclared (first use in this function)
  error: command 'cc' failed with exit status 1

...and moving the non-sytem includes lower is reasonable anyway.

Thanks to Ryan Hinton <iobass@email.com> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoconfigure: since the *BSDs have GNU make as gmake, look for that too.
Rob Browning [Fri, 20 Sep 2013 17:14:09 +0000 (12:14 -0500)]
configure: since the *BSDs have GNU make as gmake, look for that too.

Thanks to Ryan Hinton <iobass@email.com> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoIgnore unimplemented metadata record during read (_rec_tag_nfsv4_acl).
Rob Browning [Wed, 18 Sep 2013 17:20:28 +0000 (12:20 -0500)]
Ignore unimplemented metadata record during read (_rec_tag_nfsv4_acl).

Don't test for _rec_tag_nfsv4_acl and then try to call an
unimplemented method in Metadata.read().  Otherwise, if/when we do add
support, older versions of bup will choke on it.

Thanks to Alexander Barton <alex@barton.de> for pointing this out.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoQuash stat(2) st_rdev unless we're going to need it for mknod().
Rob Browning [Tue, 17 Sep 2013 01:47:28 +0000 (20:47 -0500)]
Quash stat(2) st_rdev unless we're going to need it for mknod().

On some platforms (i.e. kFreeBSD), the st_rdev value isn't completely
stable.  For example, given "date > foo; cp -a foo foo-2", the st_rdev
value may differ between the two files.

Since we only need the st_rdev value for the call to mknod() when
restoring character and block special files, set it to zero for
anything else.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agowrite_idx: make filename char* non-const (fixes python 2.6.6 compatibility).
Rob Browning [Tue, 17 Sep 2013 22:17:55 +0000 (17:17 -0500)]
write_idx: make filename char* non-const (fixes python 2.6.6 compatibility).

Thanks to Alexander Barton <alex@barton.de> for the report.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoMention --git-ids in bup split -h output sample commands.
Rob Browning [Tue, 17 Sep 2013 21:33:49 +0000 (16:33 -0500)]
Mention --git-ids in bup split -h output sample commands.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
10 years agoUpdate bup split -h output (optspec) to distinguish between split "modes".
Gabriel Filion [Sun, 8 Sep 2013 03:26:16 +0000 (23:26 -0400)]
Update bup split -h output (optspec) to distinguish between split "modes".

Split it into three lines to clearly show that some modes don't fare
well with others.

Signed-off-by: Gabriel Filion <gabster@lelutin.ca>
[rlb@defaultvalue.org: adjust commit message.]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
10 years agoUpdate bup-split(1); document -d, clarify the split "modes", and reorganize.
Gabriel Filion [Sun, 8 Sep 2013 03:26:15 +0000 (23:26 -0400)]
Update bup-split(1); document -d, clarify the split "modes", and reorganize.

Update the synopsis, document the "-d DATE" option, and make a clearer
distinction between normal options and the options that select the
split "mode".

Signed-off-by: Gabriel Filion <gabster@lelutin.ca>
[rlb@defaultvalue.org: add dashes to seconds-since-epoch; adjust the
 MODES text a bit and move -b down; make a few other edits and adjust
 commit message.]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>