]> git.scottworley.com Git - pinch/commitdiff
Don't pass --experimental-features to old nix
authorScott Worley <scottworley@scottworley.com>
Thu, 20 May 2021 06:57:08 +0000 (23:57 -0700)
committerScott Worley <scottworley@scottworley.com>
Thu, 20 May 2021 07:07:15 +0000 (00:07 -0700)
It complains: error: unrecognised flag '--experimental-features'

Changelog
pinch.py

index 9c495955004191cf817bf7399b076cf402d9f397..557dab4f3aab539b6d5fdd01d71784b2787c2327 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,5 @@
 ## [Unreleased]
+- Don't pass --experimental-features to old nix versions
 
 ## [3.0.2] - 2021-02-16
 ### Changed
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())