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>
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>
Remove t/ from the test-meta.sh test tree now that it contains t/tmp/.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
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>
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>
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>
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>
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>
HACKING: update to reflect 0.25 release.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
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>
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>
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>
Move the --exclude-rx tests from test.sh to test-save-restore-exclude-rx.sh.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Add simple test for "index --exclude-rx-from FILE".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Add restore option "--exclude-rx-from FILE".

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
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>