commit bup for openSUSE:Factory
Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package bup for openSUSE:Factory checked in at 2024-08-09 16:14:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bup (Old) and /work/SRC/openSUSE:Factory/.bup.new.7232 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "bup" Fri Aug 9 16:14:55 2024 rev:7 rq:1192587 version:0.33.3 Changes: -------- --- /work/SRC/openSUSE:Factory/bup/bup.changes 2023-09-02 22:08:10.676389048 +0200 +++ /work/SRC/openSUSE:Factory/.bup.new.7232/bup.changes 2024-08-09 16:15:29.425001252 +0200 @@ -1,0 +2,9 @@ +Thu Aug 8 09:53:55 UTC 2024 - ecsos <ecsos@opensuse.org> + +- Update to 0.33.3 + - See https://github.com/bup/bup/blob/main/note/0.33.3-from-0.33.2.md +- Use BuildRequire perl(Time:HiRes) instead of + BuildRequire perl-Time-HiRes + to fix build error under Tumbleweed. + +------------------------------------------------------------------- @@ -5 +14 @@ - - See https://github.com/bup/bup/blob/main/note/0.33-from-0.32.md + - See https://github.com/bup/bup/blob/main/note/0.33.2-from-0.33.1.md Old: ---- bup-0.33.2.tar.gz New: ---- bup-0.33.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bup.spec ++++++ --- /var/tmp/diff_new_pack.7zqhwD/_old 2024-08-09 16:15:30.133030805 +0200 +++ /var/tmp/diff_new_pack.7zqhwD/_new 2024-08-09 16:15:30.133030805 +0200 @@ -1,7 +1,7 @@ # # spec file for package bup # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -23,7 +23,7 @@ %define pythons python311 %endif Name: bup -Version: 0.33.2 +Version: 0.33.3 Release: 0 Summary: Backup program based on git License: LGPL-2.0-only @@ -39,7 +39,7 @@ BuildRequires: %{python_module pylibacl} BuildRequires: %{python_module pyxattr} BuildRequires: %{python_module tornado} -BuildRequires: perl-Time-HiRes +BuildRequires: perl(Time::HiRes) %if %{with_test} BuildRequires: %{python_module pylint} BuildRequires: %{python_module pytest-xdist} ++++++ bup-0.33.2.tar.gz -> bup-0.33.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/Documentation/bup-damage.md new/bup-0.33.3/Documentation/bup-damage.md --- old/bup-0.33.2/Documentation/bup-damage.md 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/Documentation/bup-damage.md 2023-12-28 18:28:02.000000000 +0100 @@ -24,6 +24,12 @@ of data recovery tools, to reassure yourself that the tools actually work. +Note that the details of the current behavior may change (particularly +the details not documented here). For example the moment, the damage +is strictly probabilistic, and so may or may not actually alter any +given block. With a block size of 1, there should be a 1/256 chance +that the block won't actually change. This behavior may change. + # OPTIONS -n, \--num=*numblocks* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/Documentation/bup.md new/bup-0.33.3/Documentation/bup.md --- old/bup-0.33.2/Documentation/bup.md 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/Documentation/bup.md 2023-12-28 18:28:02.000000000 +0100 @@ -21,14 +21,13 @@ once a backup set is created, it can still be accessed using git tools. -The individual bup subcommands appear in their own man -pages. +Subcommands are described in separate man pages. For example +`bup-init`(1) covers `bup init`. # GLOBAL OPTIONS \--version -: print bup's version number. Equivalent to - `bup-version`(1) +: print bup's version number. Equivalent to `bup version`. -d, \--bup-dir=*BUP_DIR* : use the given BUP_DIR parameter as the bup repository diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/README.md new/bup-0.33.3/README.md --- old/bup-0.33.2/README.md 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/README.md 2023-12-28 18:28:02.000000000 +0100 @@ -86,9 +86,12 @@ Notable changes introduced by a release ======================================= + - <a href="note/0.33.3-from-0.33.2.md">Changes in 0.33.3 as compared to 0.33.2</a> - <a href="note/0.33.2-from-0.33.1.md">Changes in 0.33.2 as compared to 0.33.1</a> - <a href="note/0.33.1-from-0.33.md">Changes in 0.33.1 as compared to 0.33</a> - <a href="note/0.33-from-0.32.md">Changes in 0.33 as compared to 0.32</a> + - <a href="note/0.32.2-from-0.32.1.md">Changes in 0.32.2 as compared to 0.32.1</a> + - <a href="note/0.32.1-from-0.32.md">Changes in 0.32.1 as compared to 0.32</a> - <a href="note/0.32-from-0.31.md">Changes in 0.32 as compared to 0.31</a> - <a href="note/0.31-from-0.30.1.md">Changes in 0.31 as compared to 0.30.1</a> - <a href="note/0.30.1-from-0.30.md">Changes in 0.30.1 as compared to 0.30</a> @@ -126,7 +129,7 @@ bup, please check out the latest stable release like this: ```sh - git checkout 0.33.2 + git checkout 0.33.3 ``` You can see the latest stable release here: @@ -176,7 +179,15 @@ ```sh make ``` - + + At the moment the build treats compiler warnings as errors. If the + build fails as a result, try this: + + ```sh + CFLAGS=-Wno-error ./configure + make + ``` + - Run the tests: ```sh @@ -197,11 +208,12 @@ make -j check ``` - The tests should pass. If they don't pass for you, stop here and - send an email to bup-list@googlegroups.com. Though if there are - symbolic links along the current working directory path, the tests - may fail. Running something like this before "make test" should - sidestep the problem: + The tests should pass (with some skipped tests that weren't + applicable in your environment). If they don't pass for you, stop + here and send an email to bup-list@googlegroups.com. Though if + there are symbolic links along the current working directory path, + the tests may fail. Running something like this before "make + test" should sidestep the problem: ```sh cd "$(pwd -P)" @@ -238,19 +250,12 @@ Binary packages of bup are known to be built for the following OSes: - - Debian: - http://packages.debian.org/search?searchon=names&keywords=bup - - Ubuntu: - http://packages.ubuntu.com/search?searchon=names&keywords=bup - - pkgsrc (NetBSD, Dragonfly, and others) - http://pkgsrc.se/sysutils/bup - http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/sysutils/bup/ - - Arch Linux: - https://www.archlinux.org/packages/?sort=&q=bup - - Fedora: - https://apps.fedoraproject.org/packages/bup - - macOS (Homebrew): - https://formulae.brew.sh/formula/bup + - [Debian](https://packages.debian.org/bup) + - [Ubuntu](https://packages.ubuntu.com/bup) + - [pkgsrc.se (NetBSD, Dragonfly, and others)](https://pkgsrc.se/sysutils/bup) + - [NetBSD](https://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/sysutils/bup/) + - [Arch Linux](https://www.archlinux.org/packages/?sort=&q=bup) + - [macOS (Homebrew)](https://formulae.brew.sh/formula/bup) Using bup diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/dev/update-checkout-info new/bup-0.33.3/dev/update-checkout-info --- old/bup-0.33.2/dev/update-checkout-info 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/dev/update-checkout-info 2023-12-28 18:28:02.000000000 +0100 @@ -17,10 +17,8 @@ exit 1 fi -git_top=$(git rev-parse --show-toplevel) || true -if test "$git_top" != "$top"; then - # Not a checkout, or perhaps we're building from an archive dir - # unpacked somewhere in the source tree. +if ! test -e .git; then + # Not building from a git tree rm -f "$dest" exit 0 fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/client.py new/bup-0.33.3/lib/bup/client.py --- old/bup-0.33.2/lib/bup/client.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/client.py 2023-12-28 18:28:02.000000000 +0100 @@ -7,7 +7,7 @@ import socket from bup import git, ssh, vfs -from bup.compat import environ, pending_raise, reraise +from bup.compat import environ, pending_raise from bup.helpers import (Conn, atomically_replaced_file, chunkyreader, debug1, debug2, linereader, lines_until_sentinel, mkdirp, nullcontext_if_not, progress, qprogress, DemuxConn) @@ -100,7 +100,7 @@ self.pin = self.p.stdin self.conn = Conn(self.pout, self.pin) except OSError as e: - reraise(ClientError('connect: %s' % e)) + raise ClientError('connect: %s' % e) from e elif self.protocol == b'bup': self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.host, @@ -181,9 +181,7 @@ try: return self.conn.check_ok() except Exception as e: - reraise(ClientError(e)) - # reraise doesn't return - return None + raise ClientError(e) from e def check_busy(self): if self._busy: @@ -563,12 +561,12 @@ self.remote_closed = True id = self._end() self.file = None - super(PackWriter_Remote, self).close() + super().close() return id def __del__(self): assert self.remote_closed - super(PackWriter_Remote, self).__del__() + super().__del__() def abort(self): raise ClientError("don't know how to abort remote pack writing") @@ -590,7 +588,7 @@ (self._bwcount, self._bwtime) = _raw_write_bwlimit( self.file, outbuf, self._bwcount, self._bwtime) except IOError as e: - reraise(ClientError(e)) + raise ClientError(e) from e self.outbytes += len(data) self.count += 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/cmd/damage.py new/bup-0.33.3/lib/bup/cmd/damage.py --- old/bup-0.33.2/lib/bup/cmd/damage.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/cmd/damage.py 2023-12-28 18:28:02.000000000 +0100 @@ -46,13 +46,13 @@ else: maxsize = 1 chunks = opt.num or 10 - chunksize = size // chunks + chunksize = (size // chunks) or 1 for r in range(chunks): sz = random.randrange(1, maxsize+1) if sz > size: sz = size if opt.equal: - ofs = r*chunksize + ofs = (r * chunksize) % size else: ofs = random.randrange(0, size - sz + 1) log(' %6d bytes at %d\n' % (sz, ofs)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/cmd/web.py new/bup-0.33.3/lib/bup/cmd/web.py --- old/bup-0.33.2/lib/bup/cmd/web.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/cmd/web.py 2023-12-28 18:28:02.000000000 +0100 @@ -116,7 +116,7 @@ def decode_argument(self, value, name=None): if name == 'path': return value - return super(BupRequestHandler, self).decode_argument(value, name) + return super().decode_argument(value, name) def get(self, path): return self._process_request(path) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/compat.py new/bup-0.33.3/lib/bup/compat.py --- old/bup-0.33.2/lib/bup/compat.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/compat.py 2023-12-28 18:28:02.000000000 +0100 @@ -10,22 +10,6 @@ """Return hex string (not bytes as with hexlify) representation of b.""" return b.hex() -def reraise(ex): - raise ex.with_traceback(sys.exc_info()[2]) - -# These three functions (add_ex_tb, add_ex_ctx, and pending_raise) are -# vestigial, and code that uses them can probably be rewritten more -# simply now that we require Python versions that automatically -# populate the tracebacks and automatically chain pending exceptions. - -def add_ex_tb(ex): - """Do nothing (already handled by Python 3 infrastructure).""" - return ex - -def add_ex_ctx(ex, context_ex): - """Do nothing (already handled by Python 3 infrastructure).""" - return ex - class pending_raise: """If rethrow is true, rethrow ex (if any), unless the body throws. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/git.py new/bup-0.33.3/lib/bup/git.py --- old/bup-0.33.2/lib/bup/git.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/git.py 2023-12-28 18:28:02.000000000 +0100 @@ -16,8 +16,7 @@ from bup.compat import (buffer, byte_int, bytes_from_byte, bytes_from_uint, environ, - pending_raise, - reraise) + pending_raise) from bup.io import path_msg from bup.helpers import (Sha1, add_error, chunkyreader, debug1, debug2, exo, @@ -50,6 +49,7 @@ def _gitenv(repo_dir=None): + # This is not always used, i.e. sometimes we just use --git-dir if not repo_dir: repo_dir = repo() return merge_dict(environ, {b'GIT_DIR': os.path.abspath(repo_dir)}) @@ -69,7 +69,7 @@ def git_config_get(option, repo_dir=None, opttype=None, cfg_file=None): assert not (repo_dir and cfg_file), "repo_dir and cfg_file cannot both be used" - cmd = [b'git', b'config', b'--null'] + cmd = [b'git', b'--git-dir', repo_dir or repo(), b'config', b'--null'] if cfg_file: cmd.extend([b'--file', cfg_file]) if opttype == 'int': @@ -80,10 +80,7 @@ assert opttype is None cmd.extend([b'--get', option]) env=None - if repo_dir: - env = _gitenv(repo_dir=repo_dir) - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=env, - close_fds=True) + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True) # with --null, git writes out a trailing \0 after the value r = p.stdout.read()[:-1] rc = p.wait() @@ -411,7 +408,7 @@ class PackIdxV1(PackIdx): """Object representation of a Git pack index (version 1) file.""" def __init__(self, filename, f): - super(PackIdxV1, self).__init__() + super().__init__() self.closed = False self.name = filename self.idxnames = [self.name] @@ -465,7 +462,7 @@ class PackIdxV2(PackIdx): """Object representation of a Git pack index (version 2) file.""" def __init__(self, filename, f): - super(PackIdxV2, self).__init__() + super().__init__() self.closed = False self.name = filename self.idxnames = [self.name] @@ -832,7 +829,7 @@ try: f.write(oneblob) except IOError as e: - reraise(GitError(e)) + raise GitError(e) from e nw = len(oneblob) crc = zlib.crc32(oneblob) & 0xffffffff self._update_idx(sha, crc, nw) @@ -941,10 +938,10 @@ os.rename(tmpdir + b'/pack', nameprefix + b'.pack') os.rename(tmpdir + b'/idx', nameprefix + b'.idx') os.fsync(pfd) - if run_midx: - auto_midx(os.path.join(self.repo_dir, b'objects/pack')) if self.on_pack_finish: self.on_pack_finish(nameprefix) + if run_midx: + auto_midx(os.path.join(self.repo_dir, b'objects/pack')) return nameprefix finally: if tmpdir: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/helpers.py new/bup-0.33.3/lib/bup/helpers.py --- old/bup-0.33.2/lib/bup/helpers.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/helpers.py 2023-12-28 18:28:02.000000000 +0100 @@ -986,11 +986,11 @@ rows = len(l) // ncols for s in range(0, len(l), rows): cols.append(l[s:s+rows]) - out = nothing + out = [] fmt = b'%-*s' if binary else '%-*s' for row in zip(*cols): - out += prefix + nothing.join((fmt % (clen+2, s)) for s in row) + nl - return out + out.append(prefix + nothing.join((fmt % (clen+2, s)) for s in row) + nl) + return nothing.join(out) def parse_date_or_fatal(str, fatal): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/io.py new/bup-0.33.3/lib/bup/io.py --- old/bup-0.33.2/lib/bup/io.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/io.py 2023-12-28 18:28:02.000000000 +0100 @@ -37,17 +37,17 @@ def close(self): self._bup_closed = True - super(mmap, self).close() + super().close() if hasattr(py_mmap.mmap, '__enter__'): def __enter__(self): - super(mmap, self).__enter__() + super().__enter__() return self def __exit__(self, type, value, traceback): # Don't call self.close() when the parent has its own __exit__; # defer to it. self._bup_closed = True - result = super(mmap, self).__exit__(type, value, traceback) + result = super().__exit__(type, value, traceback) return result else: def __enter__(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/main.py new/bup-0.33.3/lib/bup/main.py --- old/bup-0.33.2/lib/bup/main.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/main.py 2023-12-28 18:28:02.000000000 +0100 @@ -18,13 +18,10 @@ from bup import compat, path, helpers from bup.compat import ( - add_ex_ctx, - add_ex_tb, environ, fsdecode, wrap_main ) -from bup.compat import add_ex_tb, add_ex_ctx, wrap_main from bup.helpers import ( columnate, handle_ctrl_c, @@ -129,6 +126,7 @@ do_profile = False bup_dir = None args = args[1:] +subcmd = None while args: arg = args[0] if arg in (b'-?', b'--help'): @@ -155,7 +153,7 @@ else: break -subcmd = args +subcmd = subcmd or args # Make BUP_DIR absolute, so we aren't affected by chdir (i.e. save -C, etc.). if bup_dir: @@ -189,7 +187,7 @@ usage('error: unknown command "%s"' % path_msg(subcmd_name)) already_fixed = int(environ.get(b'BUP_FORCE_TTY', 0)) -if subcmd_name in [b'mux', b'ftp', b'help']: +if subcmd_name in (b'mux', b'ftp', b'help', b'fuse'): fix_stdout = False fix_stderr = False else: @@ -238,7 +236,6 @@ srcs = tuple(srcs) dest_for = dict(zip(srcs, dests)) pending = {} - pending_ex = None try: while srcs: ready_fds, _, _ = select.select(srcs, [], []) @@ -262,21 +259,19 @@ if split[0]: pending.setdefault(fd, []).extend(split) except BaseException as ex: - pending_ex = add_ex_ctx(add_ex_tb(ex), pending_ex) - try: + pending_ex = ex # Try to finish each of the streams - for fd, pending_items in pending.items(): - dest = dest_for[fd] - width = tty_width() - try: - print_clean_line(dest, pending_items, width) - except (EnvironmentError, EOFError) as ex: - pending_ex = add_ex_ctx(add_ex_tb(ex), pending_ex) - except BaseException as ex: - pending_ex = add_ex_ctx(add_ex_tb(ex), pending_ex) - if pending_ex: - raise pending_ex - + try: + for fd, pending_items in pending.items(): + dest = dest_for[fd] + width = tty_width() + try: + print_clean_line(dest, pending_items, width) + except (EnvironmentError, EOFError) as ex: + ex.__cause__ = pending_ex + pending_ex = ex + finally: + raise pending_ex def import_and_run_main(module, args): if do_profile: @@ -299,7 +294,6 @@ dests = [] real_out_fd = real_err_fd = stdout_pipe = stderr_pipe = None filter_thread = filter_thread_started = None - pending_ex = None try: if fix_stdout: sys.stdout.flush() @@ -321,42 +315,29 @@ filter_thread.start() filter_thread_started = True import_and_run_main(module, args) - except Exception as ex: - add_ex_tb(ex) - pending_ex = ex - raise finally: # Try to make sure that whatever else happens, we restore # stdout and stderr here, if that's possible, so that we don't - # risk just losing some output. - try: - real_out_fd is not None and os.dup2(real_out_fd, sys.stdout.fileno()) - except Exception as ex: - add_ex_tb(ex) - add_ex_ctx(ex, pending_ex) - try: - real_err_fd is not None and os.dup2(real_err_fd, sys.stderr.fileno()) - except Exception as ex: - add_ex_tb(ex) - add_ex_ctx(ex, pending_ex) - # Kick filter loose - try: - stdout_pipe is not None and os.close(stdout_pipe[1]) - except Exception as ex: - add_ex_tb(ex) - add_ex_ctx(ex, pending_ex) - try: - stderr_pipe is not None and os.close(stderr_pipe[1]) - except Exception as ex: - add_ex_tb(ex) - add_ex_ctx(ex, pending_ex) + # risk just losing some output. Nest the finally blocks so we + # try each one no matter what happens, and accumulate alll + # exceptions in the pending exception __context__. try: + try: + try: + try: + real_out_fd is not None and \ + os.dup2(real_out_fd, sys.stdout.fileno()) + finally: + real_err_fd is not None and \ + os.dup2(real_err_fd, sys.stderr.fileno()) + finally: + # Kick filter loose + stdout_pipe is not None and os.close(stdout_pipe[1]) + finally: + stderr_pipe is not None and os.close(stderr_pipe[1]) + finally: close_catpipes() - except Exception as ex: - add_ex_tb(ex) - add_ex_ctx(ex, pending_ex) - if pending_ex: - raise pending_ex + # There's no point in trying to join unless we finished the finally block. if filter_thread_started: filter_thread.join() @@ -394,14 +375,10 @@ filter_output(srcs, dests) return p.wait() except BaseException as ex: - add_ex_tb(ex) - try: - if p and p.poll() == None: - os.kill(p.pid, signal.SIGTERM) - p.wait() - except BaseException as kill_ex: - raise add_ex_ctx(add_ex_tb(kill_ex), ex) - raise ex + if p and p.poll() == None: + os.kill(p.pid, signal.SIGTERM) + p.wait() + raise def run_subcmd(module, args): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/metadata.py new/bup-0.33.3/lib/bup/metadata.py --- old/bup-0.33.2/lib/bup/metadata.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/metadata.py 2023-12-28 18:28:02.000000000 +0100 @@ -741,6 +741,7 @@ 'path', 'size', 'symlink_target', 'hardlink_target', 'linux_attr', 'linux_xattr', 'posix1e_acl') self.mode = self.uid = self.gid = self.user = self.group = None + self.rdev = None self.atime = self.mtime = self.ctime = None # optional members self.path = None @@ -757,6 +758,7 @@ if self.mtime != other.mtime: return False if self.ctime != other.ctime: return False if self.atime != other.atime: return False + if self.rdev != other.rdev: return False if self.path != other.path: return False if self.uid != other.uid: return False if self.gid != other.gid: return False @@ -777,6 +779,7 @@ self.mtime, self.ctime, self.atime, + self.rdev, self.path, self.uid, self.gid, @@ -802,6 +805,8 @@ result += ' user:' + repr(self.user) if self.group is not None: result += ' group:' + repr(self.group) + if self.rdev is not None: + result += ' rdev:' + repr(self.group) if self.size is not None: result += ' size:' + repr(self.size) for name, val in (('atime', self.atime), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/source_info.py new/bup-0.33.3/lib/bup/source_info.py --- old/bup-0.33.2/lib/bup/source_info.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/source_info.py 2023-12-28 18:28:02.000000000 +0100 @@ -1,3 +1,3 @@ -commit='b1c19fb0142ac4bdc60b07640734e0c2d256f423' -date='2023-07-01 15:08:43 -0500' +commit='85fdce08bdb752eb81f5954e1dffae185b5a43c6' +date='2023-12-28 11:28:02 -0600' modified=False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/version.py new/bup-0.33.3/lib/bup/version.py --- old/bup-0.33.2/lib/bup/version.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/version.py 2023-12-28 18:28:02.000000000 +0100 @@ -22,7 +22,7 @@ # The ~ in a version is a Debian-style "always less than" marker: # https://www.debian.org/doc/debian-policy/ch-controlfields.html#version -base_version = b'0.33.2' +base_version = b'0.33.3' version = base_version if version.endswith(b'~'): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/bup/vfs.py new/bup-0.33.3/lib/bup/vfs.py --- old/bup-0.33.2/lib/bup/vfs.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/bup/vfs.py 2023-12-28 18:28:02.000000000 +0100 @@ -677,7 +677,7 @@ # Assumes the tree is properly formed, i.e. there are no # duplicates, and entries will be in git tree order. - if isinstance(names, (frozenset, set)): + if not isinstance(names, (frozenset, set)): names = frozenset(names) remaining = len(names) @@ -855,7 +855,7 @@ return # Assumes no duplicate refs - if isinstance(names, (frozenset, set)): + if not isinstance(names, (frozenset, set)): names = frozenset(names) remaining = len(names) last_name = max(names) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/lib/cmd/bup.c new/bup-0.33.3/lib/cmd/bup.c --- old/bup-0.33.2/lib/cmd/bup.c 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/lib/cmd/bup.c 2023-12-28 18:28:02.000000000 +0100 @@ -201,8 +201,6 @@ # define PROC_SELF_EXE "/proc/self/exe" #elif defined(__sun) || defined (sun) # define PROC_SELF_EXE "/proc/self/path/a.out" -#else -# define PROC_SELF_EXE NULL #endif static char *find_in_path(const char * const name, const char * const path) @@ -286,40 +284,40 @@ static char *exe_parent_dir(const char * const argv_0) { - if (PROC_SELF_EXE != NULL) { - char sbuf[2048]; - char *path = sbuf; - size_t path_n = sizeof(sbuf); - ssize_t len; - while (1) { - len = readlink(PROC_SELF_EXE, path, path_n); - if (len == -1 || (size_t) len != path_n) - break; - if (!INT_MULTIPLY_OK(path_n, 2, &path_n)) - die(2, "memory buffer for executable path would be too big\n"); - if (path != sbuf) free(path); - path = malloc(path_n); - if (!path) - die(2, "unable to allocate memory for executable path\n"); - } - if (len != -1) { - path[len] = '\0'; - char *result = strdup(dirname(path)); - if (path != sbuf) - free(path); - return result; - } - switch (errno) { - case ENOENT: case EACCES: case EINVAL: case ELOOP: case ENOTDIR: - case ENAMETOOLONG: - break; - default: - die(2, "cannot resolve %s: %s\n", path, strerror(errno)); +#ifdef PROC_SELF_EXE + char sbuf[2048]; + char *path = sbuf; + size_t path_n = sizeof(sbuf); + ssize_t len; + while (1) { + len = readlink(PROC_SELF_EXE, path, path_n); + if (len == -1 || (size_t) len != path_n) break; - } + if (!INT_MULTIPLY_OK(path_n, 2, &path_n)) + die(2, "memory buffer for executable path would be too big\n"); + if (path != sbuf) free(path); + path = malloc(path_n); + if (!path) + die(2, "unable to allocate memory for executable path\n"); + } + if (len != -1) { + path[len] = '\0'; + char *result = strdup(dirname(path)); if (path != sbuf) free(path); + return result; } + switch (errno) { + case ENOENT: case EACCES: case EINVAL: case ELOOP: case ENOTDIR: + case ENAMETOOLONG: + break; + default: + die(2, "cannot resolve %s: %s\n", path, strerror(errno)); + break; + } + if (path != sbuf) + free(path); +#endif return find_exe_parent(argv_0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/note/0.32.1-from-0.32.md new/bup-0.33.3/note/0.32.1-from-0.32.md --- old/bup-0.33.2/note/0.32.1-from-0.32.md 1970-01-01 01:00:00.000000000 +0100 +++ new/bup-0.33.3/note/0.32.1-from-0.32.md 2023-12-28 18:28:02.000000000 +0100 @@ -0,0 +1,38 @@ + +Notable changes in 0.32.1 since 0.32 +==================================== + +Bugs +---- + +* POSIX1e ACLs should be restored more correctly now. + + Previously bup incorrectly restored default (`ACL_TYPE_DEFAULT`) + ACLs as access acls (`ACL_TYPE_ACCESS`). When both existed, it + restored the access ACL first and then the default ACL as an access + ACL. Now, bup should restore each with the proper type. This issue + only affects saves created on platforms where bup currently supports + ACLs, so presumably mostly just saves created on Linux since the + current ACL support depends on non-standard functions like + `acl_extended(3)`. + + There is one remaining issue, which isn't fixed in this release, but + is fixed in 0.33.1 (because fixing it here could create saves that + are backward incompatible with 0.33). + + The problem is that in this version and older versions, bup stores + ACLs in the `acl_to_any_text(3)` format with a newline delimiter, + when the standard (and `acl_from_text(3)` which restore depends on) + requires commas. This may cause restores that include ACLs (likely + only those from Linux right now) to fail on some platforms + (e.g. Cygwin). + +Build and install +----------------- + +* pytest 7 is now supported. + +Thanks to (at least) +==================== + +Johannes Berg and Rob Browning diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/note/0.32.2-from-0.32.1.md new/bup-0.33.3/note/0.32.2-from-0.32.1.md --- old/bup-0.33.2/note/0.32.2-from-0.32.1.md 1970-01-01 01:00:00.000000000 +0100 +++ new/bup-0.33.3/note/0.32.2-from-0.32.1.md 2023-12-28 18:28:02.000000000 +0100 @@ -0,0 +1,26 @@ + +Notable changes in 0.32.2 since 0.32.1 +====================================== + +Bugs +---- + +* `bup gc` should no longer remove stale packfiles before it creates + the new midx at the end of a run. This could cause midx to complain + about missing files, e.g.: + + warning: index pack-....idx missing + +Build system +------------ + +* The automated FreeBSD tests have moved from 12.1 to 12.4 and to + Python 3.9, and have dropped testing of Python 2. + +* The automated macOS tests have moved from Catalina to Monterey and + from x86 to ARM. + +Thanks to (at least) +==================== + +Johannes Berg and Rob Browning diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/note/0.33.3-from-0.33.2.md new/bup-0.33.3/note/0.33.3-from-0.33.2.md --- old/bup-0.33.2/note/0.33.3-from-0.33.2.md 1970-01-01 01:00:00.000000000 +0100 +++ new/bup-0.33.3/note/0.33.3-from-0.33.2.md 2023-12-28 18:28:02.000000000 +0100 @@ -0,0 +1,57 @@ + +Notable changes in 0.33.3 since 0.33.2 +====================================== + +General +------- + +* The performance of `bup ls` when columnating a large number of + results should be *much* better. + +Bugs +---- + +* `bup fuse` should no longer linger after its mount point has been + unmounted: https://bugs.debian.org/cgi-bin/1050040 + +* `bup --version` should work again. + +* `bup gc` should no longer remove stale packfiles before it creates + the new midx at the end of a run. This could cause midx to complain + about missing files, e.g.: + + warning: index pack-....idx missing + +* `bup` will no longer (since 0.33) ignore `BUP_DIR` looking for a + `pack.packSizeLimit`. + +* A VFS optimization of the handling of requests for specific names + within a given tree has been restored. + +* Incorrect uses of some exception handling code designed for + compatibility with Python 2 have been replaced with the built-in + Python 3 equivalents. + +* Some client calls to `super(CLASS, self)` have been replaced by + `super()` to avoid errors during `__del__`. + +Build system +------------ + +* `test-help` should no longer hang when run interactively, and should + no longer be affected by the current locale. Previously it might + fail in a non-C locale. + +* The `bup damage` invocation in `test-fsck` has been made much more + aggressive in order to avoid transient failures caused both by + unpredictable `par2` behavior and the (currently) probabilstic + nature of the damage. + +* OpenBSD builds should no longer fail on `-Werror` related issues + involving `PROC_SELF_EXE`. + +Thanks to (at least) +==================== + +Alain Cochard, Austin Schuh, Johannes Berg, Julian Smith, Lucas +Nussbaum, Nix, Rob Browning, Rob Leslie, and Robert Edmonds diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/test/ext/conftest.py new/bup-0.33.3/test/ext/conftest.py --- old/bup-0.33.2/test/ext/conftest.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/test/ext/conftest.py 2023-12-28 18:28:02.000000000 +0100 @@ -14,7 +14,7 @@ class BupSubprocFailure(Exception): def __init__(self, msg, cmd, status, failures): - super(BupSubprocFailure, self).__init__(msg) + super().__init__(msg) self.cmd = cmd self.status = status self.failures = failures @@ -22,7 +22,7 @@ class BupSubprocTestRunner(pytest.Item): def __init__(self, name, parent): - super(BupSubprocTestRunner, self).__init__(name, parent) + super().__init__(name, parent) def runtest(self): cmd = str(self.fspath) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/test/ext/test-fsck new/bup-0.33.3/test/ext/test-fsck --- old/bup-0.33.2/test/ext/test-fsck 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/test/ext/test-fsck 2023-12-28 18:28:02.000000000 +0100 @@ -45,7 +45,20 @@ WVFAIL bup fsck --quick -rvv -j99 # fails because repairs were needed if bup fsck --par2-ok; then WVPASS bup fsck -r # ok because of repairs from last time - WVPASS bup damage "$BUP_DIR"/objects/pack/*.pack -n202 -s1 --equal -S0 + + # This must do "too much" damage. Currently par2 is invoked with + # -c200, which should allow up to 200 damaged "blocks", but since + # we don't specify the block size, it's dynamically computed. + # Even if we did specify a size, the actual size appears to be + # affected by the input file sizes, and the specific behavior + # doesn't appear to be documented/promised -- see par2 + # comandline.cpp. Also worth noting that bup damage's output is + # currently probabilistic, so it might not actually damage any + # given byte. For now, just try to overdo it -- randomly change + # (or not 1/256th of the time) 600 evenly spaced bytes in each + # pack file. + WVPASS bup damage "$BUP_DIR"/objects/pack/*.pack -n600 -s1 --equal -S0 + WVFAIL bup fsck WVFAIL bup fsck -rvv # too many errors to be repairable WVFAIL bup fsck -r # too many errors to be repairable diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/test/ext/test-help new/bup-0.33.3/test/ext/test-help --- old/bup-0.33.2/test/ext/test-help 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/test/ext/test-help 2023-12-28 18:28:02.000000000 +0100 @@ -30,9 +30,9 @@ (cd "$tmpdir/man" && ln -s "$top/Documentation" man1) export MANPATH="$tmpdir/man" -WVPASS bup help save -WVPASS bup save --help -WVPASSEQ 1 $(bup help save | head -1 | grep -cF 'bup-save(1)') -WVPASSEQ 1 $(bup save --help | head -1 | grep -cF 'bup-save(1)') +PAGER=cat WVPASS bup help save +PAGER=cat WVPASS bup save --help +WVPASSEQ 1 $(bup help save | grep -cE 'bup.save . create a new bup backup set') +WVPASSEQ 1 $(bup save --help | grep -cE 'bup.save . create a new bup backup set') WVPASS rm -rf "$tmpdir" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bup-0.33.2/test/int/test_git.py new/bup-0.33.3/test/int/test_git.py --- old/bup-0.33.2/test/int/test_git.py 2023-07-01 22:08:43.000000000 +0200 +++ new/bup-0.33.3/test/int/test_git.py 2023-12-28 18:28:02.000000000 +0100 @@ -541,7 +541,7 @@ # check that we don't have it open anymore WVPASSEQ(False, b'deleted' in fn) -def test_config(): +def test_config(tmpdir): cfg_file = os.path.join(os.path.dirname(__file__), 'sample.conf') no_such_file = os.path.join(os.path.dirname(__file__), 'nosuch.conf') git_config_get = partial(git.git_config_get, cfg_file=cfg_file) @@ -568,3 +568,10 @@ WVPASSEQ(2, git_config_get(b'bup.istrue2', opttype='int')) WVPASSEQ(0, git_config_get(b'bup.isfalse2', opttype='int')) WVPASSEQ(0x777, git_config_get(b'bup.hex', opttype='int')) + + # Make sure get_config respects the repo() + git_dir = tmpdir + b'/repo' + git.init_repo(git_dir) + git.check_repo_or_die(git_dir) + exc(b'git', b'--git-dir', git_dir, b'config', b'bup.foo', b'yep') + assert b'yep' == git.git_config_get(b'bup.foo')
participants (1)
-
Source-Sync