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

[PATCH 3/8] tree-diff: no need to manually verify that there is no mode change for a path

From
Kirill Smelkov <kirr@mns.spb.ru>
Date
Feb 3, 2014, 12:47 UTC
Message-ID
<83f38f44dab9e07e99ad851f531e01cee52e7019.1391430523.git.kirr@mns.spb.ru>
In-Reply-To
<cover.1391430523.git.kirr@mns.spb.ru>

Because if there is, such two tree entries would never be compared as equal - the code in base_name_compare() explicitly compares modes, if there is a change for dir bit, even for equal paths, entries would compare as different.

The code I'm removing here is from 2005 April 262e82b4 (Fix diff-tree recursion), which pre-dates base_name_compare() introduction in 958ba6c9 (Introduce "base_name_compare()" helper function) by a month.

Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
---
 tree-diff.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/tree-diff.c b/tree-diff.c
index 456660c..c2c67fd 100644
--- a/tree-diff.c
+++ b/tree-diff.c
@@ -23,6 +23,10 @@ static int compare_tree_entry(struct tree_desc *t1, struct tree_desc *t2,
 
 	pathlen1 = tree_entry_len(&t1->entry);
 	pathlen2 = tree_entry_len(&t2->entry);
+
+	/* NOTE files and directories *always* compare differently, event when
+	 * having the same name.
+	 */
 	cmp = base_name_compare(path1, pathlen1, mode1, path2, pathlen2, mode2);
 	if (cmp < 0) {
 		show_entry(opt, "-", t1, base);
@@ -35,16 +39,6 @@ static int compare_tree_entry(struct tree_desc *t1, struct tree_desc *t2,
 	if (!DIFF_OPT_TST(opt, FIND_COPIES_HARDER) && !hashcmp(sha1, sha2) && mode1 == mode2)
 		return 0;
 
-	/*
-	 * If the filemode has changed to/from a directory from/to a regular
-	 * file, we need to consider it a remove and an add.
-	 */
-	if (S_ISDIR(mode1) != S_ISDIR(mode2)) {
-		show_entry(opt, "-", t1, base);
-		show_entry(opt, "+", t2, base);
-		return 0;
-	}
-
 	strbuf_add(base, path1, pathlen1);
 	if (DIFF_OPT_TST(opt, RECURSIVE) && S_ISDIR(mode1)) {
 		if (DIFF_OPT_TST(opt, TREE_IN_RECURSIVE)) {
-- 
1.9.rc1.181.g641f458
Previous: Kirill SmelkovNext: Junio C Hamano
Message 7 of 26 in “`log -c` speedup (part 2)”
  1. 0/8 `log -c` speedup (part 2)Kirill Smelkov, Feb 3, 2014
  2. 1/8 fixup! combine_diff: simplify intersect_paths() furtherKirill Smelkov, Feb 3, 2014
  3. Junio C HamanoFeb 3, 2014
  4. 2/8 tests: add checking that combine-diff emits only correct pathsKirill Smelkov, Feb 3, 2014
  5. Junio C HamanoFeb 3, 2014
  6. Kirill SmelkovFeb 5, 2014
  7. 3/8 tree-diff: no need to manually verify that there is no mode change for a pathKirill Smelkov, Feb 3, 2014
  8. Junio C HamanoFeb 3, 2014
  9. 4/8 tree-diff: no need to pass match to skip_uninteresting()Kirill Smelkov, Feb 3, 2014
  10. 5/8 combine-diff: move show_log_first logic/action out of paths scanningKirill Smelkov, Feb 3, 2014
  11. Junio C HamanoFeb 3, 2014
  12. 6/8 combine-diff: Move changed-paths scanning logic into its own functionKirill Smelkov, Feb 3, 2014
  13. 7/8 combine-diff: Fast changed-to-all-parents paths scanningKirill Smelkov, Feb 3, 2014
  14. Junio C HamanoFeb 3, 2014
  15. Junio C HamanoFeb 3, 2014
  16. Kirill SmelkovFeb 4, 2014
  17. Junio C HamanoFeb 4, 2014
  18. Kirill SmelkovFeb 5, 2014
  19. Junio C HamanoFeb 5, 2014
  20. Kirill SmelkovFeb 5, 2014
  21. Junio C HamanoFeb 5, 2014
  22. Kirill SmelkovFeb 5, 2014
  23. Junio C HamanoFeb 5, 2014
  24. Kirill SmelkovFeb 6, 2014
  25. Junio C HamanoFeb 4, 2014
  26. 8/8 combine-diff: bail out early, if num_paths=0Kirill Smelkov, Feb 3, 2014

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.