]> arthur.barton.de Git - bup.git/log
bup.git
3 years agotests: partially convert to pytest
Johannes Berg [Thu, 28 May 2020 20:05:45 +0000 (22:05 +0200)]
tests: partially convert to pytest

Convert all the python-based library unit tests to pytest,
and add a pytest.ini to only look in the test/ directory.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
[rlb@defaultvalue.org: run pytest outside wvtest check wrapper so the
 output is visible; restore some of buptest.py and wvtest.py so the
 other tests can still run; rename pytest shim to wvpytest to
 distinguish from ./wvtest.py.; add ./pytest to centralize common
 options; switch .wvtest import to wvtest now that lib/test is a proper
 module dir; narrow pytest.ini test dirs to test/int and test/ext; move
 sort-z to test/bin; fix some dependencies in dev/prep-for-*]

3 years agoEnsure pytests preserve the cd $(pwd -P) behavior
Rob Browning [Sun, 15 Nov 2020 18:21:28 +0000 (12:21 -0600)]
Ensure pytests preserve the cd $(pwd -P) behavior

Previously handled in the Makefile.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAdd pytest context manager to save/restore test environment
Rob Browning [Sun, 1 Nov 2020 20:03:41 +0000 (14:03 -0600)]
Add pytest context manager to save/restore test environment

Without this, test_git.py could fail because test_ftp had left its
GIT_DIR lying around, and other tests could fail because it changed
and didn't restore the working directory.  Make sure to call tzset()
after any TZ changes.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoMove t*.py tests to test_*.py for pytest autodetection
Rob Browning [Sun, 1 Nov 2020 16:39:17 +0000 (10:39 -0600)]
Move t*.py tests to test_*.py for pytest autodetection

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agowvtest.py: respect BUP_TEST_SEED
Rob Browning [Sat, 14 Nov 2020 17:28:50 +0000 (11:28 -0600)]
wvtest.py: respect BUP_TEST_SEED

Without this, the test counts can vary given (for example) the
tests in validate_vfs_{streaming,seeking}* in tvfs.py.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agotests: move all tests to test/
Johannes Berg [Wed, 27 May 2020 17:58:38 +0000 (19:58 +0200)]
tests: move all tests to test/

Instead of having some testing code interleaved with bup's
real code in lib/bup/test/ and lib/bup/t/ move everything
related to testing into test/, which is also renamed from
just t/.

This aligns with pytest for future changes, and, almost more
importantly, cleans up the lib/ directory to only have the
operational code.

The latter is necessary to properly 'libify' bup in order to
be able to use tox properly to test with different versions
of python in venv later.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
[rlb@defaultvalue.org: also move utilities like compare-trees to dev/;
 make test/lib a test-specific module tree and have wvtest.py include
 it; use test/ext/ and test/int/ (external and internal) as the test
 dir names.]

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agocirrus: allow failures on macos with python 2
Rob Browning [Wed, 25 Nov 2020 20:37:01 +0000 (14:37 -0600)]
cirrus: allow failures on macos with python 2

It looks like macos has changed something that makes it very difficult
to detect and use the *utime* related functions.  Apparently Emacs
just decided to live without it, and Python had to go to substantial
lengths to sort it out.  So until/unless we have a reasonable fix,
just mark that combination as expected to fail.

Python 3 should work fine since we rely on it to sort out the problem
for us.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agosystem-info: include uname -a output
Rob Browning [Wed, 25 Nov 2020 20:35:12 +0000 (14:35 -0600)]
system-info: include uname -a output

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agocirrus: make macos image match reality (catalina)
Rob Browning [Wed, 25 Nov 2020 20:33:57 +0000 (14:33 -0600)]
cirrus: make macos image match reality (catalina)

Apparently it's actually choosing catalina anyway (see the labels
during the runs), and that appears to be all that's supported now at
https://cirrus-ci.org/guide/macOS/

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoDepend on python 3 for utime when using 3
Rob Browning [Tue, 24 Nov 2020 00:21:00 +0000 (18:21 -0600)]
Depend on python 3 for utime when using 3

Since python 3.3+ now claims to implement what we need (follow
symlinks, ns resolution), rely on it for utime when possible in
preference to our own C code in _helpers.

This should fix new failures on macos due to changes to the
availability of utimensat, etc.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agotest.sh: set LC_ALL=C for git fsck to avoid localized output
Karl-Philipp Richter [Tue, 1 Sep 2020 19:09:03 +0000 (21:09 +0200)]
test.sh: set LC_ALL=C for git fsck to avoid localized output

Observed on Ubuntu 20.04 with German as the primary language. The test
clearly parses output in English and since adapting the parsing to the
language of the test environment is not what the test tests,
specifying the language is the way to go.

The original problem can be reproduced via

  LC_ALL=de_DE.utf8  ./wvtest run t/test.sh

if your system has de_DE.utf8 avalilable.

Signed-off-by: Karl-Philipp Richter <krichter@posteo.de>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
[rlb@defaultvalue.org: adjust commit message; set LC_ALL=C just for
 fsck rather than setting LANGUAGE globally]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agotest-meta: use grep -a on xstat/meta
