X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit;h=b0c60c4a86e377b3b047b8a95e8ac47289fb6f15;hb=e473bf523d358431f9eac1356b3807636a951f85;hp=db56b503b14c82e0af53c0051f9b7180c5a7badd;hpb=75581df3d6c82c3727971756a028b7b2a4d97dce;p=dgit.git diff --git a/dgit b/dgit index db56b503..b0c60c4a 100755 --- a/dgit +++ b/dgit @@ -4493,6 +4493,7 @@ END if (madformat_wantfixup($format)) { # user might have not used dgit build, so maybe do this now: if (quiltmode_splitbrain()) { + $do_split_brain = 1; changedir $playground; quilt_make_fake_dsc($upstreamversion); my $cachekey; @@ -4502,17 +4503,22 @@ END "--quilt=%s but no cached dgit view: perhaps HEAD changed since dgit build[-source] ?", $quilt_mode; - $split_brain = 1; - $dgithead = splitbrain_pseudomerge($clogp, - $actualhead, $dgithead, - $archive_hash); - $maintviewhead = $actualhead; - changedir $maindir; - prep_ud(); # so _only_subdir() works, below - } else { + } + if (!$do_split_brain) { + # In split brain mode, do not attempt to incorporate dirty + # stuff from the user's working tree. That would be mad. commit_quilty_patch(); } } + if ($do_split_brain) { + $split_brain = 1; + $dgithead = splitbrain_pseudomerge($clogp, + $actualhead, $dgithead, + $archive_hash); + $maintviewhead = $actualhead; + changedir $maindir; + prep_ud(); # so _only_subdir() works, below + } if (defined $overwrite_version && !defined $maintviewhead && $archive_hash) { @@ -5394,10 +5400,7 @@ sub quiltify_splitbrain ($$$$$$$) { local $ENV{GIT_AUTHOR_EMAIL} = $authline[1]; local $ENV{GIT_AUTHOR_DATE} = $authline[2]; - die if $split_brain; die unless $do_split_brain; - runcmd @git, qw(checkout -q -b dgit-view); - $split_brain = 1; my $fulldiffhint = sub { my ($x,$y) = @_; @@ -5847,12 +5850,18 @@ END } } -sub unpack_playtree_mkwork ($) { +sub unpack_playtree_need_cd_work ($) { my ($headref) = @_; - mkdir "work" or confess "$!"; - changedir "work"; - mktree_in_ud_here(); + # prep_ud() must have been called already. + if (!chdir "work") { + # Check in the filesystem because sometimes we run prep_ud + # in between multiple calls to unpack_playtree_need_cd_work. + confess "$!" unless $!==ENOENT; + mkdir "work" or confess "$!"; + changedir "work"; + mktree_in_ud_here(); + } runcmd @git, qw(reset -q --hard), $headref; } @@ -5901,7 +5910,7 @@ sub quilt_fixup_singlepatch ($$$) { # necessary to build the source package. unpack_playtree_linkorigs($upstreamversion, sub { }); - unpack_playtree_mkwork($headref); + unpack_playtree_need_cd_work($headref); rmtree("debian/patches"); @@ -6023,7 +6032,7 @@ sub quilt_check_splitbrain_cache ($$) { "refs/$splitbraincache", $splitbrain_cachekey; if ($cachehit) { - unpack_playtree_mkwork($headref); + unpack_playtree_need_cd_work($headref); my $saved = maybe_split_brain_save $headref, $cachehit, "cache-hit"; if ($cachehit ne $headref) { progress f_ "dgit view: found cached (%s)", $saved; @@ -6142,7 +6151,7 @@ END changedir '..'; - unpack_playtree_mkwork($headref); + unpack_playtree_need_cd_work($headref); my $mustdeletepc=0; if (stat_exists ".pc") { @@ -6219,6 +6228,11 @@ END push @failsuggestion, [ 'origs', __ "Maybe orig tarball(s) are not identical to git representation?" ]; + if ($do_split_brain) { + runcmd @git, qw(checkout -q -b dgit-view); + die if $split_brain; + $split_brain = 1; + } if (quiltmode_splitbrain()) { quiltify_splitbrain($clogp, $unapplied, $headref, $oldtiptree, $diffbits, \%editedignores, @@ -6714,7 +6728,7 @@ sub build_source { unless ($split_brain) { my $upstreamversion = upstreamversion $version; unpack_playtree_linkorigs($upstreamversion, sub { }); - unpack_playtree_mkwork($headref); + unpack_playtree_need_cd_work($headref); changedir '..'; } } else {