]> git.scottworley.com Git - pinch/blobdiff - pinch.py
Appease linter: No global variables
[pinch] / pinch.py
index 5eb76018e710025a01bf632b1ab3234a79153815..9555d74567f7b27ea76cb700beb87a31ed1db0b8 100644 (file)
--- a/pinch.py
+++ b/pinch.py
@@ -302,18 +302,39 @@ def digest_file(filename: str) -> Digest16:
     return Digest16(hasher.hexdigest())
 
 
+@functools.lru_cache
+def _experimental_flag_needed(v: Verification) -> bool:
+    v.status('Checking Nix version')
+    process = subprocess.run(['nix', '--help'], stdout=subprocess.PIPE)
+    v.result(process.returncode == 0)
+    return b'--experimental-features' in process.stdout
+
+
+def _nix_command(v: Verification) -> List[str]:
+    return ['nix', '--experimental-features',
+            'nix-command'] if _experimental_flag_needed(v) else ['nix']
+
+
 def to_Digest16(v: Verification, digest32: Digest32) -> Digest16:
     v.status('Converting digest to base16')
-    process = subprocess.run(
-        ['nix', 'to-base16', '--type', 'sha256', digest32], stdout=subprocess.PIPE)
+    process = subprocess.run(_nix_command(v) + [
+        'to-base16',
+        '--type',
+        'sha256',
+        digest32],
+        stdout=subprocess.PIPE)
     v.result(process.returncode == 0)
     return Digest16(process.stdout.decode().strip())
 
 
 def to_Digest32(v: Verification, digest16: Digest16) -> Digest32:
     v.status('Converting digest to base32')
-    process = subprocess.run(
-        ['nix', 'to-base32', '--type', 'sha256', digest16], stdout=subprocess.PIPE)
+    process = subprocess.run(_nix_command(v) + [
+        'to-base32',
+        '--type',
+        'sha256',
+        digest16],
+        stdout=subprocess.PIPE)
     v.result(process.returncode == 0)
     return Digest32(process.stdout.decode().strip())