소스 검색

dpkg-buildpackage: Recompute checksum hashes for dsc file after signing

Missed in commit 31b73ef0056b6c94a257ba3f1fb111b5aed3aa4e.
Guillem Jover 12 년 전
부모
커밋
cd1cdfa01d
1개의 변경된 파일20개의 추가작업 그리고 2개의 파일을 삭제
  1. 20 2
      scripts/dpkg-buildpackage.pl

+ 20 - 2
scripts/dpkg-buildpackage.pl

@@ -34,6 +34,7 @@ use Dpkg::ErrorHandling;
 use Dpkg::BuildOptions;
 use Dpkg::BuildProfiles qw(set_build_profiles);
 use Dpkg::Compression;
+use Dpkg::Checksums;
 use Dpkg::Version;
 use Dpkg::Control;
 use Dpkg::Changelog::Parse;
@@ -511,8 +512,25 @@ if ($signpause && ($signchanges || $signsource)) {
     getc();
 }
 
-if ($signsource && signfile("$pv.dsc")) {
-    error(_g('failed to sign .dsc and .changes file'));
+if ($signsource) {
+    if (signfile("$pv.dsc")) {
+        error(_g('failed to sign .dsc and .changes file'));
+    }
+
+    # Recompute the checksums as the .dsc has changed now.
+    my $checksums = Dpkg::Checksums->new();
+    $checksums->add_from_control($changes);
+    $checksums->add_from_file("../$pv.dsc", update => 1, key => "$pv.dsc");
+    $checksums->export_to_control($changes);
+    delete $changes->{'Checksums-Md5'};
+
+    my $md5sum_regex = checksums_get_property('md5', 'regex');
+    my $dsc_md5sum = $checksums->get_checksum("$pv.dsc", 'md5');
+    my $dsc_size = $checksums->get_size("$pv.dsc");
+    my $dsc_files_regex = qr/$md5sum_regex\s+\d+\s+(\S+\s+\S+\s+$pv\.dsc)/;
+    $changes->{'Files'} =~ s/^$dsc_files_regex$/$dsc_md5sum $dsc_size $1/m;
+
+    $changes->save($chg);
 }
 if ($signchanges && signfile("$pva.changes")) {
     error(_g('failed to sign .changes file'));