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

[PATCH v2 20/42] dir: convert struct untracked_cache_dir to object_id

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
May 2, 2018, 00:25 UTC
Message-ID
<20180502002610.915892-21-sandals@crustytoothpaste.net>
In-Reply-To
<20180502002610.915892-1-sandals@crustytoothpaste.net>

Convert the exclude_sha1 member of struct untracked_cache_dir and rename it to exclude_oid. Eliminate several hard-coded integral constants, and update a function name that referred to SHA-1.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 dir.c                                | 23 ++++++++++++-----------
 dir.h                                |  5 +++--
 t/helper/test-dump-untracked-cache.c |  2 +-
 3 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/dir.c b/dir.c
index 63a917be45..06f4c4a8bf 100644
--- a/dir.c
+++ b/dir.c
@@ -1240,11 +1240,11 @@ static void prep_exclude(struct dir_struct *dir,
 		    (!untracked || !untracked->valid ||
 		     /*
 		      * .. and .gitignore does not exist before
-		      * (i.e. null exclude_sha1). Then we can skip
+		      * (i.e. null exclude_oid). Then we can skip
 		      * loading .gitignore, which would result in
 		      * ENOENT anyway.
 		      */
-		     !is_null_sha1(untracked->exclude_sha1))) {
+		     !is_null_oid(&untracked->exclude_oid))) {
 			/*
 			 * dir->basebuf gets reused by the traversal, but we
 			 * need fname to remain unchanged to ensure the src
@@ -1275,9 +1275,9 @@ static void prep_exclude(struct dir_struct *dir,
 		 * order, though, if you do that.
 		 */
 		if (untracked &&
-		    hashcmp(oid_stat.oid.hash, untracked->exclude_sha1)) {
+		    oidcmp(&oid_stat.oid, &untracked->exclude_oid)) {
 			invalidate_gitignore(dir->untracked, untracked);
-			hashcpy(untracked->exclude_sha1, oid_stat.oid.hash);
+			oidcpy(&untracked->exclude_oid, &oid_stat.oid);
 		}
 		dir->exclude_stack = stk;
 		current = stk->baselen;
@@ -2622,9 +2622,10 @@ static void write_one_dir(struct untracked_cache_dir *untracked,
 		stat_data_to_disk(&stat_data, &untracked->stat_data);
 		strbuf_add(&wd->sb_stat, &stat_data, sizeof(stat_data));
 	}
-	if (!is_null_sha1(untracked->exclude_sha1)) {
+	if (!is_null_oid(&untracked->exclude_oid)) {
 		ewah_set(wd->sha1_valid, i);
-		strbuf_add(&wd->sb_sha1, untracked->exclude_sha1, 20);
+		strbuf_add(&wd->sb_sha1, untracked->exclude_oid.hash,
+			   the_hash_algo->rawsz);
 	}
 
 	intlen = encode_varint(untracked->untracked_nr, intbuf);
@@ -2825,16 +2826,16 @@ static void read_stat(size_t pos, void *cb)
 	ud->valid = 1;
 }
 
-static void read_sha1(size_t pos, void *cb)
+static void read_oid(size_t pos, void *cb)
 {
 	struct read_data *rd = cb;
 	struct untracked_cache_dir *ud = rd->ucd[pos];
-	if (rd->data + 20 > rd->end) {
+	if (rd->data + the_hash_algo->rawsz > rd->end) {
 		rd->data = rd->end + 1;
 		return;
 	}
-	hashcpy(ud->exclude_sha1, rd->data);
-	rd->data += 20;
+	hashcpy(ud->exclude_oid.hash, rd->data);
+	rd->data += the_hash_algo->rawsz;
 }
 
 static void load_oid_stat(struct oid_stat *oid_stat, const unsigned char *data,
@@ -2917,7 +2918,7 @@ struct untracked_cache *read_untracked_extension(const void *data, unsigned long
 	ewah_each_bit(rd.check_only, set_check_only, &rd);
 	rd.data = next + len;
 	ewah_each_bit(rd.valid, read_stat, &rd);
-	ewah_each_bit(rd.sha1_valid, read_sha1, &rd);
+	ewah_each_bit(rd.sha1_valid, read_oid, &rd);
 	next = rd.data;
 
 done:
diff --git a/dir.h b/dir.h
index b0758b82a2..de66be9f4e 100644
--- a/dir.h
+++ b/dir.h
@@ -3,6 +3,7 @@
 
 /* See Documentation/technical/api-directory-listing.txt */
 
+#include "cache.h"
 #include "strbuf.h"
 
 struct dir_entry {
@@ -118,8 +119,8 @@ struct untracked_cache_dir {
 	/* all data except 'dirs' in this struct are good */
 	unsigned int valid : 1;
 	unsigned int recurse : 1;
-	/* null SHA-1 means this directory does not have .gitignore */
-	unsigned char exclude_sha1[20];
+	/* null object ID means this directory does not have .gitignore */
+	struct object_id exclude_oid;
 	char name[FLEX_ARRAY];
 };
 
diff --git a/t/helper/test-dump-untracked-cache.c b/t/helper/test-dump-untracked-cache.c
index d7c55c2355..bd92fb305a 100644
--- a/t/helper/test-dump-untracked-cache.c
+++ b/t/helper/test-dump-untracked-cache.c
@@ -23,7 +23,7 @@ static void dump(struct untracked_cache_dir *ucd, struct strbuf *base)
 	len = base->len;
 	strbuf_addf(base, "%s/", ucd->name);
 	printf("%s %s", base->buf,
-	       sha1_to_hex(ucd->exclude_sha1));
+	       oid_to_hex(&ucd->exclude_oid));
 	if (ucd->recurse)
 		fputs(" recurse", stdout);
 	if (ucd->check_only)
Previous: brian m. carlsonNext: brian m. carlson
Message 39 of 45 in “object_id part 13”
  1. 00/42 object_id part 13brian m. carlson, May 2, 2018
  2. 01/42 cache: add a function to read an object ID from a bufferbrian m. carlson, May 2, 2018
  3. 02/42 server-info: remove unused members from struct pack_infobrian m. carlson, May 2, 2018
  4. 06/42 sha1-file: convert freshen functions to object_idbrian m. carlson, May 2, 2018
  5. 07/42 packfile: convert find_pack_entry to object_idbrian m. carlson, May 2, 2018
  6. 11/42 tree-walk: avoid hard-coded 20 constantbrian m. carlson, May 2, 2018
  7. 05/42 packfile: convert has_sha1_pack to object_idbrian m. carlson, May 2, 2018
  8. 13/42 fsck: convert static functions to struct object_idbrian m. carlson, May 2, 2018
  9. 17/42 pack-redundant: convert linked lists to use struct object_idbrian m. carlson, May 2, 2018
  10. 15/42 split-index: convert struct split_index to object_idbrian m. carlson, May 2, 2018
  11. 14/42 submodule-config: convert structures to object_idbrian m. carlson, May 2, 2018
  12. 18/42 index-pack: abstract away hash function constantbrian m. carlson, May 2, 2018
  13. 12/42 tree-walk: convert get_tree_entry_follow_symlinks to object_idbrian m. carlson, May 2, 2018
  14. 10/42 pack-redundant: abstract away hash algorithmbrian m. carlson, May 2, 2018
  15. 09/42 pack-objects: abstract away hash algorithmbrian m. carlson, May 2, 2018
  16. 27/42 builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algobrian m. carlson, May 2, 2018
  17. 28/42 builtin/merge: switch tree functions to use object_idbrian m. carlson, May 2, 2018
  18. 25/42 builtin/receive-pack: avoid hard-coded constants for push certsbrian m. carlson, May 2, 2018
  19. 35/42 sha1_file: convert cached object code to struct object_idbrian m. carlson, May 2, 2018
  20. 38/42 dir: use the_hash_algo for empty blob object IDbrian m. carlson, May 2, 2018
  21. 37/42 sequencer: use the_hash_algo for empty tree object IDbrian m. carlson, May 2, 2018
  22. 36/42 cache-tree: use is_empty_tree_oidbrian m. carlson, May 2, 2018
  23. 41/42 add--interactive: compute the empty tree valuebrian m. carlson, May 2, 2018
  24. 39/42 sha1_file: only expose empty object constants through git_hash_algobrian m. carlson, May 2, 2018
  25. 26/42 sha1-file: add functions for hex empty tree and blob OIDsbrian m. carlson, May 2, 2018
  26. 42/42 merge-one-file: compute empty blob object IDbrian m. carlson, May 2, 2018
  27. 40/42 Update shell scripts to compute empty tree object IDbrian m. carlson, May 2, 2018
  28. 34/42 builtin/reset: convert use of EMPTY_TREE_SHA1_BINbrian m. carlson, May 2, 2018
  29. 33/42 builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEXbrian m. carlson, May 2, 2018
  30. 32/42 wt-status: convert two uses of EMPTY_TREE_SHA1_HEXbrian m. carlson, May 2, 2018
  31. 31/42 submodule: convert several uses of EMPTY_TREE_SHA1_HEXbrian m. carlson, May 2, 2018
  32. 30/42 sequencer: convert one use of EMPTY_TREE_SHA1_HEXbrian m. carlson, May 2, 2018
  33. 29/42 merge: convert empty tree constant to the_hash_algobrian m. carlson, May 2, 2018
  34. 23/42 upload-pack: replace use of several hard-coded constantsbrian m. carlson, May 2, 2018
  35. 22/42 revision: replace use of hard-coded constantsbrian m. carlson, May 2, 2018
  36. 24/42 diff: specify abbreviation size in terms of the_hash_algobrian m. carlson, May 2, 2018
  37. 16/42 Update struct index_state to use struct object_idbrian m. carlson, May 2, 2018
  38. 21/42 http: eliminate hard-coded constantsbrian m. carlson, May 2, 2018
  39. 20/42 dir: convert struct untracked_cache_dir to object_idbrian m. carlson, May 2, 2018
  40. 19/42 commit: convert uses of get_sha1_hex to get_oid_hexbrian m. carlson, May 2, 2018
  41. 08/42 packfile: abstract away hash constant valuesbrian m. carlson, May 2, 2018
  42. 04/42 packfile: remove unused member from struct pack_entrybrian m. carlson, May 2, 2018
  43. 03/42 Remove unused member in struct object_contextbrian m. carlson, May 2, 2018
  44. Duy NguyenMay 2, 2018
  45. brian m. carlsonMay 2, 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.