Johannes Berg [Thu, 19 Nov 2020 20:56:31 +0000 (21:56 +0100)]
test-meta: use grep -a on xstat/meta

xattr data may contain arbitrary bytes, including NUL.
If we use grep on such data without -a, then it just
prints "Binary file (standard input) matches" and we
haven't tested anything.

Use grep -a for the appropriate invocations to avoid
this issue, we only care about ascii lines here.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years ago_helpers: remove argv mangling on python 3.9
Johannes Berg [Wed, 18 Nov 2020 20:29:31 +0000 (21:29 +0100)]
_helpers: remove argv mangling on python 3.9

Since python 3.9 exports the argv as wchar_t now, we
can no longer attempt to mangle it. Remove this code
on python 3.9 so it builds again.

This fixes Debian's FTBFS https://bugs.debian.org/972763, and this
part of our Cirrus test builds on MacOS.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agowrite_idx: make the 64-bit offset count uint32_t not int
Rob Browning [Sun, 22 Nov 2020 18:27:27 +0000 (12:27 -0600)]
write_idx: make the 64-bit offset count uint32_t not int

It's a 31-bit offset into the 64-bit object offsets table.

https://github.com/git/git/blob/master/Documentation/technical/pack-format.txt

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agowrite_idx: fix handling of signed/unsigned values
Rob Browning [Fri, 20 Nov 2020 07:29:02 +0000 (01:29 -0600)]
write_idx: fix handling of signed/unsigned values

Coerce the incoming Py_ssize_t count directly to the required uint32_t
while checking for overflow.  The underlying problem was identified
when we hit two sign-compare warnings on (32-bit) platforms where
ssize_t is 32 bits.

Explicitly add -Wsign-comapare to CFLAGS, just to be sure it's
included.

Reported-by: Dominique Leuenberger
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoINTEGER_TO_PY(): include necessary compiler pgramas
Rob Browning [Wed, 18 Nov 2020 02:00:18 +0000 (20:00 -0600)]
INTEGER_TO_PY(): include necessary compiler pgramas

Move the pragmas it needs into INTEGER_TO_PY() so we don't need to
scatter them around.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoconfigure: Search for python3.x and python3
Greg Troxel [Tue, 29 Sep 2020 00:07:11 +0000 (00:07 +0000)]
configure: Search for python3.x and python3

Previously, only specific python2.x and python2 were saerched for.

Signed-off-by: Greg Troxel <gdt@lexort.com>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agotest-import-duplicity: adjust to FreeBSD's rsync output
Johannes Berg [Wed, 18 Nov 2020 10:56:53 +0000 (11:56 +0100)]
test-import-duplicity: adjust to FreeBSD's rsync output

rsync on FreeBSD now outputs 12 status chars, adjust to
that and simplify the check a little bit.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agorm: handle writer.abort exceptions when exception pending
Rob Browning [Sat, 12 Sep 2020 22:21:43 +0000 (17:21 -0500)]
rm: handle writer.abort exceptions when exception pending

And drop the else clause since it's unnecessary here.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agogc: always clean up the packwriter; abort on errors
Rob Browning [Sat, 12 Sep 2020 22:15:46 +0000 (17:15 -0500)]
gc: always clean up the packwriter; abort on errors

Make sure to always close or abort the packwriter.  Abort on errors
under the assumption that any packfile in progress should only contain
blobs duplicated from the packfiles that were being garbage collected
to produce it, and those packfiles should never be removed until we've
finished writing and closing the one they're being swept into.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agocompat: add "with pending_raise(ex)" to simplify nested exceptions
Rob Browning [Sat, 12 Sep 2020 22:14:21 +0000 (17:14 -0500)]
compat: add "with pending_raise(ex)" to simplify nested exceptions

Thanks to Johannes Berg for the suggesting the approach.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoCODINGSTYLE: add raise missing from exception handling code
Rob Browning [Sat, 12 Sep 2020 22:04:46 +0000 (17:04 -0500)]
CODINGSTYLE: add raise missing from exception handling code

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoUpdate base_version for 0.31+ development
Rob Browning [Sun, 20 Sep 2020 18:14:29 +0000 (13:14 -0500)]
Update base_version for 0.31+ development

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agohelpers.localtime: avoid floor-related deprecation warning
Johannes Berg [Tue, 26 May 2020 22:34:54 +0000 (00:34 +0200)]
helpers.localtime: avoid floor-related deprecation warning

floor() returns a float, even though it just rounded down,
so we need to convert to an int() to avoid a deprecation
warning here.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agobup: pass TTY width through to sub-command and remote
Johannes Berg [Thu, 27 Aug 2020 21:31:57 +0000 (23:31 +0200)]
bup: pass TTY width through to sub-command and remote

As we rewrite the sub-command's stderr, it cannot determine
the width. As a result, e.g. "bup ls" will always columnate
only to 70 columns, instead of using the entire width. Fix
this by passing the real width through in an environment
variable, just like we already pass through the fact that
it's a TTY.

