]> git.scottworley.com Git - pinch/blobdiff - pinch.py
Begin keeping a changelog
[pinch] / pinch.py
index 37d37a7c137727bed59251a0b0b1619f19cbeab7..8c9e976583ffd4c2e5d049245ee4dc90db1e3742 100644 (file)
--- a/pinch.py
+++ b/pinch.py
@@ -124,7 +124,16 @@ def copy_to_nix_store(v: Verification, filename: str) -> str:
     process = subprocess.run(
         ['nix-store', '--add', filename], stdout=subprocess.PIPE)
     v.result(process.returncode == 0)
     process = subprocess.run(
         ['nix-store', '--add', filename], stdout=subprocess.PIPE)
     v.result(process.returncode == 0)
-    return process.stdout.decode().strip()
+    return process.stdout.decode().strip()  # type: ignore  # (for old mypy)
+
+
+def symlink_archive(v: Verification, path: str) -> str:
+    with tempfile.TemporaryDirectory() as td:
+        archive_filename = os.path.join(td, 'link.tar.gz')
+        os.symlink(path, os.path.join(td, 'link'))
+        with tarfile.open(archive_filename, mode='x:gz') as t:
+            t.add(os.path.join(td, 'link'), arcname='link')
+        return copy_to_nix_store(v, archive_filename)
 
 
 class AliasSearchPath(NamedTuple):
 
 
 class AliasSearchPath(NamedTuple):
@@ -143,12 +152,7 @@ class SymlinkSearchPath(NamedTuple):
         return SymlinkPin()
 
     def fetch(self, v: Verification, _: Pin) -> str:
         return SymlinkPin()
 
     def fetch(self, v: Verification, _: Pin) -> str:
-        with tempfile.TemporaryDirectory() as td:
-            archive_filename = os.path.join(td, 'link.tar.gz')
-            os.symlink(self.path, os.path.join(td, 'link'))
-            with tarfile.open(archive_filename, mode='x:gz') as t:
-                t.add(os.path.join(td, 'link'), arcname='link')
-            return copy_to_nix_store(v, archive_filename)
+        return symlink_archive(v, self.path)
 
 
 class GitSearchPath(NamedTuple):
 
 
 class GitSearchPath(NamedTuple):
@@ -238,7 +242,7 @@ def fetch_channel(
         v: Verification, channel: ChannelSearchPath) -> Tuple[str, str]:
     v.status('Fetching channel')
     request = urllib.request.urlopen(channel.channel_url, timeout=10)
         v: Verification, channel: ChannelSearchPath) -> Tuple[str, str]:
     v.status('Fetching channel')
     request = urllib.request.urlopen(channel.channel_url, timeout=10)
-    channel_html = request.read()
+    channel_html = request.read().decode()
     forwarded_url = request.geturl()
     v.result(request.status == 200)  # type: ignore  # (for old mypy)
     v.check('Got forwarded', channel.channel_url != forwarded_url)
     forwarded_url = request.geturl()
     v.result(request.status == 200)  # type: ignore  # (for old mypy)
     v.check('Got forwarded', channel.channel_url != forwarded_url)
@@ -651,7 +655,7 @@ def read_config_section(
     pin_fields, remaining_fields = filter_dict(all_fields, set(P._fields))
     # Error suppression works around https://github.com/python/mypy/issues/9007
     pin_present = pin_fields != {} or P._fields == ()
     pin_fields, remaining_fields = filter_dict(all_fields, set(P._fields))
     # Error suppression works around https://github.com/python/mypy/issues/9007
     pin_present = pin_fields != {} or P._fields == ()
-    pin = P(**pin_fields) if pin_present else None  # type:ignore[call-arg]
+    pin = P(**pin_fields) if pin_present else None  # type: ignore
     return SP(**remaining_fields), pin
 
 
     return SP(**remaining_fields), pin