chiark / gitweb /
dgit: getfield, parsechangelog: Fix two bugs in error reporting
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 4e31605adbf711c3c68232f17085d3eb2b586841..54337f73a20cb2d8c61c74326e8b68f81730c59e 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -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 $!;
@@ -2412,23 +2412,32 @@ sub pseudomerge_version_check ($$) {
     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 ? ""
+       : " --overwrite=".$overwrite_version;
+
     mkpath '.git/dgit';
     my $pmf = ".git/dgit/pseudomerge";
     open MC, ">", $pmf or die "$pmf $!";
-    print MC <<END, $msg or die $!;
+    print MC <<END or die $!;
 tree $tree
 parent $dgitview
 parent $archive_hash
 author $authline
 commiter $authline
 
+$msg_msg
+
+[$msg_cmd]
 END
     close MC or die $!;
 
@@ -2477,14 +2486,11 @@ sub splitbrain_pseudomerge ($$$$) {
 
     my $r = pseudomerge_make_commit
        $clogp, $dgitview, $archive_hash, $i_arch_v,
+       "dgit --quilt=$quilt_mode",
        (defined $overwrite_version ? <<END_OVERWR : <<END_MAKEFF);
 Declare fast forward from $overwrite_version
-
-[dgit --quilt=$quilt_mode --overwrite-version=$overwrite_version]
 END_OVERWR
 Make fast forward from $i_arch_v->[0]
-
-[dgit --quilt=$quilt_mode]
 END_MAKEFF
 
     progress "Made pseudo-merge of $i_arch_v->[0] into dgit view.";
@@ -2500,7 +2506,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 +2516,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, <<END;
-$m
-
-[dgit --overwrite-version=$overwrite_version]
-END
+       $clogp, $head, $archive_hash, $i_arch_v,
+       "dgit", $m;
 
     runcmd @git, qw(update-ref -m), $m, 'HEAD', $r, $head;