Skip to content

Commit 30aaff4

Browse files
pks-tgitster
authored andcommitted
refs: pass repo when peeling objects
Both `peel_object()` and `peel_iterated_oid()` implicitly rely on `the_repository` to look up objects. Despite the fact that we want to get rid of `the_repository`, it also leads to some restrictions in our ref iterators when trying to retrieve the peeled value for a repository other than `the_repository`. Refactor these functions such that both take a repository as argument and remove the now-unnecessary restrictions. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 19c76e8 commit 30aaff4

20 files changed

+37
-36
lines changed

builtin/describe.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ static int get_name(const char *path, const struct object_id *oid,
200200
}
201201

202202
/* Is it annotated? */
203-
if (!peel_iterated_oid(oid, &peeled)) {
203+
if (!peel_iterated_oid(the_repository, oid, &peeled)) {
204204
is_annotated = !oideq(oid, &peeled);
205205
} else {
206206
oidcpy(&peeled, oid);

builtin/gc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -846,7 +846,7 @@ static int dfs_on_ref(const char *refname UNUSED,
846846
struct commit_list *stack = NULL;
847847
struct commit *commit;
848848

849-
if (!peel_iterated_oid(oid, &peeled))
849+
if (!peel_iterated_oid(the_repository, oid, &peeled))
850850
oid = &peeled;
851851
if (oid_object_info(the_repository, oid, NULL) != OBJ_COMMIT)
852852
return 0;

builtin/pack-objects.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ static int mark_tagged(const char *path UNUSED, const struct object_id *oid,
779779

780780
if (entry)
781781
entry->tagged = 1;
782-
if (!peel_iterated_oid(oid, &peeled)) {
782+
if (!peel_iterated_oid(the_repository, oid, &peeled)) {
783783
entry = packlist_find(&to_pack, &peeled);
784784
if (entry)
785785
entry->tagged = 1;
@@ -3125,7 +3125,7 @@ static int add_ref_tag(const char *tag UNUSED, const struct object_id *oid,
31253125
{
31263126
struct object_id peeled;
31273127

3128-
if (!peel_iterated_oid(oid, &peeled) && obj_is_packed(&peeled))
3128+
if (!peel_iterated_oid(the_repository, oid, &peeled) && obj_is_packed(&peeled))
31293129
add_tag_chain(oid);
31303130
return 0;
31313131
}
@@ -4074,7 +4074,7 @@ static int mark_bitmap_preferred_tip(const char *refname,
40744074
struct object_id peeled;
40754075
struct object *object;
40764076

4077-
if (!peel_iterated_oid(oid, &peeled))
4077+
if (!peel_iterated_oid(the_repository, oid, &peeled))
40784078
oid = &peeled;
40794079

40804080
object = parse_object_or_die(oid, refname);

builtin/repack.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ static int midx_snapshot_ref_one(const char *refname UNUSED,
673673
struct midx_snapshot_ref_data *data = _data;
674674
struct object_id peeled;
675675

676-
if (!peel_iterated_oid(oid, &peeled))
676+
if (!peel_iterated_oid(the_repository, oid, &peeled))
677677
oid = &peeled;
678678

679679
if (oidset_insert(&data->seen, oid))

builtin/show-ref.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ static void show_one(const struct show_one_options *opts,
5050
if (!opts->deref_tags)
5151
return;
5252

53-
if (!peel_iterated_oid(oid, &peeled)) {
53+
if (!peel_iterated_oid(the_repository, oid, &peeled)) {
5454
hex = repo_find_unique_abbrev(the_repository, &peeled, opts->abbrev);
5555
printf("%s %s^{}\n", hex, refname);
5656
}

commit-graph.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1821,7 +1821,7 @@ static int add_ref_to_set(const char *refname UNUSED,
18211821
struct object_id peeled;
18221822
struct refs_cb_data *data = (struct refs_cb_data *)cb_data;
18231823

1824-
if (!peel_iterated_oid(oid, &peeled))
1824+
if (!peel_iterated_oid(the_repository, oid, &peeled))
18251825
oid = &peeled;
18261826
if (oid_object_info(the_repository, oid, NULL) == OBJ_COMMIT)
18271827
oidset_insert(data->commits, oid);

ls-refs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ static int send_ref(const char *refname, const struct object_id *oid,
110110

111111
if (data->peel && oid) {
112112
struct object_id peeled;
113-
if (!peel_iterated_oid(oid, &peeled))
113+
if (!peel_iterated_oid(the_repository, oid, &peeled))
114114
strbuf_addf(&data->buf, " peeled:%s", oid_to_hex(&peeled));
115115
}
116116

midx-write.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ static int add_ref_to_pending(const char *refname,
664664
return 0;
665665
}
666666

667-
if (!peel_iterated_oid(oid, &peeled))
667+
if (!peel_iterated_oid(the_repository, oid, &peeled))
668668
oid = &peeled;
669669

670670
object = parse_object_or_die(oid, refname);

object.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,20 +207,22 @@ struct object *lookup_object_by_type(struct repository *r,
207207
}
208208
}
209209

210-
enum peel_status peel_object(const struct object_id *name, struct object_id *oid)
210+
enum peel_status peel_object(struct repository *r,
211+
const struct object_id *name,
212+
struct object_id *oid)
211213
{
212-
struct object *o = lookup_unknown_object(the_repository, name);
214+
struct object *o = lookup_unknown_object(r, name);
213215

214216
if (o->type == OBJ_NONE) {
215-
int type = oid_object_info(the_repository, name, NULL);
217+
int type = oid_object_info(r, name, NULL);
216218
if (type < 0 || !object_as_type(o, type, 0))
217219
return PEEL_INVALID;
218220
}
219221

220222
if (o->type != OBJ_TAG)
221223
return PEEL_NON_TAG;
222224

223-
o = deref_tag_noverify(o);
225+
o = deref_tag_noverify(r, o);
224226
if (!o)
225227
return PEEL_INVALID;
226228

object.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@ enum peel_status {
288288
* or is not valid, return PEEL_NON_TAG or PEEL_INVALID, respectively,
289289
* and leave oid unchanged.
290290
*/
291-
enum peel_status peel_object(const struct object_id *name, struct object_id *oid);
291+
enum peel_status peel_object(struct repository *r,
292+
const struct object_id *name, struct object_id *oid);
292293

293294
struct object_list *object_list_insert(struct object *item,
294295
struct object_list **list_p);

0 commit comments

Comments
 (0)