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

[PATCH] "git checkout -- paths..." should signal error

From
Junio C Hamano <gitster@pobox.com>
Date
May 28, 2008, 21:19 UTC
Message-ID
<7vtzgirus5.fsf_-_@gitster.siamese.dyndns.org>
In-Reply-To
<7v7idetb1h.fsf@gitster.siamese.dyndns.org>

When "git checkout -- paths..." cannot update work tree for whatever reason, checkout_entry() correctly issued an error message for the path to the end user, but the command ignored the error, causing the entire command to succeed. This fixes it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 * Now that we detect this failure, post-checkout-hook _might_ want to
   know that what we have is an incomplete checkout.  Not calling the hook
   in such a case may be another option, but we always called the hook and
   that would be a change in behaviour.
 builtin-checkout.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/builtin-checkout.c b/builtin-checkout.c
index 1ea017f..00dc8ca 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -84,6 +84,7 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec)
 	unsigned char rev[20];
 	int flag;
 	struct commit *head;
+	int errs = 0;
 
 	int newfd;
 	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
@@ -106,13 +107,14 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec)
 	if (report_path_error(ps_matched, pathspec, 0))
 		return 1;
 
+	/* Now we are committed to check them out */
 	memset(&state, 0, sizeof(state));
 	state.force = 1;
 	state.refresh_cache = 1;
 	for (pos = 0; pos < active_nr; pos++) {
 		struct cache_entry *ce = active_cache[pos];
 		if (pathspec_match(pathspec, NULL, ce->name, 0)) {
-			checkout_entry(ce, &state, NULL);
+			errs |= checkout_entry(ce, &state, NULL);
 		}
 	}
 
@@ -123,7 +125,8 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec)
 	resolve_ref("HEAD", rev, 0, &flag);
 	head = lookup_commit_reference_gently(rev, 1);
 
-	return post_checkout_hook(head, head, 0);
+	errs |= post_checkout_hook(head, head, 0);
+	return errs;
 }
 
 static void show_local_changes(struct object *head)
Previous: Junio C HamanoNext: Marius Storm-Olsen
Message 36 of 42 in “Commit cce8d6fdb introduces file t/t5100/nul, git tree is now incompatible with Cygwin (and probably Windows)”
  1. Mark LevedahlMay 26, 2008
  2. Johannes SchindelinMay 26, 2008
  3. Mark LevedahlMay 26, 2008
  4. Johannes SchindelinMay 26, 2008
  5. Mark LevedahlMay 26, 2008
  6. Johannes SchindelinMay 26, 2008
  7. Johannes SchindelinMay 26, 2008
  8. Eric BlakeMay 27, 2008
  9. Junio C HamanoMay 28, 2008
  10. Wincent ColaiutaMay 28, 2008
  11. Lea WiemannMay 28, 2008
  12. Wincent ColaiutaMay 28, 2008
  13. Jakub NarebskiMay 28, 2008
  14. Johannes SchindelinMay 29, 2008
  15. Wincent ColaiutaMay 29, 2008
  16. Johannes SchindelinMay 29, 2008
  17. Wincent ColaiutaMay 29, 2008
  18. Steffen ProhaskaMay 31, 2008
  19. gitweb: Remove gitweb/test/ directoryJakub Narebski, May 31, 2008
  20. Wincent ColaiutaMay 31, 2008
  21. Johannes SchindelinMay 31, 2008
  22. Jakub NarebskiJun 1, 2008
  23. Kay SieversJun 1, 2008
  24. Wincent ColaiutaJun 1, 2008
  25. Junio C HamanoJun 1, 2008
  26. Jakub NarebskiJun 1, 2008
  27. Avery PennarunMay 28, 2008
  28. Junio C HamanoMay 28, 2008
  29. Sverre RabbelierMay 28, 2008
  30. Avery PennarunMay 28, 2008
  31. Junio C HamanoMay 28, 2008
  32. Daniel BarkalowMay 28, 2008
  33. Junio C HamanoMay 28, 2008
  34. Daniel BarkalowMay 28, 2008
  35. Junio C HamanoMay 28, 2008
  36. "git checkout -- paths..." should signal errorJunio C Hamano, May 28, 2008
  37. Marius Storm-OlsenMay 29, 2008
  38. Daniel BarkalowMay 29, 2008
  39. Daniel BarkalowMay 28, 2008
  40. Makefile: wt-status.h is also a lib headerJohannes Schindelin, May 26, 2008
  41. Junio C HamanoMay 26, 2008
  42. Johannes SchindelinMay 26, 2008

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.