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

[PATCH 1.8.0] add: make "add -u" update full tree without pathspec

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 7, 2011, 02:27 UTC
Message-ID
<1297045643-26697-1-git-send-email-pclouds@gmail.com>

When -u was introduced in dfdac5d (git-add -u: match the index with working tree., 2007-04-20), "add -u" (without pathspec) added everything. Shortly after, 2ed2c22 (git-add -u paths... now works from subdirectory, 2007-08-16) broke it while fixing something related.

This makes -u (and -A) inconsistent with some other options, namely -p. It's been four years since the unintentional breakage and people are probably used to "git add -u" updating only current directory. Perhaps it's time to bring the original behavior back? Current behavior can always be achieved with "git add -u ."

Migration plan:

I'm bad at this. Can we start with a patch that warns users to do "git add -u ." when they do "git add -u"? Hopefully they would have their fingers retraied by the time the behavior is changed in 1.8.0.

PS. What about -A?
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 2011/2/7 Sebastian Pipping <webmaster@hartwork.org>:
 >> git add -u was tree-wide when it was introduced in dfdac5d (git-add
 >> -u: match the index with working tree., 2007-04-20), but 2ed2c22
 >> (git-add -u paths... now works from subdirectory, 2007-08-16) broke it
 >> while fixing something related.
 >
 > So my memory didn't fool me.  Thanks for digging this out.
 >
 > Can we have tree-wide "git add -u" back, please?
 Yup yup I like it too (and wanted the original behavior sometimes, even
 though I didn't know it was original behavior).
 Pulling Junio in for -A. It seems closely related to -u. In fact I revert
 one line from 1e5f764 (builtin-add.c: optimize -A option and "git add ."
 - 2008-07-22) but not fully understand why it was changed.
 builtin/add.c         |    7 +++++--
 t/t2200-add-update.sh |   13 +++++++------
 2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/builtin/add.c b/builtin/add.c
index 12b964e..f1f8b5a 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -389,7 +389,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 		die("-A and -u are mutually incompatible");
 	if (!show_only && ignore_missing)
 		die("Option --ignore-missing can only be used together with --dry-run");
-	if ((addremove || take_worktree_changes) && !argc) {
+	if (addremove && !argc) {
 		static const char *here[2] = { ".", NULL };
 		argc = 1;
 		argv = here;
@@ -412,7 +412,10 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 		fprintf(stderr, "Maybe you wanted to say 'git add .'?\n");
 		return 0;
 	}
-	pathspec = validate_pathspec(argc, argv, prefix);
+	if (take_worktree_changes && !argc)
+		pathspec = NULL;
+	else
+		pathspec = validate_pathspec(argc, argv, prefix);
 
 	if (read_cache() < 0)
 		die("index file corrupt");
diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh
index 0692427..2201242 100755
--- a/t/t2200-add-update.sh
+++ b/t/t2200-add-update.sh
@@ -69,15 +69,16 @@ test_expect_success 'cache tree has not been corrupted' '
 test_expect_success 'update from a subdirectory' '
 	(
 		cd dir1 &&
-		echo more >sub2 &&
+		echo more >>sub2 &&
 		git add -u sub2
-	)
-'
-
-test_expect_success 'change gets noticed' '
-
+	) &&
 	test "$(git diff-files --name-status dir1)" = ""
+'
 
+test_expect_success 'update without args from subdir' '
+	echo more >>top &&
+	( cd dir1 && git add -u ) &&
+	test "$(git diff-files --name-status top)" = ""
 '
 
 test_expect_success SYMLINKS 'replace a file with a symlink' '
-- 
1.7.3.4.878.g439c7
Next: Junio C Hamano
Message 1 of 25 in “add: make "add -u" update full tree without pathspec”
  1. add: make "add -u" update full tree without pathspecNguyễn Thái Ngọc Duy, Feb 7, 2011
  2. Junio C HamanoFeb 7, 2011
  3. Nguyen Thai Ngoc DuyFeb 7, 2011
  4. Miles BaderFeb 7, 2011
  5. Joshua JuranFeb 9, 2011
  6. Matthieu MoyFeb 7, 2011
  7. Junio C HamanoFeb 27, 2011
  8. Matthieu MoyFeb 27, 2011
  9. Nguyen Thai Ngoc DuyFeb 27, 2011
  10. Sverre RabbelierFeb 27, 2011
  11. Nguyen Thai Ngoc DuyFeb 27, 2011
  12. Nguyen Thai Ngoc DuyFeb 27, 2011
  13. Junio C HamanoFeb 27, 2011
  14. Nguyen Thai Ngoc DuyFeb 28, 2011
  15. Junio C HamanoFeb 28, 2011
  16. Nguyen Thai Ngoc DuyMar 1, 2011
  17. Junio C HamanoMar 1, 2011
  18. Nguyen Thai Ngoc DuyMar 1, 2011
  19. Matthieu MoyMar 1, 2011
  20. Junio C HamanoMar 1, 2011
  21. Matthieu MoyMar 1, 2011
  22. Jakub NarebskiMar 1, 2011
  23. Jeff KingMar 1, 2011
  24. Junio C HamanoMar 1, 2011
  25. Matthieu MoyMar 1, 2011

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.