Also pass it through on the ssh command line so that if you
run 'bup on ... ls' it actually behaves right.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoio: fix path_msg on python2
Johannes Berg [Thu, 27 Aug 2020 20:25:16 +0000 (22:25 +0200)]
io: fix path_msg on python2

We get the binary representation here on both python 2 and 3,
but on 2 we really don't need to do any decoding since we must
print it as 'str'. Decoding also fails if the input is valid
UTF-8, which seems strange, but even if it worked we actually
don't want unicode objects here to print, we'd have to encode
them again to print.

Reported-by: Henninger Henningstone <henningstone@gmx.de>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoUpdate base_version for 0.31 release 0.31
Rob Browning [Sat, 22 Aug 2020 17:12:01 +0000 (12:12 -0500)]
Update base_version for 0.31 release

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoUpdate HACKING and README for 0.31
Rob Browning [Sat, 22 Aug 2020 17:10:47 +0000 (12:10 -0500)]
Update HACKING and README for 0.31

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoUpdate release notes for 0.31
Rob Browning [Sat, 22 Aug 2020 17:09:25 +0000 (12:09 -0500)]
Update release notes for 0.31

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoupdate-checkout-info: compare physical paths (resolve symlinks)
Rob Browning [Sat, 22 Aug 2020 16:48:11 +0000 (11:48 -0500)]
update-checkout-info: compare physical paths (resolve symlinks)

Without this, symlinks in the parent path can cause erroneous
mismatches.

Thanks to Ralf Hemmecke for reporting the problem and help testing the
fix.

Reported-by: Ralf Hemmecke <ralf@hemmecke.org>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoMakefile: remove vestigial checkout_info.py installation code
Rob Browning [Sat, 22 Aug 2020 16:46:41 +0000 (11:46 -0500)]
Makefile: remove vestigial checkout_info.py installation code

Reported-by: Ralf Hemmecke <ralf@hemmecke.org>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agotest.sh: test bup features python version
Rob Browning [Sat, 15 Aug 2020 17:10:14 +0000 (12:10 -0500)]
test.sh: test bup features python version

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agofeatures: show version number of the Python interpreter
Alexander Barton [Sun, 2 Aug 2020 18:10:29 +0000 (20:10 +0200)]
features: show version number of the Python interpreter

This can be handy for debiugging, especially if the interpreter used
(like /usr/bin/python3) is a symlink to the actual Python interpreter
(/usr/bin/python3.7) and/or doesn't include the "micro" version at all.

Signed-off-by: Alexander Barton <alex@barton.de>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoMakefile: specify -Wformat=2 rather than error given -Werror
Rob Browning [Sat, 15 Aug 2020 01:13:15 +0000 (20:13 -0500)]
Makefile: specify -Wformat=2 rather than error given -Werror

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agotest-fsck: test invocation with pack arguments
Rob Browning [Sat, 15 Aug 2020 01:12:07 +0000 (20:12 -0500)]
test-fsck: test invocation with pack arguments

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agofsck: fix argv_bytes typo
Johannes Berg [Fri, 14 Aug 2020 17:43:58 +0000 (19:43 +0200)]
fsck: fix argv_bytes typo

Reported-by: gkonstandinos@gmail.com
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
3 years agotests: tclient: fix buffering behaviour in the test
Johannes Berg [Thu, 13 Aug 2020 13:20:33 +0000 (15:20 +0200)]
tests: tclient: fix buffering behaviour in the test

If the objects we write are small enough to be at least
partially buffered instead of written out to the server
connection, the test will hang in the loop as the data
hasn't made it to the server yet, which therefore can't
make a suggestion yet.

In normal non-testing scenarios this isn't an issue as
the connection is flushed before every new read(), and
thus if the client actually needs to wait for something
from the server, it'll have flushed before. Here, we're
directly poking at the internals by using has_input(),
and nothing causes a flush, causing the above scenario.

Fix this by some more ugly poking at the internals and
flush the connection before we go into the loop.

While at it, also avoid hanging there forever and break
out of the loop if one second passed without receiving
anything from the server - that should be long enough
for it to hash the two objects and respond. Also, add a
time.sleep() there to avoid busy spinning which takes
CPU cycles from the server that needs to be hashing the
object.

Reported-by: Robert Edmonds <edmonds@debian.org>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
3 years agochecked_malloc: use %z to format size_t; enable -Wformat=2
Rob Browning [Sun, 9 Aug 2020 18:07:01 +0000 (13:07 -0500)]
checked_malloc: use %z to format size_t; enable -Wformat=2

Reported-by: Greg Troxel <gdt@lexort.com>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agotest-help: restrict MANPATH; only test manpages when available
Rob Browning [Sun, 9 Aug 2020 16:59:28 +0000 (11:59 -0500)]
test-help: restrict MANPATH; only test manpages when available

Reported-by: Robert Edmonds <edmonds@debian.org>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoinstall-python-script: don't presume python exists
Rob Browning [Sat, 8 Aug 2020 18:05:39 +0000 (13:05 -0500)]
install-python-script: don't presume python exists

