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;
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 $!;
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";
chomp $msg_msg;
$msg_cmd .=
!defined $overwrite_version ? ""
+ : !length $overwrite_version ? " --overwrite"
: " --overwrite=".$overwrite_version;
mkpath '.git/dgit';
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";
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,
} elsif (m/^--no-rm-on-error$/s) {
push @ropts, $_;
$rmonerror = 0;
- } elsif (m/^--overwrite=(.*)$/s) {
+ } elsif (m/^--overwrite$/s) {
+ push @ropts, $_;
+ $overwrite_version = '';
+ } elsif (m/^--overwrite=(.+)$/s) {
push @ropts, $_;
$overwrite_version = $1;
} elsif (m/^--(no-)?rm-old-changes$/s) {