X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit;h=5a3736302e9732f230b17b0c23a4e4df365547fb;hb=dddd5aa973ab883be5edae00c1f9659132f908ce;hp=2bd938e5a1149017413ce7ee2d2015afe6c855e4;hpb=6a009a8fe0fa46c0d92d51300566c7afcf21ed2e;p=dgit.git diff --git a/dgit b/dgit index 2bd938e5..5a373630 100755 --- a/dgit +++ b/dgit @@ -63,7 +63,7 @@ our $existing_package = 'dpkg'; our $cleanmode; our $changes_since_version; our $rmchanges; -our $overwrite_version; +our $overwrite_version; # undef: not specified; '': check changelog our $quilt_mode; our $quilt_modes_re = 'linear|smash|auto|nofix|nocheck|gbp|dpm|unapplied'; our $we_are_responder; @@ -872,11 +872,11 @@ sub getfield ($$) { my ($dctrl,$field) = @_; my $v = $dctrl->{$field}; return $v if defined $v; - fail "missing field $field in ".$v->get_option('name'); + fail "missing field $field in ".$dctrl->get_option('name'); } sub parsechangelog { - my $c = Dpkg::Control::Hash->new(); + my $c = Dpkg::Control::Hash->new(name => 'parsed changelog'); my $p = new IO::Handle; my @cmd = (qw(dpkg-parsechangelog), @_); open $p, '-|', @cmd or die $!; @@ -2404,31 +2404,59 @@ sub pseudomerge_version_check ($$) { my $i_arch_v = [ (getfield $arch_clogp, 'Version'), 'version currently in archive' ]; if (defined $overwrite_version) { - infopair_cond_equal([ $overwrite_version, '--overwrite= version' ], - $i_arch_v); + if (length $overwrite_version) { + infopair_cond_equal([ $overwrite_version, + '--overwrite= version' ], + $i_arch_v); + } else { + my $v = $i_arch_v->[0]; + progress "Checking package changelog for archive version $v ..."; + eval { + my @xa = ("-f$v", "-t$v"); + my $vclogp = parsechangelog @xa; + my $cv = [ (getfield $vclogp, 'Version'), + "Version field from dpkg-parsechangelog @xa" ]; + infopair_cond_equal($i_arch_v, $cv); + }; + if ($@) { + $@ =~ s/^dgit: //gm; + fail "$@". + "Perhaps debian/changelog does not mention $v ?"; + } + } } printdebug "pseudomerge_version_check i_arch_v @$i_arch_v\n"; return $i_arch_v; } -sub pseudomerge_make_commit ($$$$$) { - my ($clogp, $dgitview, $archive_hash, $i_arch_v, $msg) = @_; +sub pseudomerge_make_commit ($$$$ $$) { + my ($clogp, $dgitview, $archive_hash, $i_arch_v, + $msg_cmd, $msg_msg) = @_; progress "Declaring that HEAD inciudes all changes in $i_arch_v->[0]..."; my $tree = cmdoutput qw(git rev-parse), "${dgitview}:"; my $authline = clogp_authline $clogp; + chomp $msg_msg; + $msg_cmd .= + !defined $overwrite_version ? "" + : !length $overwrite_version ? " --overwrite" + : " --overwrite=".$overwrite_version; + mkpath '.git/dgit'; my $pmf = ".git/dgit/pseudomerge"; open MC, ">", $pmf or die "$pmf $!"; - print MC <[0] - -[dgit --quilt=$quilt_mode] END_MAKEFF progress "Made pseudo-merge of $i_arch_v->[0] into dgit view."; @@ -2500,7 +2525,7 @@ sub plain_overwrite_pseudomerge ($$$) { my @tagformats = access_cfg_tagformats(); my @t_overwr = - map { $_->($overwrite_version, access_basedistro) } + map { $_->($i_arch_v->[0], access_basedistro) } (grep { m/^(?:old|hist)$/ } @tagformats) ? \&debiantags : \&debiantag_new; my $i_overwr = infopair_lrf_tag_lookup \@t_overwr, "previous version tag"; @@ -2510,14 +2535,11 @@ sub plain_overwrite_pseudomerge ($$$) { return $head if is_fast_fwd $archive_hash, $head; - my $m = "Declare fast forward from $overwrite_version"; + my $m = "Declare fast forward from $i_arch_v->[0]"; my $r = pseudomerge_make_commit - $clogp, $head, $archive_hash, $i_arch_v, <