X-Git-Url: http://git.scottworley.com/pinch/blobdiff_plain/b7ef1dd6ddcede847ace6ab25fe05cf728cc6a44..37f44333dcd4edce790e94809d6fed6cc1080e20:/pinch.py diff --git a/pinch.py b/pinch.py index e20d5d1..9e80c01 100644 --- a/pinch.py +++ b/pinch.py @@ -414,14 +414,24 @@ def verify_git_ancestry( v.result(process.returncode == 0) +def broken_symlinks_are_identical(root1: str, root2: str, path: str) -> bool: + a = os.path.join(root1, path) + b = os.path.join(root2, path) + return (os.path.islink(a) + and os.path.islink(b) + and not os.path.exists(a) + and not os.path.exists(b) + and os.readlink(a) == os.readlink(b)) + + def compare_tarball_and_git( v: Verification, pin: GitPin, channel_contents: str, git_contents: str) -> None: v.status('Comparing channel tarball with git checkout') - match, mismatch, errors = compare(os.path.join( - channel_contents, pin.release_name), git_contents) + tarball_contents = os.path.join(channel_contents, pin.release_name) + match, mismatch, errors = compare(tarball_contents, git_contents) v.ok() v.check(f'{len(match)} files match', len(match) > 0) v.check(f'{len(mismatch)} files differ', len(mismatch) == 0) @@ -431,30 +441,21 @@ def compare_tarball_and_git( 'nixpkgs', 'programs.sqlite', 'svn-revision'] - permitted_errors = [ - 'pkgs/test/nixpkgs-check-by-name/tests/multiple-failures/pkgs/by-name/A/fo@/foo', - 'pkgs/test/nixpkgs-check-by-name/tests/symlink-invalid/pkgs/by-name/fo/foo/foo', - '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_expected_errors.append(ee) - for pe in permitted_errors: - if pe in errors: - errors.remove(pe) - benign_permitted_errors.append(ee) + errors = [ + e for e in errors + if not broken_symlinks_are_identical(tarball_contents, git_contents, e) + ] 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_permitted_errors)} of {len(permitted_errors)} permitted incomparable files)', - len(benign_permitted_errors) <= len(permitted_errors)) def extract_tarball(