summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2019-05-26 12:31:11 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2019-06-28 12:45:38 +0100
commite473bf523d358431f9eac1356b3807636a951f85 (patch)
tree8cb0ae5b3253cb1ae5b3f867c58782fc6bcfbb11 /dgit
parent5307140c7bb2a71334522ed0d88e78efcaa210be (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-xdgit22
1 files changed, 14 insertions, 8 deletions
diff --git a/dgit b/dgit
index 149345d..b0c60c4 100755
--- a/dgit
+++ b/dgit
@@ -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 {