Reported-by: Robert Edmonds <edmonds@debian.org>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agobup_mincore: actually use size_t value (not ulonglong) in call
Rob Browning [Sat, 8 Aug 2020 17:27:51 +0000 (12:27 -0500)]
bup_mincore: actually use size_t value (not ulonglong) in call

We'd already done the correct conversion, but weren't using it.

Reported-by: Greg Troxel <gdt@lexort.com>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agosave: make the py3 save commit message args match py2
Johannes Berg [Tue, 4 Aug 2020 14:46:16 +0000 (16:46 +0200)]
save: make the py3 save commit message args match py2

We shouldn't use sys.argv, it's missing the actual arguments
now. Also, encode it but drop the "b" on the bytes (if present,
i.e. python3) to make this look the same as on python2.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
[rlb@defaultvalue.org: make formatting decision via py_maj; adjust
 commit message]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoversion: fix --date argument for py3
Johannes Berg [Wed, 5 Aug 2020 19:17:13 +0000 (21:17 +0200)]
version: fix --date argument for py3

This has an issue with str vs. bytes, fix it.

Reported-by: Mark J Hewitt <mjh@idnet.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAdd trivial tests for current help behavior
Rob Browning [Sat, 8 Aug 2020 16:40:54 +0000 (11:40 -0500)]
Add trivial tests for current help behavior

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agohelp: fix for python3
Johannes Berg [Wed, 5 Aug 2020 07:54:55 +0000 (09:54 +0200)]
help: fix for python3

Fix "bup subcommand --help" to properly compare and start
the man viewer.

Reported-by: Robert Edmonds <edmonds@debian.org>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoftp: handle lack of readline in input
Johannes Berg [Tue, 28 Jul 2020 20:28:11 +0000 (22:28 +0200)]
ftp: handle lack of readline in input

If we don't have readline, print our prompt and read a line
from stdin instead.

Reported-by: Eric Waguespack <eric.w@guespack.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
3 years agoftp: fix ls arguments for python3
Johannes Berg [Tue, 28 Jul 2020 21:28:46 +0000 (23:28 +0200)]
ftp: fix ls arguments for python3

During the conversion to python 3, ftp ls could no longer
get option arguments, because we're now passing *bytes* to
the option parser that still expects *str*.

Fix this by fsdecode()'ing the bytes into str, which then
causes the option parsing to work properly, and the result
will be fsencode()'d again via argv_bytes() for usage.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agohlinkdb: always load as bytes on python3
Johannes Berg [Mon, 27 Jul 2020 21:15:16 +0000 (23:15 +0200)]
hlinkdb: always load as bytes on python3

We really need this to be bytes, so always load as such.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
[rlb@defaultvalue.org: changed %s to %d]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agochange mktemp to be compatible with busybox
Brian Minton [Mon, 20 Jul 2020 18:55:11 +0000 (14:55 -0400)]
change mktemp to be compatible with busybox

Signed-off-by: Brian Minton <brian@minton.name>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agocirrus: make rdiff-backup completely optional for freebsd tests
Rob Browning [Thu, 23 Jul 2020 23:58:18 +0000 (18:58 -0500)]
cirrus: make rdiff-backup completely optional for freebsd tests

Thanks to Johannes Berg for reporting the problem and tracking down
the likely cause/fix.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoEliminate redundant check of index start against ctime
Aidan Hobson Sayers [Fri, 17 Jul 2020 21:59:04 +0000 (22:59 +0100)]
Eliminate redundant check of index start against ctime

When (the first version of) this check was added 10 years ago in
b4b4ef116880, it was presumably to ensure that "index; save; touch;
index" in the same second would flag a file as needing saving.

Since then, tmax has been added in the indexing process to solve the
problem by capping timestamps stored in the index. This capping means
that a file with ctime in the same second as an indexing start will
be picked up on both the indexes in the example above - there's no need
to special case the check.

Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoweb: don't re-resolve item in listing
Johannes Berg [Fri, 17 Jul 2020 19:42:16 +0000 (21:42 +0200)]
web: don't re-resolve item in listing

We already have an item, we just need its metadata. There's no
need to re-resolve it. Somehow, resolving it again is also very
slow for large directories (perhaps re-reading metadata again
and again?), and this significantly speeds up things.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAdd bup-features to report status; drop ACL warnings
Rob Browning [Sun, 19 Jul 2020 19:28:36 +0000 (14:28 -0500)]
Add bup-features to report status; drop ACL warnings

Add a new "bup features" command that reports information about the
status and capabilities of the current installation.

Given that, and the new summary at the end of the ./configure output,
drop the platform specific warnings, which were a bit odd anyway,
since they wouldn't warn you on say Linux if we found libacl, but it
didn't actually have all the features we required.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoconfigure: restore working dir after symlinking python
Rob Browning [Sun, 5 Jul 2020 20:04:04 +0000 (15:04 -0500)]
configure: restore working dir after symlinking python

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAvoid varying git archive content for ref; rework versioning
Rob Browning [Sun, 5 Jul 2020 19:40:40 +0000 (14:40 -0500)]
Avoid varying git archive content for ref; rework versioning

