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

[RFC PATCH 18/22] fast-import: permit reading multiple marks files

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jan 13, 2020, 12:47 UTC
Message-ID
<20200113124729.3684846-19-sandals@crustytoothpaste.net>
In-Reply-To
<20200113124729.3684846-1-sandals@crustytoothpaste.net>

In the future, we'll want to read marks files for submodules as well. Refactor the existing code to make it possible to read multiple marks files, each into their own marks set.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 fast-import.c | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/fast-import.c b/fast-import.c
index b8b65a801c..b9ecd89699 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -493,9 +493,8 @@ static char *pool_strdup(const char *s)
 	return r;
 }
 
-static void insert_mark(uintmax_t idnum, struct object_entry *oe)
+static void insert_mark(struct mark_set *s, uintmax_t idnum, struct object_entry *oe)
 {
-	struct mark_set *s = marks;
 	while ((idnum >> s->shift) >= 1024) {
 		s = mem_pool_calloc(&fi_mem_pool, 1, sizeof(struct mark_set));
 		s->shift = marks->shift + 10;
@@ -919,7 +918,7 @@ static int store_object(
 
 	e = insert_object(&oid);
 	if (mark)
-		insert_mark(mark, e);
+		insert_mark(marks, mark, e);
 	if (e->idx.offset) {
 		duplicate_count_by_type[type]++;
 		return 1;
@@ -1117,7 +1116,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
 	e = insert_object(&oid);
 
 	if (mark)
-		insert_mark(mark, e);
+		insert_mark(marks, mark, e);
 
 	if (e->idx.offset) {
 		duplicate_count_by_type[OBJ_BLOB]++;
@@ -1712,16 +1711,9 @@ static void dump_marks(void)
 	}
 }
 
-static void read_marks(void)
+static void read_mark_file(struct mark_set *s, FILE *f)
 {
 	char line[512];
-	FILE *f = fopen(import_marks_file, "r");
-	if (f)
-		;
-	else if (import_marks_file_ignore_missing && errno == ENOENT)
-		goto done; /* Marks file does not exist */
-	else
-		die_errno("cannot read '%s'", import_marks_file);
 	while (fgets(line, sizeof(line), f)) {
 		uintmax_t mark;
 		char *end;
@@ -1747,8 +1739,20 @@ static void read_marks(void)
 			e->pack_id = MAX_PACK_ID;
 			e->idx.offset = 1; /* just not zero! */
 		}
-		insert_mark(mark, e);
+		insert_mark(s, mark, e);
 	}
+}
+
+static void read_marks(void)
+{
+	FILE *f = fopen(import_marks_file, "r");
+	if (f)
+		;
+	else if (import_marks_file_ignore_missing && errno == ENOENT)
+		goto done; /* Marks file does not exist */
+	else
+		die_errno("cannot read '%s'", import_marks_file);
+	read_mark_file(marks, f);
 	fclose(f);
 done:
 	import_marks_file_done = 1;
@@ -3130,7 +3134,7 @@ static void parse_alias(void)
 		die(_("Expected 'to' command, got %s"), command_buf.buf);
 	e = find_object(&b.oid);
 	assert(e);
-	insert_mark(next_mark, e);
+	insert_mark(marks, next_mark, e);
 }
 
 static char* make_fast_import_path(const char *path)
Previous: brian m. carlsonNext: brian m. carlson
Message 13 of 25 in “SHA-256 stage 4 implementation, part 1/3”
  1. 00/22 SHA-256 stage 4 implementation, part 1/3brian m. carlson, Jan 13, 2020
  2. 02/22 hex: add functions to parse hex object IDs in any algorithmbrian m. carlson, Jan 13, 2020
  3. Junio C HamanoJan 15, 2020
  4. brian m. carlsonJan 16, 2020
  5. 04/22 t: use hash-specific lookup tables to define test constantsbrian m. carlson, Jan 13, 2020
  6. 05/22 t6300: abstract away SHA-1-specific constantsbrian m. carlson, Jan 13, 2020
  7. 10/22 setup: allow check_repository_format to read repository formatbrian m. carlson, Jan 13, 2020
  8. 11/22 builtin/init-db: allow specifying hash algorithm on command linebrian m. carlson, Jan 13, 2020
  9. 17/22 tag: store SHA-256 signatures in a headerbrian m. carlson, Jan 13, 2020
  10. 19/22 fast-import: add helper function for inserting mark object entriesbrian m. carlson, Jan 13, 2020
  11. 16/22 gpg-interface: improve interface for parsing tagsbrian m. carlson, Jan 13, 2020
  12. 22/22 fast-import: add options for rewriting submodulesbrian m. carlson, Jan 13, 2020
  13. 18/22 fast-import: permit reading multiple marks filesbrian m. carlson, Jan 13, 2020
  14. 15/22 commit: use expected signature header for SHA-256brian m. carlson, Jan 13, 2020
  15. 20/22 fast-import: make find_marks work on any mark setbrian m. carlson, Jan 13, 2020
  16. 21/22 fast-import: add a generic function to iterate over marksbrian m. carlson, Jan 13, 2020
  17. 14/22 worktree: allow repository version 1brian m. carlson, Jan 13, 2020
  18. 12/22 builtin/init-db: add environment variable for new repo hashbrian m. carlson, Jan 13, 2020
  19. 13/22 init-db: move writing repo version into a functionbrian m. carlson, Jan 13, 2020
  20. 09/22 t/helper: make repository tests hash independentbrian m. carlson, Jan 13, 2020
  21. 03/22 repository: require a build flag to use SHA-256brian m. carlson, Jan 13, 2020
  22. 08/22 t/helper: initialize repository if necessarybrian m. carlson, Jan 13, 2020
  23. 07/22 t/helper/test-dump-split-index: initialize git repositorybrian m. carlson, Jan 13, 2020
  24. 01/22 hex: introduce parsing variants taking hash algorithmsbrian m. carlson, Jan 13, 2020
  25. 06/22 t6300: make hash algorithm independentbrian m. carlson, Jan 13, 2020

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.