diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2016-09-14 21:22:51 +0300 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2016-09-15 17:53:09 +0300 |
commit | 437f6ad4ddddd43a6c39ba6bd0e02ff2cf08cdaa (patch) | |
tree | 7719d5d459749e2301f2e9e137b228aa4f36c3f8 | |
parent | 66fee615aab7089942299bbac9dd97fdcd1c2ddb (diff) |
Report conflicting movelists as an error
We probably want to told when we are uploading a package which is
immediately going to be automatically removed as stale.
Uploading a package at the same time as a marking it for removal doesn't
make any sense, so report that as an error.
Update per-version testpackage to avoid this error.
-rwxr-xr-x | calm/calm.py | 29 | ||||
-rw-r--r-- | calm/uploads.py | 10 | ||||
-rw-r--r-- | test/testdata/homes/Blooey McFooey/x86/release/per-version/override.hint | 2 | ||||
-rw-r--r-- | test/testdata/process_arch/htdocs.expected | 4 | ||||
-rw-r--r-- | test/testdata/process_arch/rel_area.expected | 3 | ||||
-rw-r--r-- | test/testdata/process_arch/setup.ini.expected | 6 | ||||
-rw-r--r-- | test/testdata/process_arch/vault.expected | 1 |
7 files changed, 53 insertions, 2 deletions
diff --git a/calm/calm.py b/calm/calm.py index 3e6952c..0d41602 100755 --- a/calm/calm.py +++ b/calm/calm.py @@ -193,6 +193,18 @@ def process(args): # ... discard move list and merged_packages continue + # check for conflicting movelists + conflicts = False + for arch in common_constants.ARCHES + ['noarch']: + conflicts = conflicts or report_movelist_conflicts(scan_result[arch].to_relarea, scan_result[arch].to_vault, "manually") + if args.stale: + conflicts = conflicts or report_movelist_conflicts(scan_result[arch].to_relarea, stale_to_vault[arch], "automatically") + + # if an error occurred ... + if conflicts: + # ... discard move list and merged_packages + continue + # for each arch and noarch for arch in common_constants.ARCHES + ['noarch']: logging.debug("moving %s packages for maintainer %s" % (arch, name)) @@ -271,6 +283,23 @@ def remove_stale_packages(args, packages): # +# report movelist conflicts +# + +def report_movelist_conflicts(a, b, reason): + conflicts = False + + n = uploads.movelist_intersect(a, b) + if n: + for p in n: + for f in n[p]: + logging.error("%s/%s is both uploaded and %s vaulted" % (p, f, reason)) + conflicts = True + + return conflicts + + +# # # diff --git a/calm/uploads.py b/calm/uploads.py index 8364ff0..9d44bfe 100644 --- a/calm/uploads.py +++ b/calm/uploads.py @@ -267,6 +267,16 @@ def move_to_vault(args, movelist): move(args, movelist, args.rel_area, args.vault) +# compute the intersection of a pair of movelists +def movelist_intersect(a, b): + i = defaultdict(list) + for p in a.keys() & b.keys(): + pi = set(a[p]) & set(b[p]) + if pi: + i[p] = pi + return i + + # # # diff --git a/test/testdata/homes/Blooey McFooey/x86/release/per-version/override.hint b/test/testdata/homes/Blooey McFooey/x86/release/per-version/override.hint new file mode 100644 index 0000000..aeb41e4 --- /dev/null +++ b/test/testdata/homes/Blooey McFooey/x86/release/per-version/override.hint @@ -0,0 +1,2 @@ +curr: 4.8-1 +test: 5.0-1 diff --git a/test/testdata/process_arch/htdocs.expected b/test/testdata/process_arch/htdocs.expected index 109ce87..3dd3b28 100644 --- a/test/testdata/process_arch/htdocs.expected +++ b/test/testdata/process_arch/htdocs.expected @@ -24,7 +24,9 @@ 'per-version-4.0-1', 'per-version-4.0-1-src', 'per-version-4.8-1', - 'per-version-4.8-1-src'], + 'per-version-4.8-1-src', + 'per-version-5.0-1', + 'per-version-5.0-1-src'], 'x86/perl-Net-SMTP-SSL': ['.htaccess', 'perl-Net-SMTP-SSL-1.03-1', 'perl-Net-SMTP-SSL-1.03-1-src', diff --git a/test/testdata/process_arch/rel_area.expected b/test/testdata/process_arch/rel_area.expected index 32be5da..67d9b4c 100644 --- a/test/testdata/process_arch/rel_area.expected +++ b/test/testdata/process_arch/rel_area.expected @@ -60,6 +60,9 @@ 'per-version-4.8-1-src.tar.xz', 'per-version-4.8-1.hint', 'per-version-4.8-1.tar.xz', + 'per-version-5.0-1-src.tar.xz', + 'per-version-5.0-1.hint', + 'per-version-5.0-1.tar.xz', 'sha512.sum'], 'x86/release/per-version-incomplete': ['override.hint', 'per-version-incomplete-36-1-src.tar.xz', diff --git a/test/testdata/process_arch/setup.ini.expected b/test/testdata/process_arch/setup.ini.expected index 8e52c42..de165ea 100644 --- a/test/testdata/process_arch/setup.ini.expected +++ b/test/testdata/process_arch/setup.ini.expected @@ -208,6 +208,12 @@ 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' 'source: x86/release/per-version/per-version-4.0-1-src.tar.xz 228 ' 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' + '[test]\n' + 'version: 5.0-1\n' + 'install: x86/release/per-version/per-version-5.0-1.tar.xz 228 ' + 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' + 'source: x86/release/per-version/per-version-5.0-1-src.tar.xz 228 ' + 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' '\n' '@ perl-Net-SMTP-SSL\n' 'sdesc: "Perl distribution Net-SMTP-SSL"\n' diff --git a/test/testdata/process_arch/vault.expected b/test/testdata/process_arch/vault.expected index 3f0abb5..cf4e9f0 100644 --- a/test/testdata/process_arch/vault.expected +++ b/test/testdata/process_arch/vault.expected @@ -1,7 +1,6 @@ {'.': [], 'x86': [], 'x86/release': [], - 'x86/release/per-version': ['per-version-5.0-1-src.tar.xz', 'per-version-5.0-1.hint', 'per-version-5.0-1.tar.xz'], 'x86/release/staleversion': ['staleversion-240-1-src.tar.xz', 'staleversion-240-1.tar.xz', 'staleversion-242-0-src.tar.xz', |