]> git.scottworley.com Git - pinch/blobdiff - pinch.py
Release 3.0.3
[pinch] / pinch.py
index 5eb76018e710025a01bf632b1ab3234a79153815..c26070b17ee00eac25b191454f32f54b45e58b3c 100644 (file)
--- a/pinch.py
+++ b/pinch.py
@@ -302,18 +302,40 @@ def digest_file(filename: str) -> Digest16:
     return Digest16(hasher.hexdigest())
 
 
+_experimental_flag_needed = None
+
+
+def _nix_command(v: Verification) -> List[str]:
+    global _experimental_flag_needed
+    if _experimental_flag_needed is None:
+        v.status('Checking Nix version')
+        process = subprocess.run(['nix', '--help'], stdout=subprocess.PIPE)
+        v.result(process.returncode == 0)
+        _experimental_flag_needed = b'--experimental-features' in process.stdout
+    return ['nix', '--experimental-features',
+            'nix-command'] if _experimental_flag_needed 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())