diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2019-05-26 12:31:11 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2019-06-28 12:45:38 +0100 |
commit | e473bf523d358431f9eac1356b3807636a951f85 (patch) | |
tree | 8cb0ae5b3253cb1ae5b3f867c58782fc6bcfbb11 /dgit | |
parent | 5307140c7bb2a71334522ed0d88e78efcaa210be (diff) |
dgit: unpack_playtree_need_cd_work: Make idempotent
This won't be able to recover from a truly-messed-up "work" but this
is good enough not to have to explicitly arrange for each place that
uses it to know whether it has been done already.
Checking in the filesystem is OK because mktree_in_ud_here calls
playtree_setup which expects the playground to have been set up
already - ie, all our callers have called prep_ud already.
Add a comment about this requirement.
No overall functional change.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'dgit')
-rwxr-xr-x | dgit | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -5850,12 +5850,18 @@ END } } -sub unpack_playtree_mk_cd_work ($) { +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; } @@ -5904,7 +5910,7 @@ sub quilt_fixup_singlepatch ($$$) { # necessary to build the source package. unpack_playtree_linkorigs($upstreamversion, sub { }); - unpack_playtree_mk_cd_work($headref); + unpack_playtree_need_cd_work($headref); rmtree("debian/patches"); @@ -6026,7 +6032,7 @@ sub quilt_check_splitbrain_cache ($$) { "refs/$splitbraincache", $splitbrain_cachekey; if ($cachehit) { - unpack_playtree_mk_cd_work($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; @@ -6145,7 +6151,7 @@ END changedir '..'; - unpack_playtree_mk_cd_work($headref); + unpack_playtree_need_cd_work($headref); my $mustdeletepc=0; if (stat_exists ".pc") { @@ -6722,7 +6728,7 @@ sub build_source { unless ($split_brain) { my $upstreamversion = upstreamversion $version; unpack_playtree_linkorigs($upstreamversion, sub { }); - unpack_playtree_mk_cd_work($headref); + unpack_playtree_need_cd_work($headref); changedir '..'; } } else { |