X-Git-Url: http://git.scottworley.com/pinch/blobdiff_plain/b1e8c1b07e325426febd7e27030e4f8f6769bcde..0ed3a03e957a3159a31338ee445e22cc660846d2:/pinch.py?ds=inline diff --git a/pinch.py b/pinch.py index 9555d74..332d130 100644 --- a/pinch.py +++ b/pinch.py @@ -247,7 +247,7 @@ def compare(a: str, b: str) -> Tuple[List[str], List[str], List[str]]: def fetch_channel( v: Verification, channel: ChannelSearchPath) -> Tuple[str, str]: - v.status('Fetching channel') + v.status('Fetching channel from %s' % channel.channel_url) request = urllib.request.urlopen(channel.channel_url, timeout=10) channel_html = request.read().decode() forwarded_url = request.geturl() @@ -351,7 +351,7 @@ def fetch_with_nix_prefetch_url( assert empty == '' v.check("Verifying nix-prefetch-url's digest", to_Digest16(v, Digest32(prefetch_digest)) == digest) - v.status("Verifying file digest") + v.status("Verifying digest of %s" % path) file_digest = digest_file(path) v.result(file_digest == digest) return path # type: ignore # (for old mypy) @@ -644,6 +644,11 @@ def pinCommand(args: argparse.Namespace) -> None: def updateCommand(args: argparse.Namespace) -> None: v = Verification() exprs: Dict[str, str] = {} + profile_manifest = os.path.join(args.profile, "manifest.nix") + search_paths: List[str] = [ + "-I", "pinch_profile=" + args.profile, + "-I", "pinch_profile_manifest=" + os.readlink(profile_manifest) + ] if os.path.exists(profile_manifest) else [] config = { section: read_pinned_config_section(section, conf) for section, conf in read_config_files( @@ -651,10 +656,12 @@ def updateCommand(args: argparse.Namespace) -> None: alias, nonalias = partition_dict( lambda k, v: isinstance(v[0], AliasSearchPath), config) - for section, (sp, pin) in nonalias.items(): + for section, (sp, pin) in sorted(nonalias.items()): assert not isinstance(sp, AliasSearchPath) # mypy can't see through assert not isinstance(pin, AliasPin) # partition_dict() tarball = sp.fetch(v, pin) + search_paths.extend(["-I", "pinch_tarball_for_%s=%s" % + (pin.release_name, tarball)]) exprs[section] = ( 'f: f { name = "%s"; channelName = "%%s"; src = builtins.storePath "%s"; }' % (pin.release_name, tarball)) @@ -671,7 +678,9 @@ def updateCommand(args: argparse.Namespace) -> None: '--file', '', '--install', - '--from-expression'] + [exprs[name] % name for name in sorted(exprs.keys())] + '--remove-all', + ] + search_paths + ['--from-expression'] + [ + exprs[name] % name for name in sorted(exprs.keys())] if args.dry_run: print(' '.join(map(shlex.quote, command))) else: