web-dev-qa-db-ja.com

同じdebianパッケージの異なるバージョンを比較する

ローカルにインストールされたパッケージと更新されたパッケージのソースの差分を取得する方法はありますか?これは、修正、変更、または追加されたパーツを正確に確認するのに役立ちます。

たとえば、システムにlinux-libc-devパッケージがインストールされていて、

Sudo apt-get update && Sudo apt-get upgrade

ショー

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

ただし、アップグレードする前に、同じパッケージのローカルバージョンと比較して行われた正確な変更を確認する必要があります。

どうすればできますか?

11
Gödel

これが私が一緒にハッキングした別のソリューションです: whatchanged

関心のあるバイナリパッケージの名前を唯一の引数として受け取ります。例として最近のSRUを使用するには:

./whatchanged python_papyon

これはそれがすることです:

  1. 更新候補があるかどうかを確認します。ない場合は終了します
  2. 候補が存在する場合、一時ディレクトリを作成し、インストールされているバージョンと候補の両方のソースパッケージをフェッチします。
  3. 2つをdebdiffと比較し、stdoutに出力します(おそらく、読みやすくするためにリダイレクトする必要があります)。
  4. 一時ディレクトリをクリーンアップします。

おそらく、ソースの取得中に問題が発生する可能性がある特定の処理をより適切に処理する必要があり、フロー制御はおそらく少しずれており、バージョンチェックにはより洗練された方法が必要ですが、これまでの限られたテストでは問題なく機能しました。今のところ、それが機能する簡単なハックであると考えてください。それをbzrリポジトリーにプッシュしたり、少数のユーザーにとって便利な場合はLaunchpadプロジェクトを作成したりします。

Edit:Pastebinで腐らせるのではなく、私は Launchpadプロジェクト を開始しました。 bzr branch lp:whatchangedを使用すると、最新のトランクリビジョンを取得できます。 report バグを自由に感じ、ブランチし、Perlで書き直すなどしてください。

5
mgunes

Afaikがこれを行う唯一の方法は、ソースを取得して差分を自分のものにすることです。パッケージのコンパイルに使用される実際のソースは、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/

これにより、すべてのファイル間のすべての違いが標準のパッチ形式で出力されます。

7
LassePoulsen

ここに1つあります(おそらく最適ではありません) [〜#〜] udd [〜#〜] 実行方法:

最新のSRUが含まれている(前提条件は次のとおりです)リリースのプル-updatesブランチ(Lucidを想定):

bzr branch lp:ubuntu/lucid-updates/package_name

最新のリビジョンによって導入された変更を取得します。これは(前提は以下のとおり)最新のSRUに対応している必要があります。

bzr diff -c`bzr revno`
2
mgunes

パッケージアーカイブ内のファイルの違いを確認するには、それらのmd5sumsファイルを抽出し、それらを並べ替えて比較してから、実際のファイルのリストを絞り込んで、劇的に比較できます。

0
Phil Miller