X-Git-Url: http://git.scottworley.com/pinch/blobdiff_plain/ba596fc0a680ccf113b880d72ab873b56c13f530..faff8642d1b68a819a41186ec720a0f00f43f712:/pinch.py?ds=sidebyside diff --git a/pinch.py b/pinch.py index b761313..a8af6a6 100644 --- a/pinch.py +++ b/pinch.py @@ -38,31 +38,6 @@ xdg = XDG( os.path.expanduser('~/.cache'))) -Digest16 = NewType('Digest16', str) -Digest32 = NewType('Digest32', str) - - -class ChannelTableEntry(types.SimpleNamespace): - absolute_url: str - digest: Digest16 - file: str - size: int - url: str - - -class Channel(types.SimpleNamespace): - alias_of: str - channel_html: bytes - channel_url: str - forwarded_url: str - git_ref: str - git_repo: str - git_revision: str - old_git_revision: str - release_name: str - table: Dict[str, ChannelTableEntry] - - class VerificationError(Exception): pass @@ -98,6 +73,34 @@ class Verification: self.result(True) +Digest16 = NewType('Digest16', str) +Digest32 = NewType('Digest32', str) + + +class ChannelTableEntry(types.SimpleNamespace): + absolute_url: str + digest: Digest16 + file: str + size: int + url: str + + +class SearchPath(types.SimpleNamespace): + release_name: str + + +class Channel(SearchPath): + alias_of: str + channel_html: bytes + channel_url: str + forwarded_url: str + git_ref: str + git_repo: str + git_revision: str + old_git_revision: str + table: Dict[str, ChannelTableEntry] + + def compare(a: str, b: str) -> Tuple[List[str], List[str], List[str]]: def throw(error: OSError) -> None: @@ -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) @@ -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: @@ -423,7 +426,7 @@ def git_get_tarball(v: Verification, channel: Channel) -> str: 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,6 +485,7 @@ def git_revision_name(v: Verification, channel: Channel) -> str: '-n1', '--format=%ct-%h', '--abbrev=11', + '--no-show-signature', channel.git_revision], stdout=subprocess.PIPE) v.result(process.returncode == 0 and process.stdout != b'') @@ -489,6 +493,10 @@ def git_revision_name(v: Verification, channel: Channel) -> str: 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()