From: "René Scharfe" <l.s.r@web•de>
To: git@vger•kernel.org
Subject: [PATCH 3/4] tag: support arbitrary repositories in parse_tag()
Date: Sun, 28 Dec 2025 19:10:50 +0100 [thread overview]
Message-ID: <20251228181051.68724-4-l.s.r@web.de> (raw)
In-Reply-To: <20251228181051.68724-1-l.s.r@web.de>
Allow callers of parse_tag() pass in the repository to use. Let most of
them pass in the_repository to get the same result as before. One of
them has stopped using the_repository in ef9b0370da (sha1-name.c: store
and use repo in struct disambiguate_state, 2019-04-16); let it pass in
its stored repository.
Signed-off-by: René Scharfe <l.s.r@web•de>
---
builtin/describe.c | 6 +++---
builtin/pack-objects.c | 2 +-
fsck.c | 2 +-
object-name.c | 2 +-
ref-filter.c | 2 +-
tag.c | 8 ++++----
tag.h | 2 +-
walker.c | 2 +-
8 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/builtin/describe.c b/builtin/describe.c
index 443546aaac..989a78d715 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -112,13 +112,13 @@ static int replace_name(struct commit_name *e,
if (!e->tag) {
t = lookup_tag(the_repository, &e->oid);
- if (!t || parse_tag(t))
+ if (!t || parse_tag(the_repository, t))
return 1;
e->tag = t;
}
t = lookup_tag(the_repository, oid);
- if (!t || parse_tag(t))
+ if (!t || parse_tag(the_repository, t))
return 0;
*tag = t;
@@ -335,7 +335,7 @@ static void append_name(struct commit_name *n, struct strbuf *dst)
{
if (n->prio == 2 && !n->tag) {
n->tag = lookup_tag(the_repository, &n->oid);
- if (!n->tag || parse_tag(n->tag))
+ if (!n->tag || parse_tag(the_repository, n->tag))
die(_("annotated tag %s not available"), n->path);
}
if (n->tag && !n->name_checked) {
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 1ce8d6ee21..ca44b7894f 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -3293,7 +3293,7 @@ static void add_tag_chain(const struct object_id *oid)
tag = lookup_tag(the_repository, oid);
while (1) {
- if (!tag || parse_tag(tag) || !tag->tagged)
+ if (!tag || parse_tag(the_repository, tag) || !tag->tagged)
die(_("unable to pack objects reachable from tag %s"),
oid_to_hex(oid));
diff --git a/fsck.c b/fsck.c
index 138fffded9..fae18d8561 100644
--- a/fsck.c
+++ b/fsck.c
@@ -474,7 +474,7 @@ static int fsck_walk_tag(struct tag *tag, void *data, struct fsck_options *optio
{
const char *name = fsck_get_object_name(options, &tag->object.oid);
- if (parse_tag(tag))
+ if (parse_tag(the_repository, tag))
return -1;
if (name)
fsck_put_object_name(options, &tag->tagged->oid, "%s", name);
diff --git a/object-name.c b/object-name.c
index fed5de5153..8b862c124e 100644
--- a/object-name.c
+++ b/object-name.c
@@ -449,7 +449,7 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
} else if (type == OBJ_TAG) {
struct tag *tag = lookup_tag(ds->repo, oid);
- if (!parse_tag(tag) && tag->tag) {
+ if (!parse_tag(ds->repo, tag) && tag->tag) {
/*
* TRANSLATORS: This is a line of ambiguous
* tag object output. E.g.:
diff --git a/ref-filter.c b/ref-filter.c
index d7454269e8..c318f9ca0e 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2866,7 +2866,7 @@ static int match_points_at(struct oid_array *points_at,
while (obj && obj->type == OBJ_TAG) {
struct tag *tag = (struct tag *)obj;
- if (parse_tag(tag) < 0) {
+ if (parse_tag(the_repository, tag) < 0) {
obj = NULL;
break;
}
diff --git a/tag.c b/tag.c
index 9373c49d06..9daeaf2a78 100644
--- a/tag.c
+++ b/tag.c
@@ -13,6 +13,7 @@
#include "gpg-interface.h"
#include "hex.h"
#include "packfile.h"
+#include "repository.h"
const char *tag_type = "tag";
@@ -203,7 +204,7 @@ int parse_tag_buffer(struct repository *r, struct tag *item, const void *data, u
return 0;
}
-int parse_tag(struct tag *item)
+int parse_tag(struct repository *r, struct tag *item)
{
enum object_type type;
void *data;
@@ -212,8 +213,7 @@ int parse_tag(struct tag *item)
if (item->object.parsed)
return 0;
- data = odb_read_object(the_repository->objects, &item->object.oid,
- &type, &size);
+ data = odb_read_object(r->objects, &item->object.oid, &type, &size);
if (!data)
return error("Could not read %s",
oid_to_hex(&item->object.oid));
@@ -222,7 +222,7 @@ int parse_tag(struct tag *item)
return error("Object %s not a tag",
oid_to_hex(&item->object.oid));
}
- ret = parse_tag_buffer(the_repository, item, data, size);
+ ret = parse_tag_buffer(r, item, data, size);
free(data);
return ret;
}
diff --git a/tag.h b/tag.h
index 55c2d0792b..534687c4ca 100644
--- a/tag.h
+++ b/tag.h
@@ -13,7 +13,7 @@ struct tag {
};
struct tag *lookup_tag(struct repository *r, const struct object_id *oid);
int parse_tag_buffer(struct repository *r, struct tag *item, const void *data, unsigned long size);
-int parse_tag(struct tag *item);
+int parse_tag(struct repository *r, struct tag *item);
void release_tag_memory(struct tag *t);
struct object *deref_tag(struct repository *r, struct object *, const char *, int);
int gpg_verify_tag(struct repository *r, const struct object_id *oid,
diff --git a/walker.c b/walker.c
index 409b646578..2891563b03 100644
--- a/walker.c
+++ b/walker.c
@@ -115,7 +115,7 @@ static int process_commit(struct walker *walker, struct commit *commit)
static int process_tag(struct walker *walker, struct tag *tag)
{
- if (parse_tag(tag))
+ if (parse_tag(the_repository, tag))
return -1;
return process(walker, tag->tagged);
}
--
2.52.0
next prev parent reply other threads:[~2025-12-28 18:10 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-28 18:10 [PATCH 0/4] tag: stop using the_repository René Scharfe
2025-12-28 18:10 ` [PATCH 1/4] tag: use algo of repo parameter in parse_tag_buffer() René Scharfe
2025-12-30 16:51 ` Kristoffer Haugsbakk
2025-12-28 18:10 ` [PATCH 2/4] tag: support arbitrary repositories in gpg_verify_tag() René Scharfe
2025-12-28 18:10 ` René Scharfe [this message]
2025-12-28 18:10 ` [PATCH 4/4] tag: stop using the_repository René Scharfe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251228181051.68724-4-l.s.r@web.de \
--to=l.s.r@web$(echo .)de \
--cc=git@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox