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

[RFC PATCH 20/22] fast-import: make find_marks work on any mark set

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

In the future, we'll use multiple different mark sets with this function, so make it take an argument that points to the mark set to operate on.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 fast-import.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/fast-import.c b/fast-import.c
index 3ce4a04473..8aaa7f6289 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -517,10 +517,9 @@ static void insert_mark(struct mark_set *s, uintmax_t idnum, struct object_entry
 	s->data.marked[idnum] = oe;
 }
 
-static struct object_entry *find_mark(uintmax_t idnum)
+static void *find_mark(struct mark_set *s, uintmax_t idnum)
 {
 	uintmax_t orig_idnum = idnum;
-	struct mark_set *s = marks;
 	struct object_entry *oe = NULL;
 	if ((idnum >> s->shift) < 1024) {
 		while (s && s->shift) {
@@ -2225,7 +2224,7 @@ static void file_change_m(const char *p, struct branch *b)
 	}
 
 	if (*p == ':') {
-		oe = find_mark(parse_mark_ref_space(&p));
+		oe = find_mark(marks, parse_mark_ref_space(&p));
 		oidcpy(&oid, &oe->idx.oid);
 	} else if (skip_prefix(p, "inline ", &p)) {
 		inline_data = 1;
@@ -2399,7 +2398,7 @@ static void note_change_n(const char *p, struct branch *b, unsigned char *old_fa
 	/* Now parse the notemodify command. */
 	/* <dataref> or 'inline' */
 	if (*p == ':') {
-		oe = find_mark(parse_mark_ref_space(&p));
+		oe = find_mark(marks, parse_mark_ref_space(&p));
 		oidcpy(&oid, &oe->idx.oid);
 	} else if (skip_prefix(p, "inline ", &p)) {
 		inline_data = 1;
@@ -2420,7 +2419,7 @@ static void note_change_n(const char *p, struct branch *b, unsigned char *old_fa
 		oidcpy(&commit_oid, &s->oid);
 	} else if (*p == ':') {
 		uintmax_t commit_mark = parse_mark_ref_eol(p);
-		struct object_entry *commit_oe = find_mark(commit_mark);
+		struct object_entry *commit_oe = find_mark(marks, commit_mark);
 		if (commit_oe->type != OBJ_COMMIT)
 			die("Mark :%" PRIuMAX " not a commit", commit_mark);
 		oidcpy(&commit_oid, &commit_oe->idx.oid);
@@ -2524,7 +2523,7 @@ static int parse_objectish(struct branch *b, const char *objectish)
 		oidcpy(&b->branch_tree.versions[1].oid, t);
 	} else if (*objectish == ':') {
 		uintmax_t idnum = parse_mark_ref_eol(objectish);
-		struct object_entry *oe = find_mark(idnum);
+		struct object_entry *oe = find_mark(marks, idnum);
 		if (oe->type != OBJ_COMMIT)
 			die("Mark :%" PRIuMAX " not a commit", idnum);
 		if (!oideq(&b->oid, &oe->idx.oid)) {
@@ -2588,7 +2587,7 @@ static struct hash_list *parse_merge(unsigned int *count)
 			oidcpy(&n->oid, &s->oid);
 		else if (*from == ':') {
 			uintmax_t idnum = parse_mark_ref_eol(from);
-			struct object_entry *oe = find_mark(idnum);
+			struct object_entry *oe = find_mark(marks, idnum);
 			if (oe->type != OBJ_COMMIT)
 				die("Mark :%" PRIuMAX " not a commit", idnum);
 			oidcpy(&n->oid, &oe->idx.oid);
@@ -2762,7 +2761,7 @@ static void parse_new_tag(const char *arg)
 	} else if (*from == ':') {
 		struct object_entry *oe;
 		from_mark = parse_mark_ref_eol(from);
-		oe = find_mark(from_mark);
+		oe = find_mark(marks, from_mark);
 		type = oe->type;
 		oidcpy(&oid, &oe->idx.oid);
 	} else if (!get_oid(from, &oid)) {
@@ -2920,7 +2919,7 @@ static void parse_get_mark(const char *p)
 	if (*p != ':')
 		die("Not a mark: %s", p);
 
-	oe = find_mark(parse_mark_ref_eol(p));
+	oe = find_mark(marks, parse_mark_ref_eol(p));
 	if (!oe)
 		die("Unknown mark: %s", command_buf.buf);
 
@@ -2935,7 +2934,7 @@ static void parse_cat_blob(const char *p)
 
 	/* cat-blob SP <object> LF */
 	if (*p == ':') {
-		oe = find_mark(parse_mark_ref_eol(p));
+		oe = find_mark(marks, parse_mark_ref_eol(p));
 		if (!oe)
 			die("Unknown mark: %s", command_buf.buf);
 		oidcpy(&oid, &oe->idx.oid);
@@ -3010,7 +3009,7 @@ static struct object_entry *parse_treeish_dataref(const char **p)
 	struct object_entry *e;
 
 	if (**p == ':') {	/* <mark> */
-		e = find_mark(parse_mark_ref_space(p));
+		e = find_mark(marks, parse_mark_ref_space(p));
 		if (!e)
 			die("Unknown mark: %s", command_buf.buf);
 		oidcpy(&oid, &e->idx.oid);
Previous: brian m. carlsonNext: brian m. carlson
Message 15 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.