]> git.scottworley.com Git - pinch/blobdiff - pinch.py
Allow nixpkgs' new intentionally-invalid symlink
[pinch] / pinch.py
index bc9ba3bf435c9f60526b5e2cae4ed3ef9ada05fc..33fd9bfc802d2ee5aa1ab66f365ab5ee921939a6 100644 (file)
--- a/pinch.py
+++ b/pinch.py
@@ -417,15 +417,28 @@ def compare_tarball_and_git(
         'nixpkgs',
         'programs.sqlite',
         'svn-revision']
-    benign_errors = []
+    permitted_errors = [
+        'pkgs/test/nixpkgs-check-by-name/tests/symlink-invalid/pkgs/by-name/fo/foo/foo.nix',
+    ]
+    benign_expected_errors = []
+    benign_permitted_errors = []
     for ee in expected_errors:
         if ee in errors:
             errors.remove(ee)
-            benign_errors.append(ee)
-    v.check(f'{len(errors)} unexpected incomparable files', len(errors) == 0)
+            benign_expected_errors.append(ee)
+    for pe in permitted_errors:
+        if pe in errors:
+            errors.remove(pe)
+            benign_permitted_errors.append(ee)
     v.check(
-        f'({len(benign_errors)} of {len(expected_errors)} expected incomparable files)',
-        len(benign_errors) == len(expected_errors))
+        f'{len(errors)} unexpected incomparable files: {errors}',
+        len(errors) == 0)
+    v.check(
+        f'({len(benign_expected_errors)} of {len(expected_errors)} expected incomparable files)',
+        len(benign_expected_errors) == len(expected_errors))
+    v.check(
+        f'({len(benign_permitted_errors)} of {len(permitted_errors)} permitted incomparable files)',
+        len(benign_permitted_errors) <= len(permitted_errors))
 
 
 def extract_tarball(
@@ -585,7 +598,7 @@ def read_pinned_config_section(
         section: str, conf: configparser.SectionProxy) -> Tuple[SearchPath, Pin]:
     sp, pin = read_config_section(conf)
     if pin is None:
-        raise Exception(
+        raise RuntimeError(
             f'Cannot update unpinned channel "{section}" (Run "pin" before "update")')
     return sp, pin
 
@@ -604,7 +617,7 @@ def read_config_files(
         config = read_config(file)
         for section in config.sections():
             if section in merged_config:
-                raise Exception('Duplicate channel "{section}"')
+                raise RuntimeError('Duplicate channel "{section}"')
             merged_config[section] = config[section]
     return merged_config