diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2016-10-20 15:55:57 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2016-10-20 16:10:49 +0100 |
commit | 50048b4c1c41e1471cdc7054bed02ff30418ea44 (patch) | |
tree | 0639404945229682c8152720a478c9be61469987 | |
parent | a17cad7ce9f5d5a89c77cd9179d4fb33076e493f (diff) |
split brain cache: Add a dummy ref update when necessary
git-update-ref does not make a new reflog entry if the ref is not
actually being changed.
This can mean that `dgit build' might fail to find a good cache entry,
but also fail to generate one that push will accept.
In this case, generate a dummy reflog update. We make a spurious
child of the $dgitview, as that's straightforward. Giving it the same
tree and a parent means that human use of reflog commands will produce
empty results rather than lots of confusing output.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
-rw-r--r-- | debian/changelog | 4 | ||||
-rwxr-xr-x | dgit | 16 |
2 files changed, 20 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog index 99e724d..08b3e32 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,10 @@ dgit (2.4~) unstable; urgency=low Closes:#841100. * split brain cache: Fix a wrong implicit reference to $_. Closes:#841383. + * split brain cache: Make sure to write reflog entries for cache updates + even if the eventual tree (and therefore commit) is the same. + Otherwise, after updating dgit, the cache might have the right answer + but not be refreshed even by a build. -- @@ -3917,6 +3917,22 @@ END ensuredir ".git/logs/refs/dgit-intern"; my $makelogfh = new IO::File ".git/logs/refs/$splitbraincache", '>>' or die $!; + + my $oldcache = git_get_ref "refs/$splitbraincache"; + if ($oldcache eq $dgitview) { + my $tree = cmdoutput qw(git rev-parse), "$dgitview:"; + # git update-ref doesn't always update, in this case. *sigh* + my $dummy = make_commit_text <<END; +tree $tree +parent $dgitview +author Dgit <dgit\@example.com> 1000000000 +0000 +committer Dgit <dgit\@example.com> 1000000000 +0000 + +Dummy commit - do not use +END + runcmd @git, qw(update-ref -m), "dgit $our_version - dummy", + "refs/$splitbraincache", $dummy; + } runcmd @git, qw(update-ref -m), $cachekey, "refs/$splitbraincache", $dgitview; |