]> git.scottworley.com Git - pinch/blobdiff - pinch.py
Allow nixpkgs' new intentionally-invalid symlink
[pinch] / pinch.py
index 89d6f61cad23f6bcd2da6785f5cfec922ceb4f93..33fd9bfc802d2ee5aa1ab66f365ab5ee921939a6 100644 (file)
--- a/pinch.py
+++ b/pinch.py
@@ -148,7 +148,6 @@ def symlink_archive(v: Verification, path: str) -> str:
 class AliasSearchPath(NamedTuple):
     alias_of: str
 
 class AliasSearchPath(NamedTuple):
     alias_of: str
 
-    # pylint: disable=no-self-use
     def pin(self, _: Verification, __: Optional[Pin]) -> AliasPin:
         return AliasPin()
 
     def pin(self, _: Verification, __: Optional[Pin]) -> AliasPin:
         return AliasPin()
 
@@ -156,7 +155,6 @@ class AliasSearchPath(NamedTuple):
 class SymlinkSearchPath(NamedTuple):
     path: str
 
 class SymlinkSearchPath(NamedTuple):
     path: str
 
-    # pylint: disable=no-self-use
     def pin(self, _: Verification, __: Optional[Pin]) -> SymlinkPin:
         return SymlinkPin()
 
     def pin(self, _: Verification, __: Optional[Pin]) -> SymlinkPin:
         return SymlinkPin()
 
@@ -209,7 +207,6 @@ class ChannelSearchPath(NamedTuple):
             tarball_sha256=table['nixexprs.tar.xz'].digest,
             git_revision=new_gitpin.git_revision)
 
             tarball_sha256=table['nixexprs.tar.xz'].digest,
             git_revision=new_gitpin.git_revision)
 
-    # pylint: disable=no-self-use
     def fetch(self, v: Verification, pin: Pin) -> str:
         assert isinstance(pin, ChannelPin)
 
     def fetch(self, v: Verification, pin: Pin) -> str:
         assert isinstance(pin, ChannelPin)
 
@@ -420,15 +417,28 @@ def compare_tarball_and_git(
         'nixpkgs',
         'programs.sqlite',
         'svn-revision']
         '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)
     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(
     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(
 
 
 def extract_tarball(
@@ -588,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:
         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
 
             f'Cannot update unpinned channel "{section}" (Run "pin" before "update")')
     return sp, pin
 
@@ -607,7 +617,7 @@ def read_config_files(
         config = read_config(file)
         for section in config.sections():
             if section in merged_config:
         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
 
             merged_config[section] = config[section]
     return merged_config