summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-11-06 15:18:45 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-11-06 15:22:40 -0400
commitc99fb589097d96b4e10cd8b137f72881cdb93118 (patch)
treebf26fa39ad83a2df6558e76466137e6d209c2395 /debian
parentbf07e2c921f66965ca0be816975fc608a81c4276 (diff)
merge: Use fast-forward merges when possible.
Thanks Valentin Haenel for a test case showing how non-fast-forward merges could result in an ongoing pull/merge/push cycle. While the git-annex branch is fast-forwarded, git-annex's index file is still updated using the union merge strategy as before. There's no other way to update the index that would be any faster. It is possible that a union merge and a fast-forward result in different file contents: Files should have the same lines, but a union merge may change their order. If this happens, the next commit made to the git-annex branch will have some unnecessary changes to line orders, but the consistency of data should be preserved. Note that when the journal contains changes, a fast-forward is never attempted, which is fine, because committing those changes would be vanishingly unlikely to leave the git-annex branch at a commit that already exists in one of the remotes. The real difficulty is handling the case where multiple remotes have all changed. git-annex does find the best (ie, newest) one and fast forwards to it. If the remotes are diverged, no fast-forward is done at all. It would be possible to pick one, fast forward to it, and make a merge commit to the rest, I see no benefit to adding that complexity. Determining the best of N changed remotes requires N*2+1 calls to git-log, but these are fast git-log calls, and N is typically small. Also, typically some or all of the remote refs will be the same, and git-log is not called to compare those. In the real world I expect this will almost always add only 1 git-log call to the merge process. (Which already makes N anyway.)
Diffstat (limited to 'debian')
-rw-r--r--debian/changelog8
1 files changed, 8 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index fdd3cb7f6..57be53c85 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+git-annex (3.20111106) UNRELEASED; urgency=low
+
+ * merge: Use fast-forward merges when possible.
+ Thanks Valentin Haenel for a test case showing how non-fast-forward
+ merges could result in an ongoing pull/merge/push cycle.
+
+ -- Joey Hess <joeyh@debian.org> Sun, 06 Nov 2011 14:57:57 -0400
+
git-annex (3.20111105) unstable; urgency=low
* The default backend used when adding files to the annex is changed