From: Scott Worley Date: Thu, 20 May 2021 06:57:08 +0000 (-0700) Subject: Don't pass --experimental-features to old nix X-Git-Tag: v3.0.3~1 X-Git-Url: http://git.scottworley.com/pinch/commitdiff_plain/1d48f551985ae8b135e4e052338d2bf3d5774ef6?ds=inline Don't pass --experimental-features to old nix It complains: error: unrecognised flag '--experimental-features' --- diff --git a/Changelog b/Changelog index 9c49595..557dab4 100644 --- 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 diff --git a/pinch.py b/pinch.py index 369dd56..c26070b 100644 --- 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())