X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit;h=5754e45676393f15294a16cbc27e79512b8017ec;hb=52174c9a5976b18dc3d2ff020a962a84db35019c;hp=4cc568457a8305b83dfd83024c909d0dd19654fb;hpb=6eed28291838da47e4eeebe9ef440fc91d61ac10;p=dgit.git diff --git a/dgit b/dgit index 4cc56845..5754e456 100755 --- a/dgit +++ b/dgit @@ -379,6 +379,10 @@ sub branch_is_gdr ($) { printdebug "branch_is_gdr $walk ?-octopus NO\n"; return 0; } + if (!@parents) { + printdebug "branch_is_gdr $walk origin\n"; + return 0; + } if ($get_patches->($walk) ne $tip_patches) { # Our parent added, removed, or edited patches, and wasn't # a gdr make-patches commit. gdr make-patches probably @@ -2220,18 +2224,18 @@ sub generate_commits_from_dsc () { printdebug "considering saving $f: "; - if (link $f, $upper_f) { + if (rename_link_xf 1, $f, $upper_f) { printdebug "linked.\n"; - } elsif ((printdebug "($!) "), + } elsif ((printdebug "($@) "), $! != EEXIST) { - fail f_ "saving %s: %s", "$buildproductsdir/$f", $!; + fail f_ "saving %s: %s", "$buildproductsdir/$f", $@; } elsif (!$refetched) { printdebug "no need.\n"; - } elsif (link $f, "$upper_f,fetch") { + } elsif (rename_link_xf 1, $f, "$upper_f,fetch") { printdebug "linked (using ...,fetch).\n"; - } elsif ((printdebug "($!) "), + } elsif ((printdebug "($@) "), $! != EEXIST) { - fail f_ "saving %s: %s", "$buildproductsdir/$f,fetch", $!; + fail f_ "saving %s: %s", "$buildproductsdir/$f,fetch", $@; } else { printdebug "cannot.\n"; } @@ -3813,7 +3817,8 @@ sub pull () { } sub check_not_dirty () { - foreach my $f (qw(local-options local-patch-header)) { + my @forbid = qw(local-options local-patch-header); + foreach my $f (@forbid) { if (stat_exists "debian/source/$f") { fail f_ "git tree contains debian/source/%s", $f; } @@ -4012,7 +4017,7 @@ END sub pseudomerge_make_commit ($$$$ $$) { my ($clogp, $dgitview, $archive_hash, $i_arch_v, $msg_cmd, $msg_msg) = @_; - progress f_ "Declaring that HEAD inciudes all changes in %s...", + progress f_ "Declaring that HEAD includes all changes in %s...", $i_arch_v->[0]; my $tree = cmdoutput qw(git rev-parse), "${dgitview}:"; @@ -4068,7 +4073,7 @@ sub splitbrain_pseudomerge ($$$$) { my $i_arch_v = pseudomerge_version_check($clogp, $archive_hash); if (!defined $overwrite_version) { - progress __ "Checking that HEAD inciudes all changes in archive..."; + progress __ "Checking that HEAD includes all changes in archive..."; } return $dgitview if is_fast_fwd $archive_hash, $dgitview; @@ -4519,11 +4524,11 @@ ENDT if ($sourceonlypolicy eq 'ok') { } elsif ($sourceonlypolicy eq 'always') { forceable_fail [qw(uploading-binaries)], - __ "uploading binaries, although distroy policy is source only" + __ "uploading binaries, although distro policy is source only" if $hasdebs; } elsif ($sourceonlypolicy eq 'never') { forceable_fail [qw(uploading-source-only)], - __ "source-only upload, although distroy policy requires .debs" + __ "source-only upload, although distro policy requires .debs" if !$hasdebs; } elsif ($sourceonlypolicy eq 'not-wholly-new') { forceable_fail [qw(uploading-source-only)], @@ -5499,7 +5504,8 @@ sub quiltify ($$$$) { printdebug "considering C=$c->{Commit} P=$p->{Commit}\n"; my @cmd= (@git, qw(diff-tree -r --name-only), - $p->{Commit},$c->{Commit}, qw(-- debian/patches .pc)); + $p->{Commit},$c->{Commit}, + qw(-- debian/patches .pc debian/source/format)); my $patchstackchange = cmdoutput @cmd; if (length $patchstackchange) { $patchstackchange =~ s/\n/,/g; @@ -5800,7 +5806,9 @@ sub quilt_fixup_singlepatch ($$$) { changedir ".."; runcmd @dpkgsource, qw(-x), (srcfn $version, ".dsc"); rename srcfn("$upstreamversion", "/debian/patches"), - "work/debian/patches"; + "work/debian/patches" + or $!==ENOENT + or confess "install d/patches: $!"; changedir "work"; commit_quilty_patch(); @@ -6562,6 +6570,24 @@ sub build_source { } } else { $leafdir = basename $maindir; + + if ($buildproductsdir ne '..') { + # Well, we are going to run dpkg-source -b which consumes + # origs from .. and generates output there. To make this + # work when the bpd is not .. , we would have to (i) link + # origs from bpd to .. , (ii) check for files that + # dpkg-source -b would/might overwrite, and afterwards + # (iii) move all the outputs back to the bpd (iv) except + # for the origs which should be deleted from .. if they + # weren't there beforehand. And if there is an error and + # we don't run to completion we would necessarily leave a + # mess. This is too much. The real way to fix this + # is for dpkg-source to have bpd support. + confess unless $includedirty; + fail __ + "--include-dirty not supported with --build-products-dir, sorry"; + } + changedir '..'; } runcmd_ordryrun_local @cmd, $leafdir; @@ -6578,8 +6604,8 @@ sub build_source { my $mv = sub { my ($why, $l) = @_; printdebug " renaming ($why) $l\n"; - rename "$l", bpd_abs()."/$l" - or fail f_ "put in place new built file (%s): %s", $l, $!; + rename_link_xf 0, "$l", bpd_abs()."/$l" + or fail f_ "put in place new built file (%s): %s", $l, $@; }; foreach my $l (split /\n/, getfield $dsc, 'Files') { $l =~ m/\S+$/ or next; @@ -6808,7 +6834,7 @@ sub cmd_import_dsc { fail f_ <() if $pre_fn; -record_maindir if $invoked_in_git_tree; +if ($invoked_in_git_tree) { + changedir_git_toplevel(); + record_maindir(); +} git_slurp_config(); my $fn = ${*::}{"cmd_$cmd"};