Różnicowanie różnych wersji tego samego pakietu Debian

11

Czy jest jakiś sposób na uzyskanie różnic źródłowych między lokalnie instalowanym pakietem a jego zaktualizowanym pakietem? Przyda się to do sprawdzenia, które części zostały naprawione, zmienione lub dodane.

Załóżmy na przykład, że masz zainstalowany pakiet linux-libc-dev w swoim systemie i

sudo apt-get update && sudo apt-get upgrade

przedstawia

The following packages will be upgraded:
  linux-libc-dev 

ale przed aktualizacją chcesz sprawdzić, jakie dokładnie zmiany zostały wprowadzone w porównaniu z lokalną wersją tego samego pakietu.

Jak możemy to zrobić?

Gödel
źródło

Odpowiedzi:

5

Oto inne rozwiązanie, które razem zhackowałem : zmieniłem .

Jako jedyny argument przyjmuje nazwę interesującego Cię pakietu binarnego. Aby użyć najnowszej wersji SRU jako przykładu:

./whatchanged python_papyon

Oto, co robi:

  1. Sprawdź, czy jest kandydat na aktualizację; wyjdź, jeśli nie ma
  2. Jeśli kandydat istnieje, utwórz katalogi tymczasowe i pobierz do nich pakiety źródłowe dla zainstalowanej wersji i kandydata
  3. Porównaj dwa z debdiffwyjściem na standardowe wyjście (prawdopodobnie będziesz chciał przekierować dla łatwiejszego czytania)
  4. Oczyść katalogi tymczasowe.

Prawdopodobnie musi lepiej radzić sobie z niektórymi rzeczami, które mogą się nie udać podczas pobierania źródła, kontrola przepływu jest prawdopodobnie trochę wyłączona i muszą być bardziej eleganckie sposoby sprawdzania wersji, ale jak dotąd działało dobrze w moich ograniczonych testach. Na razie rozważ to szybki hack, który działa, a ulepszenia są mile widziane. Przepchnę go do repozytorium bzr i / lub utworzę projekt Launchpad, jeśli jest przydatny dla kilku osób.

Edycja : Zamiast pozwolić, aby gniło na pastebin, rozpocząłem dla niego projekt Launchpad ; możesz uzyskać najnowszą wersję pnia za pomocą bzr branch lp:whatchanged. Możesz zgłaszać błędy, rozgałęziać je, przepisywać w Perlu itp.

mgunes
źródło
Jak miło! Opracowywanie narzędzi jako odpowiedzi;) Podobnie jak ty
kodujesz
Dzięki; mam nadzieję, że się przyda. Sposób, w jaki specyfikacje dotyczące pakowania i wydawania czasami sprawiają, że otwarty kod wydaje się nieprzejrzysty, jest moim pomysłem i nie znalazłem żadnych prostych narzędzi do pokonania tego, więc ktoś wyrażający potrzebę dokładnie tego samego był dobrą motywacją, aby w końcu sam stwórz prymitywny.
mgunes
7

Afaik jedynym sposobem na zrobienie tego jest zdobycie źródła i uczynienie diff sobą. Możesz pobrać rzeczywiste źródło używane do kompilacji pakietów za pomocą apt-get. FX:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

Spowoduje to wydrukowanie wszystkich różnic między wszystkimi plikami w standardowym formacie poprawki.

LassePoulsen
źródło
1
To całkiem nieźle. Jedyną rzeczą, którą zmienię w tym przykładzie, jest użycie „debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc” zamiast surowego diff.
RAOF
1
Cóż, robi to praktycznie to samo, ale możesz użyć diff na każdym pakiecie / tarballu. Może ktoś chce zobaczyć różnicę między bagażnikiem svn a bieżącym pkg.
LassePoulsen
Moja druga odpowiedź (zmieniona) zasadniczo to automatyzuje.
mgunes
2

Oto jeden (prawdopodobnie nie optymalny) sposób UDD :

Pull-updates gałąź dla twojego wydania (zakładając Lucid), że (założenie jest następujące) powinien zawierać najnowszy SRU:

bzr branch lp:ubuntu/lucid-updates/package_name

Uzyskaj zmiany wprowadzone przez najnowszą wersję, która (założenie jest następujące) powinna odpowiadać najnowszej wersji SRU:

bzr diff -c`bzr revno`
mgunes
źródło
2
Hmm Jest to interesujące ujęcie, choć prawdopodobnie jest mniej kompleksowe niż w Source Lab w tym sensie, że nazwy pakietów mogą nie pasować do drzewa źródłowego bzr lub istnieć w nim.
Gödel,
Dopóki znasz nazwę pakietu źródłowego, będzie pasować. Możesz dowiedzieć się, z którego pakietu źródłowego jest tworzony pakiet binarny apt-cache show package_name | grep Source:.
mgunes
@Murat Cóż, <package_name>tak uzyskane nie działa na niektórych pakietach: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ERROR: Podano nieprawidłowy adres URL do transportu: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : brak obsługiwanych programów
Gödel,
To dlatego, że nie ma żadnych gałęzi Ubuntu dla jądra. Może to być szczególny wyjątek ze względu na fakt, że jądro jest utrzymywane w git (kernel.ubuntu.com), ale obecnie nie jestem pewien dokładnego zakresu gałęzi pakietów bzr. Możesz zapytać na # ubuntu-devel.
mgunes
@ Mural Wiem. Dlatego metoda jest mniej kompleksowa niż metoda Source Lab. Ale znowu jest to interesujące ujęcie.
Gödel,
0

Jeśli chcesz zobaczyć różnice w plikach w archiwach pakietów, wypakuj ich pliki md5sums, posortuj je i różnicuj, a następnie możesz zawęzić listę rzeczywistych plików, aby je dramatycznie porównać.

Phil Miller
źródło
-1

Może nie być to „dokładne” zmiany, ale apt-listchangeszawiera listę wpisów w dzienniku zmian dla zmian, które zostały wprowadzone od czasu zainstalowania wersji.

Działa, dodając krok po zakończeniu pobierania nowych pakietów, ale przed rozpoczęciem instalacji, gdzie pokazuje pozycję dziennika zmian dla każdego pakietu, który ma zostać zaktualizowany. Następnie możesz kontynuować lub anulować. Możesz go zainstalować za pomocą

sudo apt-get install apt-listchanges

następnie skonfiguruj za pomocą

sudo dpkg-reconfigure apt-listchanges
Ken Simon
źródło
Ponownie pytanie nie dotyczy wyświetlania zmian w dzienniku zmian.
Gödel,
D'oh, przegapiłem pierwszy wiersz, w którym powiedziałeś „Różnice źródła”.
Ken Simon