X-Git-Url: http://git.scottworley.com/pinch/blobdiff_plain/d5abffb3c868e3cf98e565a1e158eeaa333292d1..02f83340ee894eae5a661870c2af377abf8a195b:/pinch.py diff --git a/pinch.py b/pinch.py index bc9ba3b..bda7633 100644 --- a/pinch.py +++ b/pinch.py @@ -266,15 +266,29 @@ def parse_channel(v: Verification, channel_html: str) \ d = xml.dom.minidom.parseString(channel_html) v.ok() - v.status('Extracting release name:') - title_name = d.getElementsByTagName( - 'title')[0].firstChild.nodeValue.split()[2] - h1_name = d.getElementsByTagName('h1')[0].firstChild.nodeValue.split()[2] - v.status(title_name) - v.result(title_name == h1_name) - - v.status('Extracting git commit:') + v.status('Finding release name (1)') + title = d.getElementsByTagName('title')[0].firstChild + v.result(isinstance(title, xml.dom.minidom.CharacterData)) + assert isinstance(title, xml.dom.minidom.CharacterData) + release_name = title.nodeValue.split()[2] + v.status('Finding release name (2)') + h1 = d.getElementsByTagName('h1')[0].firstChild + v.result(isinstance(h1, xml.dom.minidom.CharacterData)) + assert isinstance(h1, xml.dom.minidom.CharacterData) + v.status('Verifying release name:') + v.status(release_name) + v.result(release_name == h1.nodeValue.split()[2]) + + v.status('Finding git commit') git_commit_node = d.getElementsByTagName('tt')[0] + v.result( + isinstance( + git_commit_node.firstChild, + xml.dom.minidom.CharacterData)) + assert isinstance( + git_commit_node.firstChild, + xml.dom.minidom.CharacterData) + v.status('Extracting git commit:') git_revision = git_commit_node.firstChild.nodeValue v.status(git_revision) v.ok() @@ -290,7 +304,7 @@ def parse_channel(v: Verification, channel_html: str) \ digest = Digest16(row.childNodes[2].firstChild.firstChild.nodeValue) table[name] = ChannelTableEntry(url=url, digest=digest, size=size) v.ok() - return table, GitPin(release_name=title_name, git_revision=git_revision) + return table, GitPin(release_name=release_name, git_revision=git_revision) def digest_string(s: bytes) -> Digest16: @@ -417,15 +431,28 @@ def compare_tarball_and_git( 'nixpkgs', 'programs.sqlite', 'svn-revision'] - benign_errors = [] + permitted_errors = [ + 'pkgs/test/nixpkgs-check-by-name/tests/symlink-invalid/pkgs/by-name/fo/foo/foo.nix', + ] + benign_expected_errors = [] + benign_permitted_errors = [] for ee in expected_errors: if ee in errors: errors.remove(ee) - benign_errors.append(ee) - v.check(f'{len(errors)} unexpected incomparable files', len(errors) == 0) + benign_expected_errors.append(ee) + for pe in permitted_errors: + if pe in errors: + errors.remove(pe) + benign_permitted_errors.append(ee) + v.check( + f'{len(errors)} unexpected incomparable files: {errors}', + len(errors) == 0) + v.check( + f'({len(benign_expected_errors)} of {len(expected_errors)} expected incomparable files)', + len(benign_expected_errors) == len(expected_errors)) v.check( - f'({len(benign_errors)} of {len(expected_errors)} expected incomparable files)', - len(benign_errors) == len(expected_errors)) + f'({len(benign_permitted_errors)} of {len(permitted_errors)} permitted incomparable files)', + len(benign_permitted_errors) <= len(permitted_errors)) def extract_tarball( @@ -585,7 +612,7 @@ def read_pinned_config_section( section: str, conf: configparser.SectionProxy) -> Tuple[SearchPath, Pin]: sp, pin = read_config_section(conf) if pin is None: - raise Exception( + raise RuntimeError( f'Cannot update unpinned channel "{section}" (Run "pin" before "update")') return sp, pin @@ -604,7 +631,7 @@ def read_config_files( config = read_config(file) for section in config.sections(): if section in merged_config: - raise Exception('Duplicate channel "{section}"') + raise RuntimeError('Duplicate channel "{section}"') merged_config[section] = config[section] return merged_config