git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] pull: update unborn branch tip after index

From
Jeff King <peff@peff.net>
Date
Jun 20, 2013, 22:36 UTC
Message-ID
<20130620223630.GA18675@sigill.intra.peff.net>
In-Reply-To
<20130620223550.GA21667@sigill.intra.peff.net>

When commit d09e79c taught git to pull into an unborn branch, it first updated the unborn branch to point at the pulled commit, and then used read-tree to update the index and working tree. That ordering made sense, since any failure of the latter step would be due to filesystem errors, and one could then recover with "git reset --hard".

Later, commit 4b3ffe5 added extra safety for existing files in the working tree by asking read-tree to bail out when it would overwrite such a file. This error mode is much less "your pull failed due to random errors" and more like "we reject this pull because it would lose data". In that case, it makes sense not to update the HEAD ref, just as a regular rejected merge would do.

This patch reverses the order of the update-ref and read-tree calls, so that we do not touch the HEAD ref at all if a merge is rejected. This also means that we would not update HEAD in case of a transient filesystem error, but those are presumably less rare (and one can still recover by repeating the pull, or by accessing FETCH_HEAD directly).

While we're reorganizing the code, we can drop the "exit 1" from the end of our command chain. We exit immediately either way, and just calling exit without an argument will use the exit code from the last command.

Signed-off-by: Jeff King <peff@peff.net>
---
 git-pull.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/git-pull.sh b/git-pull.sh
index 638aabb..7904753 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -268,8 +268,8 @@ then
 
 if test -z "$orig_head"
 then
-	git update-ref -m "initial pull" HEAD $merge_head "$curr_head" &&
-	git read-tree -m -u HEAD || exit 1
+	git read-tree -m -u $merge_head &&
+	git update-ref -m "initial pull" HEAD $merge_head "$curr_head"
 	exit
 fi
 
-- 
1.8.3.rc2.14.g7eee6b3
Previous: Jeff KingNext: Jeff King
Message 17 of 20 in “pull: pull into void by fast-forwarding from empty tree”
  1. pull: pull into void by fast-forwarding from empty treeThomas Rast, Jun 20, 2013
  2. Jeff KingJun 20, 2013
  3. pull: merge into unborn by fast-forwarding from empty treeThomas Rast, Jun 20, 2013
  4. Jeff KingJun 20, 2013
  5. Thomas RastJun 20, 2013
  6. Thomas RastJun 20, 2013
  7. Jeff KingJun 20, 2013
  8. Thomas RastJun 20, 2013
  9. Thomas RastJun 20, 2013
  10. Junio C HamanoJun 20, 2013
  11. Jeff KingJun 20, 2013
  12. Junio C HamanoJun 20, 2013
  13. Jeff KingJun 20, 2013
  14. Junio C HamanoJun 20, 2013
  15. Jeff KingJun 20, 2013
  16. 0/2 pull into unborn branch safety treeJeff King, Jun 20, 2013
  17. 1/2 pull: update unborn branch tip after indexJeff King, Jun 20, 2013
  18. 2/2 pull: merge into unborn by fast-forwarding from empty treeJeff King, Jun 20, 2013
  19. Junio C HamanoJun 20, 2013
  20. Ramkumar RamachandraJun 20, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.