Como exibir duplicatas entre dois repositórios

1

Eu tenho 2 repos no local. Uma é uma cópia do Squeeze e outra é uma custom, e é gerenciada pelo reprepro. Existem ferramentas prontas que gerariam uma lista de pacotes duplicados entre os dois?

    
por Tshepang 23.09.2010 / 15:49

2 respostas

0

Bobo, tenho estado sentado em um roteiro que torna isso muito mais rápido e fácil:

#!/usr/bin/python3

import os
import gzip
import apt_pkg

repo1 = "~/.repo_local/dists/cache/main/binary-i386/Packages.gz"
repo1 = os.path.expanduser(repo1)
repo1 = apt_pkg.TagFile(gzip.open(repo1, "rb"))
repo1 = dict([(pkg["Package"], pkg["Version"]) for pkg in repo1])

repo2 = "~/.repo_bin/dists/squeeze/main/binary-i386/Packages.gz"
repo2 = os.path.expanduser(repo2)
repo2 = apt_pkg.TagFile(gzip.open(repo2, "rb"))
repo2 = dict([(pkg["Package"], pkg["Version"]) for pkg in repo2])

apt_pkg.init_system()
found = False

for pkg in repo1:
    if pkg in repo2:
        vc = apt_pkg.version_compare(repo1[pkg], repo2[pkg])
        if vc == 0:
            print("{:<30}{:<30}({})".format(repo1[pkg], repo2[pkg], pkg))
            found = True

if found:
    print("=" * 90)
    print("{:<30}{:<30}({})".format("custom", "official", "package name"))
else:
    print("nothing matching search criteria found")
    
por 01.05.2011 / 23:39
4

Você pode concordar com fdupes que usa md5sum para comparar arquivos e permite a exclusão de duplicatas. Eu não sei o suficiente sobre os repositórios do Debian, então você provavelmente terá que remover esses arquivos de algum registro de pacotes também (acho que existe um arquivo chamado packages.gz ou similar em cada repositório).

Então, o que você deve fazer:

  1. Use fdupes para gerar uma lista de duplicatas
  2. use essa lista para eliminar pacotes das informações do repositório
  3. exclua os arquivos reais
por 23.09.2010 / 16:15