]> git.scottworley.com Git - pinch/blobdiff - pinch.py
Don't pass --experimental-features to old nix
[pinch] / pinch.py
index 369dd56dea240ac44da5ddfa1e14e72ac9dcea7c..c26070b17ee00eac25b191454f32f54b45e58b3c 100644 (file)
--- a/pinch.py
+++ b/pinch.py
@@ -302,30 +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',
-                              '--experimental-features',
-                              'nix-command',
-                              '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',
-                              '--experimental-features',
-                              'nix-command',
-                              '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())