示例#1
0
def test_get_distributions():
    env = NicemanProvenance(multi_debian_yaml).get_environment()
    with raises(ValueError):
        env.get_distribution(DebianDistribution)
    dist = env.get_distribution(CondaDistribution)
    assert dist is None
    env = NicemanProvenance(diff_1_yaml).get_environment()
    dist = env.get_distribution(DebianDistribution)
    assert isinstance(dist, DebianDistribution)
示例#2
0
    def __call__(prov1, prov2):

        env_1 = NicemanProvenance(prov1).get_environment()
        env_2 = NicemanProvenance(prov2).get_environment()

        for (dist_type, pkg_type) in ((DebianDistribution, "Debian package"), 
                                      (CondaDistribution, "Conda package")):

            dist_1 = env_1.get_distribution(dist_type)
            if dist_1:
                pkgs_1 = { p._cmp_id: p for p in dist_1.packages }
            else:
                pkgs_1 = {}
            dist_2 = env_2.get_distribution(dist_type)
            if dist_2:
                pkgs_2 = { p._cmp_id: p for p in dist_2.packages }
            else:
                pkgs_2 = {}

            pkgs_1_s = set(pkgs_1)
            pkgs_2_s = set(pkgs_2)
    
            pkgs_only_1 = pkgs_1_s - pkgs_2_s
            pkgs_only_2 = pkgs_2_s - pkgs_1_s
    
            if pkgs_only_1 or pkgs_only_2:
                print(pkg_type + 's:')
            if pkgs_only_1:
                for cmp_key in sorted(pkgs_only_1):
                    package = pkgs_1[cmp_key]
                    print('< %s %s' % (" ".join(cmp_key), package.version))
            if pkgs_only_2 and pkgs_only_2:
                print('---')
            if pkgs_only_2:
                for cmp_key in sorted(pkgs_only_2):
                    package = pkgs_2[cmp_key]
                    print('> %s %s' % (" ".join(cmp_key), package.version))
    
            for cmp_key in pkgs_1_s.intersection(pkgs_2_s):
                package_1 = pkgs_1[cmp_key]
                package_2 = pkgs_2[cmp_key]
                if package_1.version != package_2.version:
                    print('%s %s:' % (pkg_type, " ".join(cmp_key)))
                    print('< %s' % package_1.version)
                    print('---')
                    print('> %s' % package_2.version)

        for (dist_type, repo_type) in ((GitDistribution, 'Git'), 
                                       (SVNDistribution, 'SVN')):

            dist_1 = env_1.get_distribution(dist_type)
            if dist_1:
                repos_1 = { p.identifier: p for p in dist_1.packages }
            else:
                repos_1 = {}
            dist_2 = env_2.get_distribution(dist_type)
            if dist_2:
                repos_2 = { p.identifier: p for p in dist_2.packages }
            else:
                repos_2 = {}

            repos_1_s = set(repos_1)
            repos_2_s = set(repos_2)

            repos_1_only = repos_1_s - repos_2_s
            repos_2_only = repos_2_s - repos_1_s

            if repos_1_only or repos_2_only:
                print('%s repositories:' % repo_type)
            if repos_1_only:
                for repo_id in repos_1_only:
                    repo = repos_1[repo_id]
                    print('< %s (%s)' % (repo.identifier, repo.path))
            if repos_1_only and repos_2_only:
                print('---')
            if repos_2_only:
                for repo_id in repos_2_only:
                    repo = repos_2[repo_id]
                    print('> %s (%s)' % (repo.identifier, repo.path))

            for repo_id in repos_1_s.intersection(repos_2_s):
                repo_1 = repos_1[repo_id]
                repo_2 = repos_2[repo_id]
                if repo_1.commit == repo_2.commit:
                    continue
                print('%s repository %s:' % (repo_type, repo_id))
                print('< %s (%s)' % (repo_1.commit, repo_1.path))
                print('---')
                print('> %s (%s)' % (repo_2.commit, repo_2.path))

        files1 = set(env_1.files)
        files2 = set(env_2.files)
    
        files_1_only = files1 - files2
        files_2_only = files2 - files1
    
        if files_1_only or files_2_only:
            print('Files:')
            for fname in files_1_only:
                print('< %s' % fname)
            if files_1_only and files_2_only:
                print('---')
            for fname in files_2_only:
                print('> %s' % fname)

        return