Package: python3-breezy Version: 3.0.1-6 Severity: normal Tags: patch Hi,
breezy doesn't always create it's config dir resulting in an exception. The current behaviour breaks ros-wstool since the switch from bzr to brz: https://tests.reproducible-builds.org/debian/rb-pkg/unstable/amd64/ros-wstool.html Steps to reproduce: $ cd $(mktemp -d) $ HOME=$(pwd) brz init Created a standalone tree (format: 2a) $ touch foo $ HOME=$(pwd) brz status brz: ERROR: [Errno 2] No such file or directory: '/tmp/tmp.7OnfYj98A5/.config/breezy' Excrept from the .bzr.log: 0.039 encoding stdout as sys.stdout encoding 'UTF-8' 0.039 encoding stdout as sys.stdout encoding 'UTF-8' 0.039 encoding stdout as sys.stdout encoding 'UTF-8' 0.049 breezy version: 3.0.1 0.049 brz arguments: ['status'] 0.154 encoding stdout as sys.stdout encoding 'UTF-8' 0.170 opening working tree '/tmp/tmp.7OnfYj98A5' 0.172 check paths: None 0.173 creating config directory: '/tmp/tmp.7OnfYj98A5/.config/breezy' 0.173 Transferred: 0kB (0.0kB/s r:0kB w:0kB) 0.175 Traceback (most recent call last): File "/usr/lib/python3/dist-packages/breezy/ignores.py", line 93, in get_user_ignores f = open(path, 'rb') FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp.7OnfYj98A5/.config/breezy/ignore' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/breezy/commands.py", line 1016, in exception_to_return_code return the_callable(*args, **kwargs) File "/usr/lib/python3/dist-packages/breezy/commands.py", line 1202, in run_bzr ret = run(*run_argv) File "/usr/lib/python3/dist-packages/breezy/commands.py", line 759, in run_argv_aliases return self.run(**all_cmd_args) File "/usr/lib/python3/dist-packages/breezy/commands.py", line 784, in run return self._operation.run_simple(*args, **kwargs) File "/usr/lib/python3/dist-packages/breezy/cleanup.py", line 137, in run_simple self.cleanups, self.func, *args, **kwargs) File "/usr/lib/python3/dist-packages/breezy/cleanup.py", line 166, in _do_with_cleanups result = func(*args, **kwargs) File "/usr/lib/python3/dist-packages/breezy/commands.py", line 1219, in ignore_pipe result = func(*args, **kwargs) File "/usr/lib/python3/dist-packages/breezy/builtins.py", line 422, in run classify=not no_classify) File "/usr/lib/python3/dist-packages/breezy/status.py", line 168, in show_tree_status show_ids=show_ids, classify=classify) File "/usr/lib/python3/dist-packages/breezy/status.py", line 80, in report_changes delta.unversioned if not new.is_ignored(unversioned[0])] File "/usr/lib/python3/dist-packages/breezy/status.py", line 80, in <listcomp> delta.unversioned if not new.is_ignored(unversioned[0])] File "/usr/lib/python3/dist-packages/breezy/bzr/workingtree.py", line 604, in is_ignored self.get_ignore_list()) File "/usr/lib/python3/dist-packages/breezy/bzr/workingtree.py", line 576, in get_ignore_list ignore_globs.update(ignores.get_user_ignores()) File "/usr/lib/python3/dist-packages/breezy/ignores.py", line 103, in get_user_ignores _set_user_ignores(USER_DEFAULTS) File "/usr/lib/python3/dist-packages/breezy/ignores.py", line 125, in _set_user_ignores config.ensure_config_dir_exists() File "/usr/lib/python3/dist-packages/breezy/config.py", line 1449, in ensure_config_dir_exists os.mkdir(path) FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp.7OnfYj98A5/.config/breezy' 0.175 return code 3 The easiest fix is to use os.makedirs instead of os.mkdir. See attached patch. Cheers Jochen P.S.: brz in experimental is not installable, because this is not fulfillable: python3-breezy (<= 3.1.0~bzr7295-1.1~) python3-breezy (>= 3.1.0~bzr7295-1) $ dpkg --compare-versions "3.1.0~bzr7372-1" lt "3.1.0~bzr7295-1.1" && echo true I would propose to use 3.1.0-bzr7372 as the upstream version in future, as the tilde is special. -- System Information: Debian Release: bullseye/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 5.3.8 (SMP w/8 CPU cores) Kernel taint flags: TAINT_UNSIGNED_MODULE Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages python3-breezy depends on: ii libc6 2.29-3 ii python3 3.7.5-1 ii python3-configobj 5.0.6-3 ii python3-dulwich 0.19.13-1 ii python3-fastimport 0.9.8-2 ii python3-six 1.12.0-2 Versions of packages python3-breezy recommends: ii ca-certificates 20190110 ii openssh-client [ssh-client] 1:8.1p1-1 pn python3-github <none> pn python3-gitlab <none> pn python3-gpg <none> pn python3-launchpadlib <none> ii python3-paramiko 2.6.0-1 Versions of packages python3-breezy suggests: pn python3-breezy-dbg <none> pn python3-breezy.tests <none> pn python3-kerberos <none> ii python3-paramiko 2.6.0-1 ii xdg-utils 1.1.3-1 -- no debconf information
--- breezy-3.0.1.orig/breezy/config.py +++ breezy-3.0.1/breezy/config.py @@ -1446,7 +1446,7 @@ def ensure_config_dir_exists(path=None): 'creating config parent directory: %r', parent_dir) os.mkdir(parent_dir) trace.mutter('creating config directory: %r', path) - os.mkdir(path) + os.makedirs(path) osutils.copy_ownership_from_path(path)