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

[PATCH 12/24] unpack-trees: avoid the_index in verify_absent()

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Aug 13, 2018, 16:14 UTC
Message-ID
<20180813161441.16824-13-pclouds@gmail.com>
In-Reply-To
<20180813161441.16824-1-pclouds@gmail.com>

Both functions that are updated in this commit are called by verify_absent(), which is part of the "unpack-trees" operation that is supposed to work on any index file specified by the caller. Thanks to Brandon [1] [2], an implicit dependency on the_index is exposed. This commit fixes it.

In both functions, it makes sense to use src_index to check for exclusion because it's almost unchanged and should give us the same outcome as if running the exclude check before the unpack.

It's "almost unchanged" because we do invalidate cache-tree and untracked cache in the source index. But this should not affect how exclude machinery uses the index: to see if a file is tracked, and to read a blob from the index instead of worktree if it's marked skip-worktree (i.e. it's not available in worktree)

[1] a0bba65b10 (dir: convert is_excluded to take an index - 2017-05-05 [2] 2c1eb10454 (dir: convert read_directory to take an index - 2017-05-05)

Helped-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 unpack-trees.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/unpack-trees.c b/unpack-trees.c
index 5d11f10e66..14e9043f9d 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1658,7 +1658,7 @@ static int verify_clean_subdirectory(const struct cache_entry *ce,
 	memset(&d, 0, sizeof(d));
 	if (o->dir)
 		d.exclude_per_dir = o->dir->exclude_per_dir;
-	i = read_directory(&d, &the_index, pathbuf, namelen+1, NULL);
+	i = read_directory(&d, o->src_index, pathbuf, namelen+1, NULL);
 	if (i)
 		return o->gently ? -1 :
 			add_rejected_path(o, ERROR_NOT_UPTODATE_DIR, ce->name);
@@ -1700,7 +1700,7 @@ static int check_ok_to_remove(const char *name, int len, int dtype,
 		return 0;
 
 	if (o->dir &&
-	    is_excluded(o->dir, &the_index, name, &dtype))
+	    is_excluded(o->dir, o->src_index, name, &dtype))
 		/*
 		 * ce->name is explicitly excluded, so it is Ok to
 		 * overwrite it.
-- 
2.18.0.1004.g6639190530
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 23 of 38 in “Kill the_index part3”
  1. 00/24 Kill the_index part3Nguyễn Thái Ngọc Duy, Aug 13, 2018
  2. 01/24 diff.c: move read_index() code back to the callerNguyễn Thái Ngọc Duy, Aug 13, 2018
  3. 02/24 cache-tree: wrap the_index based wrappers with #ifdefNguyễn Thái Ngọc Duy, Aug 13, 2018
  4. Junio C HamanoAug 13, 2018
  5. 03/24 attr: remove an implicit dependency on the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  6. Brandon WilliamsAug 13, 2018
  7. 04/24 convert.c: remove an implicit dependency on the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  8. Junio C HamanoAug 13, 2018
  9. 06/24 preload-index.c: use the right index instead of the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  10. 05/24 dir.c: remove an implicit dependency on the_index in pathspec codeNguyễn Thái Ngọc Duy, Aug 13, 2018
  11. Brandon WilliamsAug 13, 2018
  12. Duy NguyenAug 13, 2018
  13. 07/24 ls-files: correct index argument to get_convert_attr_ascii()Nguyễn Thái Ngọc Duy, Aug 13, 2018
  14. Stefan BellerAug 15, 2018
  15. 08/24 unpack-trees: remove 'extern' on function declarationNguyễn Thái Ngọc Duy, Aug 13, 2018
  16. Stefan BellerAug 15, 2018
  17. Duy NguyenAug 15, 2018
  18. Stefan BellerAug 15, 2018
  19. 09/24 unpack-trees: add a note about path invalidationNguyễn Thái Ngọc Duy, Aug 13, 2018
  20. 10/24 unpack-trees: don't shadow global var the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  21. 11/24 unpack-trees: convert clear_ce_flags* to avoid the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  22. 13/24 pathspec.c: use the right index instead of the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  23. 12/24 unpack-trees: avoid the_index in verify_absent()Nguyễn Thái Ngọc Duy, Aug 13, 2018
  24. 14/24 submodule.c: use the right index instead of the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  25. 16/24 attr: remove index from git_attr_set_direction()Nguyễn Thái Ngọc Duy, Aug 13, 2018
  26. Brandon WilliamsAug 13, 2018
  27. 15/24 entry.c: use the right index instead of the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  28. 17/24 grep: use the right index instead of the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  29. 19/24 archive-*.c: use the right repositoryNguyễn Thái Ngọc Duy, Aug 13, 2018
  30. 20/24 resolve-undo.c: use the right index instead of the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  31. 21/24 apply.c: pass struct apply_state to more functionsNguyễn Thái Ngọc Duy, Aug 13, 2018
  32. 22/24 apply.c: make init_apply_state() take a struct repositoryNguyễn Thái Ngọc Duy, Aug 13, 2018
  33. 18/24 archive.c: avoid access to the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  34. 23/24 apply.c: remove implicit dependency on the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  35. 24/24 blame.c: remove implicit dependency on the_indexNguyễn Thái Ngọc Duy, Aug 13, 2018
  36. Brandon WilliamsAug 13, 2018
  37. Junio C HamanoAug 13, 2018
  38. Stefan BellerAug 15, 2018

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.