X-Git-Url: http://git.scottworley.com/pinch/blobdiff_plain/dd1026fe9c1e4b3b4097d5a9589597b64ca0b55b..f8f5b12546942d8d801f3cda70c798d4a4e4ae13:/pinch.py diff --git a/pinch.py b/pinch.py index 5d93c26..cc653da 100644 --- a/pinch.py +++ b/pinch.py @@ -50,7 +50,11 @@ class ChannelTableEntry(types.SimpleNamespace): url: str -class Channel(types.SimpleNamespace): +class SearchPath(types.SimpleNamespace): + release_name: str + + +class Channel(SearchPath): alias_of: str channel_html: bytes channel_url: str @@ -59,7 +63,6 @@ class Channel(types.SimpleNamespace): git_repo: str git_revision: str old_git_revision: str - release_name: str table: Dict[str, ChannelTableEntry] @@ -131,7 +134,7 @@ def fetch(v: Verification, channel: Channel) -> None: request = urllib.request.urlopen(channel.channel_url, timeout=10) channel.channel_html = request.read() channel.forwarded_url = request.geturl() - v.result(request.status == 200) + v.result(request.status == 200) # type: ignore # (for old mypy) v.check('Got forwarded', channel.channel_url != channel.forwarded_url) @@ -184,7 +187,7 @@ def digest_file(filename: str) -> Digest16: def to_Digest16(v: Verification, digest32: Digest32) -> Digest16: v.status('Converting digest to base16') process = subprocess.run( - ['nix', 'to-base16', '--type', 'sha256', digest32], capture_output=True) + ['nix', 'to-base16', '--type', 'sha256', digest32], stdout=subprocess.PIPE) v.result(process.returncode == 0) return Digest16(process.stdout.decode().strip()) @@ -192,7 +195,7 @@ def to_Digest16(v: Verification, digest32: Digest32) -> Digest16: def to_Digest32(v: Verification, digest16: Digest16) -> Digest32: v.status('Converting digest to base32') process = subprocess.run( - ['nix', 'to-base32', '--type', 'sha256', digest16], capture_output=True) + ['nix', 'to-base32', '--type', 'sha256', digest16], stdout=subprocess.PIPE) v.result(process.returncode == 0) return Digest32(process.stdout.decode().strip()) @@ -203,7 +206,7 @@ def fetch_with_nix_prefetch_url( digest: Digest16) -> str: v.status('Fetching %s' % url) process = subprocess.run( - ['nix-prefetch-url', '--print-path', url, digest], capture_output=True) + ['nix-prefetch-url', '--print-path', url, digest], stdout=subprocess.PIPE) v.result(process.returncode == 0) prefetch_digest, path, empty = process.stdout.decode().split('\n') assert empty == '' @@ -212,7 +215,7 @@ def fetch_with_nix_prefetch_url( v.status("Verifying file digest") file_digest = digest_file(path) v.result(file_digest == digest) - return path + return path # type: ignore # (for old mypy) def fetch_resources(v: Verification, channel: Channel) -> None: @@ -417,13 +420,13 @@ def git_get_tarball(v: Verification, channel: Channel) -> str: v.status('Putting tarball in Nix store') process = subprocess.run( - ['nix-store', '--add', output_filename], capture_output=True) + ['nix-store', '--add', output_filename], stdout=subprocess.PIPE) v.result(process.returncode == 0) store_tarball = process.stdout.decode().strip() os.makedirs(os.path.dirname(cache_file), exist_ok=True) open(cache_file, 'w').write(store_tarball) - return store_tarball + return store_tarball # type: ignore # (for old mypy) def check_channel_metadata( @@ -482,13 +485,18 @@ def git_revision_name(v: Verification, channel: Channel) -> str: '-n1', '--format=%ct-%h', '--abbrev=11', + '--no-show-signature', channel.git_revision], - capture_output=True) + stdout=subprocess.PIPE) v.result(process.returncode == 0 and process.stdout != b'') return '%s-%s' % (os.path.basename(channel.git_repo), process.stdout.decode().strip()) +def read_search_path(conf: configparser.SectionProxy) -> Channel: + return Channel(**dict(conf.items())) + + def read_config(filename: str) -> configparser.ConfigParser: config = configparser.ConfigParser() config.read_file(open(filename), filename) @@ -502,7 +510,7 @@ def pin(args: argparse.Namespace) -> None: if args.channels and section not in args.channels: continue - channel = Channel(**dict(config[section].items())) + channel = read_search_path(config[section]) if hasattr(channel, 'alias_of'): assert not hasattr(channel, 'git_repo') @@ -540,7 +548,7 @@ def fetch_channel( v, conf['tarball_url'], Digest16( conf['tarball_sha256'])) - channel = Channel(**dict(conf.items())) + channel = read_search_path(conf) ensure_git_rev_available(v, channel) return git_get_tarball(v, channel) @@ -602,4 +610,5 @@ def main() -> None: args.func(args) -main() +if __name__ == '__main__': + main()