Don't include the log --decorate names in the archive via export-subst
because they can change after the fact when new tags or branches are
added for a given hash -- for example, when we created the 0.30.x
branch after tagging 0.30.1.  Archives retrieved before the branch was
created would have a different set of NAMES in _release.py.

Move _release to source_info and add an optional checkout_info module.
source_info contains the (no longer variable) export-subst commit hash
and date values, and checkout_info contains the same data for a git
checkout.  Automatically update checkout_info whenever we're at the
top level of a git source tree, but don't include it in the archives.

Record the base version in version.py explicitly as either a release
version like 0.31, for an actual release (which must be committted
before tagging the release), or a development version like
0.31~ (indicating a version that's always less than 0.31).

Rework bup version to report the lib/version for an actual release, or
that version suffixed with the commit hash when running a non-release,
and add a "+" when uncommitted modifications are detected.  For
example:

      release: 0.31
  non-release: 0.31~4e4b9ba8689c93702743c8ecd49c5a7808a4d717
     modified: 0.31~4e4b9ba8689c93702743c8ecd49c5a7808a4d717+

Drop the --tag argument from bup version since the tags are variable,
and you can always ask git to describe the hash via

  git describe --always HASH

Add dev/refresh, similar to moreutils sponge, to handle file creation
safely, something we may want to deploy more widely (e.g. instead of
the $$/PID based tempfiles in the Makefile).

Thanks to Greg Troxel for reporting the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoDrop pwd/gid reentrant function variants for now
Rob Browning [Tue, 30 Jun 2020 23:50:17 +0000 (18:50 -0500)]
Drop pwd/gid reentrant function variants for now

From the POSIX pages, it sounded like _SC_GETPW_R_SIZE_MAX, etc. were
upper limits, but other docs, and observed behavior (reported ERANGE
failures) indicate that it's more likely they're just suggestions.  As
a result, we'd either need larger hard-coded buffers, or a
reallocate/retry loop if we kept them.

Instead, since we're not at all thread-safe and aren't likely to be
anytime soon, the dynamic allocations are just less efficient and more
complex, so back off to the non-reentrant flavors for now.

Thanks to kd7spq for reporting the problem and Johannes Berg for
tracking down the cause and help settling on this solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agocirrus: fill out python 3 tests
Rob Browning [Sat, 27 Jun 2020 15:26:54 +0000 (10:26 -0500)]
cirrus: fill out python 3 tests

Test python 3 on all platforms and to the same extent as python 2.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agodrecurse: use portable S_ISDIR() instead of deriving S_IFMT
Rob Browning [Sat, 27 Jun 2020 16:47:31 +0000 (11:47 -0500)]
drecurse: use portable S_ISDIR() instead of deriving S_IFMT

In some simple testing, there didn't appear to be any notable,
consistent performance difference, and the S_IFMT(0xffffffff) call
fails with an OverflowError on at least macos.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAdd portable dev/sort-z; link into t/bin/; use in test-meta.sh
Rob Browning [Thu, 25 Jun 2020 06:48:45 +0000 (01:48 -0500)]
Add portable dev/sort-z; link into t/bin/; use in test-meta.sh

Add a dev/sort-z wrapper to handle sorting null terminated lines
across platforms.  Apparently NetBSD supports "-R 000" instead of -z.

Add a t/bin for any commands we want to make available to all tests,
symlink sort-z there, and add it to the PATH in test-meta.sh.

Thanks to Greg Troxel for reporting the problem.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoconfigure: test for functional readline more carefully
Rob Browning [Sun, 21 Jun 2020 17:46:50 +0000 (12:46 -0500)]
configure: test for functional readline more carefully

Apparently on (cirrus) macos, just testing for the ability to compile
readline.h isn't sufficient because configure ends up selecting the
built-in readline (which is insufficient) rather than the one we
specifically installed via brew.  More specifically, the built-in
readline has the wrong prototype for rl_completion_entry_function
which causes this error:

  _helpers.c:2096:38: error: incompatible function pointer types assigning to 'Function *' (aka 'int (*)(const char *, int)') from 'char *(const char *, int)' [-Werror,-Wincompatible-function-pointer-types]
        rl_completion_entry_function = on_completion_entry;
                                     ^ ~~~~~~~~~~~~~~~~~~~~

So change the test for an acceptable readline to check that
specifically, which is a better test for all the platforms.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoconfigure: check for <readline.h> vs <readline/readline.h>
Rob Browning [Sun, 21 Jun 2020 16:47:02 +0000 (11:47 -0500)]
configure: check for <readline.h> vs <readline/readline.h>

The readline docs (man and info pages) indicate that we should use

  #include <readline/readline.h>
  #include <readline/history.h>

Unfortunately, it appears that on a number of plaforms pkg-config
--cflags actually returns a -I value that requires

  #include <readline.h>
  #include <history.h>

So make an even bigger mess in config/configure to accomodate either
possibility.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAvoid readline.h -Wstrict-prototype induced failures
Rob Browning [Sun, 21 Jun 2020 16:50:30 +0000 (11:50 -0500)]
Avoid readline.h -Wstrict-prototype induced failures

On some platforms -Wstrict-prototype is now the default, and readline
includes prototypes like "int foo()" rather than "int foo(void)", so
for now, just suppress those warnings for the readline includes.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoconfigure-sampledata: only create random paths if asked
Rob Browning [Sun, 21 Jun 2020 16:29:23 +0000 (11:29 -0500)]
configure-sampledata: only create random paths if asked

Stop creating randomized paths in t/sampledata/ by default.  I'd
originally just added this to allow some quick testing, and while it
now appears to be fine on Linux/ext4, it's too aggressive to be the
default, so hide it behind a BUP_TEST_RANDOMIZED_SAMPLEDATA_PATHS
environment variable.

Among other things, make-random-paths just crashes on cirrus macos,
and cirrus freebsd was having (different) trouble.  It might also have
been macos where test-import-duplicity.sh failed on compare-trees
mismatches.  Not sure whether that was an issue with bup, rsync, or
duplicity.

We'll want to restore broader randomized path testing, but likely via
a less blunt instrument, since placing the paths in t/sampledata
affects any test that relies on it, and existing testing constructs
like

  WVPASSEQ ... $(... | wc -l)

are completely incompatible.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agocirrus: ensure we use the real readline on macos
Rob Browning [Sat, 20 Jun 2020 19:19:21 +0000 (14:19 -0500)]
cirrus: ensure we use the real readline on macos

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years ago_helpers: fix potential issues -Wshorten-64-to-32 complains about
Rob Browning [Sat, 20 Jun 2020 19:02:37 +0000 (14:02 -0500)]
_helpers: fix potential issues -Wshorten-64-to-32 complains about

These were revealed by -Wshorten-64-to-32 which appears to be the
clang default on cirrus' macos (catalina?).

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoconfigure: summarize findings
Rob Browning [Sun, 21 Jun 2020 17:13:24 +0000 (12:13 -0500)]
configure: summarize findings

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoUse pkg-config opportunistically
Rob Browning [Sat, 20 Jun 2020 16:55:53 +0000 (11:55 -0500)]
Use pkg-config opportunistically

Use pkg-config's --cflags and --libs when they're available for
libreadline or libacl, but don't require pkg-config.  When it's not
found, just check for the libraries with a test compile.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoDon't assume readline always defines _XOPEN_SOURCE
Rob Browning [Sun, 21 Jun 2020 17:09:16 +0000 (12:09 -0500)]
Don't assume readline always defines _XOPEN_SOURCE

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agogrp_struct_to_py(): fix error handling
Johannes Berg [Fri, 19 Jun 2020 05:19:07 +0000 (07:19 +0200)]
grp_struct_to_py(): fix error handling

Both getgrgid_r() and getgrnam_r() *return* an error number
on failures, and don't store it to errno. Thus, rc will not
be less than zero, and we need to set errno before we can
create a python error from it.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agocirrus: macos: use new brew installer
Johannes Berg [Thu, 28 May 2020 22:06:24 +0000 (00:06 +0200)]
cirrus: macos: use new brew installer

The current installer prints that it's deprecated, use the
one they suggest using now.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agogitignore: add config/bin
Rob Browning [Sun, 14 Jun 2020 20:26:35 +0000 (15:26 -0500)]
gitignore: add config/bin

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoDESIGN: describe our adjusted approach to py3
Rob Browning [Sat, 13 Jun 2020 19:30:10 +0000 (14:30 -0500)]
DESIGN: describe our adjusted approach to py3

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoDESIGN: document the actual hashsplit algorithm
Johannes Berg [Fri, 1 May 2020 22:52:53 +0000 (00:52 +0200)]
DESIGN: document the actual hashsplit algorithm

The hashsplit algorithm, when used for the fanout, has a quirk
that appears to be due to an implementation bug.

In order for splitting to occur, the lowest 13 (BUP_BLOBBITS)
bits of the csum need to be 1. Then, per DESIGN, the next bits
that are 1 are used for the fanout. However, the implementation
doesn't actually work this way. What actually happens is that
the lower 13 bits need to be ones:

 ........1'1111'1111'1111

Then, the DESIGN document states that the next bits that are 1
should be used for the fanout:

 ....'111_'____'____'____

However, the implementation actually ignores the next bit ('x')

 ....'11x_'____'____'____

and it doesn't matter whether that's set to 0 or 1, the fanout
will be based on the next higher bits (marked '.' and '1').

Fix this in the DESIGN documentation rather than changing the
algorithm as the latter would cause a save of an identical file
to completely rewrite the tree objects that make up the file,
due to different fanout behaviour.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
3 years agohelp: fix src tree Documentation location
Rob Browning [Sat, 13 Jun 2020 19:31:40 +0000 (14:31 -0500)]
help: fix src tree Documentation location

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoindex: fix bytes vs. str (py3) for --long output
Johannes Berg [Sat, 13 Jun 2020 19:21:44 +0000 (21:21 +0200)]
index: fix bytes vs. str (py3) for --long output

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agometadata: fix test failure with xattrs
Johannes Berg [Tue, 26 May 2020 22:29:23 +0000 (00:29 +0200)]
metadata: fix test failure with xattrs

The test_apply_to_path_restricted_access() is broken because
the expected string doesn't take into account that it's now
a u'' string (on python2) due to path_msg(), but this doesn't
appear on any non-selinux systems because the original file
never has any xattr, so the test passes, just not on my Fedora
system.

Change the expected message and remove the quote entirely as
it's different between python 2 and 3, and also try to set an
xattr in the test - if that fails, just continue as it used
to be without reading/setting it.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agometadata: port ACL support to C
Johannes Berg [Sat, 30 May 2020 21:55:46 +0000 (23:55 +0200)]
metadata: port ACL support to C

Use some own C code instead of the posix1e python bindings, as those
don't have correct 'bytes' support (at least right now), which means
that we cannot use them with arbitrary file, user and group names.
Our own wrappers just use 'bytes' throughout.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
[rlb@defaultvalue.org: adjust to rely on pkg-config]
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoSplit src tree python use to config/bin/python and dev/bup-python
Rob Browning [Sat, 30 May 2020 02:50:25 +0000 (21:50 -0500)]
Split src tree python use to config/bin/python and dev/bup-python

Replace cmd/bup-python with config/bin/python, which is just a symlink
to the configured python, and dev/bup-python, which is what "bup
python" used to be.  Adjust all the code to use config/bin/python when
we can (i.e. when we don't need bup modules), and dev/bup-python
otherwise.  Drop "bup python", since we don't need it anymore.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAdd bin/bup symlink so bin/ can be added to PATH
Rob Browning [Fri, 29 May 2020 16:14:31 +0000 (11:14 -0500)]
Add bin/bup symlink so bin/ can be added to PATH

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoRemove Python 3 guardrail: BUP_ALLOW_UNEXPECTED_PYTHON_VERSION
Rob Browning [Sun, 7 Jun 2020 16:18:11 +0000 (11:18 -0500)]
Remove Python 3 guardrail: BUP_ALLOW_UNEXPECTED_PYTHON_VERSION

Now that the last subcommand (web) has been ported to Python 3, we
at least some randomized binary test coverage, and we think we've
addressed all the Python 3 issues we know of, remove the
BUP_ALLOW_UNEXPECTED_PYTHON_VERSION guardrail.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoStop forcing LC_CTYPE=ISO-8859-1
Rob Browning [Mon, 25 May 2020 19:46:52 +0000 (14:46 -0500)]
Stop forcing LC_CTYPE=ISO-8859-1

Now that we've made adjustments to work around all the Python 3
problems with non-Unicode data (argv, env vars, readline, acls, users,
groups, hostname, etc.), and added randomized binary path and argv
testing, stop overriding the LC_CTYPE since that should no longer be
necessary.

Thanks to Johannes Berg for nudging me to consider whether we might
now be in a position to do this (with a bit more work), and for quite
a bit of help getting all the precursors in place once we thought it
was feasible.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agosampledata: include random binary paths
Rob Browning [Thu, 28 May 2020 06:56:13 +0000 (01:56 -0500)]
sampledata: include random binary paths

Thanks to Johannes Berg for the xargs -0 addition fix.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
3 years agoBypass Python 3 glibc argv problems by routing args through env
Rob Browning [Sun, 7 Jun 2020 14:05:26 +0000 (09:05 -0500)]
Bypass Python 3 glibc argv problems by routing args through env

Until/unless https://sourceware.org/bugzilla/show_bug.cgi?id=26034 is
resolved by Python or GNU libc, sidestep the problem, which can crash
Python 3 during initialization, with a trivial sh wrapper that diverts
the command line arguments into BUP_ARGV_{0,1,2,...} environment
variables, since those can be safely retrieved.

Add compat.argvb and compat.argv and populate them at startup with the
BUP_ARGV_* values.  Adjust all the relevant commands to rely on those
vars instead of sys.argv.

Although the preamble say "rewritten during install", that's not in
place yet, but will be soon (when we drop LC_CTYPE and rework
bup-python).

Thanks to Johannes Berg for suggesting this, and help figuring out the
details.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoimport-rdiff-backup: fix incorrectly named TMPIDX var
Rob Browning [Sun, 7 Jun 2020 14:02:47 +0000 (09:02 -0500)]
import-rdiff-backup: fix incorrectly named TMPIDX var

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agohashsplit: avoid cat_bytes() if possible
Johannes Berg [Tue, 28 Apr 2020 21:35:33 +0000 (23:35 +0200)]
hashsplit: avoid cat_bytes() if possible

If our current buffer is empty, there's no need to cat_bytes()
it with the new buffer, we can just replace the empty one with
the new one. This saves the memcpy() in many cases. Especially
if the whole file was read in one chunk (by bumping up the read
size) this saves a lot of time.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agoweb: fix for python3
Johannes Berg [Sun, 17 May 2020 19:38:14 +0000 (21:38 +0200)]
web: fix for python3

Do the minimal adjustments to make 'bup web' work with python3.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agotests: web: also add some invalid UTF-8
Johannes Berg [Sun, 17 May 2020 19:43:45 +0000 (21:43 +0200)]
tests: web: also add some invalid UTF-8

The '¡excitement!' really tests only valid UTF-8 since it
comes from the original bash file, add another test that
explicitly creates a byte sequence that is invalid utf-8
and ensures that this is preserved properly as well.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agotests: web: exit early to avoid indentation
Johannes Berg [Sun, 17 May 2020 19:42:53 +0000 (21:42 +0200)]
tests: web: exit early to avoid indentation

There isn't really much point in assigning a variable if
all we really want is to skip the whole test, just exit
early in those cases.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agoMigrate ftp, etc. to our _helpers bytes-oriented readline
Rob Browning [Wed, 3 Jun 2020 06:34:26 +0000 (01:34 -0500)]
Migrate ftp, etc. to our _helpers bytes-oriented readline

This allows us to preserve the status quo for now, even without the
LC_CTYPE override, i.e. binary stdin/stdout, etc.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoWrap readline oursleves to avoid py3's interference
Rob Browning [Sun, 7 Jun 2020 20:32:10 +0000 (15:32 -0500)]
Wrap readline oursleves to avoid py3's interference

We don't want Python to "help" us by guessing and insisting on the
encoding before we can even look at the incoming data, so wrap
readline ourselves, with a bytes-oriented (and more direct) API.  This
will allows us to preserve the status quo for now (and maintain parity
between Python 2 and 3) when using Python 3 as we remove our LC_CTYPE
override.

At least on Linux, readline --cflags currently defines _DEFAULT_SOURCE
and defines _XOPEN_SOURCE to 600, and the latter conflicts with a
setting of 700 via Python.h in some installations, so for now, just
defer to Python as long as it doesn't choose an older version.

Thanks to Johannes Berg for fixes for allocation issues, etc. in an
earler version, and help figuring out the #define arrangement.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agobup: don't print subcommands as b'cmd' in help with py3
Rob Browning [Sat, 6 Jun 2020 21:50:55 +0000 (16:50 -0500)]
bup: don't print subcommands as b'cmd' in help with py3

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agodistutils: handle CFLAGS and LDFLAGS directly
Rob Browning [Sun, 31 May 2020 19:10:11 +0000 (14:10 -0500)]
distutils: handle CFLAGS and LDFLAGS directly

Otherwise it places LDFLAGS in the middle of the link arguments,
before lib/bup/*.o which means we can't add lib
dependencies (e.g. -lreadline).  Pass the libs directly and specify them
via the appropriate extra_* arguments.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agobup: add own gethostname() wrapper
Johannes Berg [Sat, 30 May 2020 19:10:02 +0000 (21:10 +0200)]
bup: add own gethostname() wrapper

This is necessary because python3 insists that hostnames should
be utf-8, which is a rather questionable assumption.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
[rlb@defaultvalue.org: don't define HOST_NAME_MAX if it's not already]
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agopwdgrp: add C helpers to get user/group bytes directly
Rob Browning [Thu, 28 May 2020 05:44:16 +0000 (00:44 -0500)]
pwdgrp: add C helpers to get user/group bytes directly

Thanks to Johannes Berg for fixing some bugs in an earlier revision.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agometadata: don't modify ACL list when writing
Johannes Berg [Sat, 30 May 2020 19:41:10 +0000 (21:41 +0200)]
metadata: don't modify ACL list when writing

ACLs should be stored as a two-entry list on files, and four-entry
list for directories. Unfortunately, when writing, we expand the
two-entry list for files to four, because the metadata format is
always with four entries.

However, on reading, we trim the last two empty entries, so that
we can end up in an inconsistent situation: On a metadata entry
for a file that has been written already, it will still have four
entries, and that won't compare correctly etc.

This isn't an issue today because we only ever do the compare
in restore, where we didn't load from disk but from the meta-
data in the repository, which always starts out four entries.

Still, fix the inconsistency and don't erroneously extend the
list when writing.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
3 years agoMove cmd to lib/ and reverse symlink
Rob Browning [Mon, 25 May 2020 19:55:46 +0000 (14:55 -0500)]
Move cmd to lib/ and reverse symlink

This prepares for removal of the bup-python wrapper.  Given this
change we'll be able to have the same sys.path in the source tree and
install tree, and so won't have to go back to mangling that during
installs.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
3 years agoREADME: add 0.30.x to CI status table
Rob Browning [Fri, 19 Jun 2020 19:33:13 +0000 (14:33 -0500)]
README: add 0.30.x to CI status table

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoUpdate HACKING and README for 0.30.1
Rob Browning [Sat, 23 May 2020 21:37:25 +0000 (16:37 -0500)]
Update HACKING and README for 0.30.1

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoAdd release notes for 0.30.1
Rob Browning [Sat, 23 May 2020 21:28:43 +0000 (16:28 -0500)]
Add release notes for 0.30.1

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
3 years agoindex: fix -H option
Johannes Berg [Wed, 13 May 2020 20:22:04 +0000 (22:22 +0200)]
index: fix -H option

hexlify(ent) doesn't work, that needs to be ent.sha. Fix it.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>