sha1-name.c: remove the_repo from get_oid_1()
There is a cyclic dependency between one of these functions so they cannot be converted one by one, so all related functions are converted at once. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
49281cf544
commit
2b1790f5ab
7
cache.h
7
cache.h
@ -1491,8 +1491,11 @@ extern void *read_object_with_reference(const struct object_id *oid,
|
|||||||
unsigned long *size,
|
unsigned long *size,
|
||||||
struct object_id *oid_ret);
|
struct object_id *oid_ret);
|
||||||
|
|
||||||
extern struct object *peel_to_type(const char *name, int namelen,
|
struct object *repo_peel_to_type(struct repository *r,
|
||||||
struct object *o, enum object_type);
|
const char *name, int namelen,
|
||||||
|
struct object *o, enum object_type);
|
||||||
|
#define peel_to_type(name, namelen, obj, type) \
|
||||||
|
repo_peel_to_type(the_repository, name, namelen, obj, type)
|
||||||
|
|
||||||
enum date_mode_type {
|
enum date_mode_type {
|
||||||
DATE_NORMAL = 0,
|
DATE_NORMAL = 0,
|
||||||
|
|||||||
59
sha1-name.c
59
sha1-name.c
@ -770,7 +770,7 @@ static inline int push_mark(const char *string, int len)
|
|||||||
return at_mark(string, len, suffix, ARRAY_SIZE(suffix));
|
return at_mark(string, len, suffix, ARRAY_SIZE(suffix));
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum get_oid_result get_oid_1(const char *name, int len, struct object_id *oid, unsigned lookup_flags);
|
static enum get_oid_result get_oid_1(struct repository *r, const char *name, int len, struct object_id *oid, unsigned lookup_flags);
|
||||||
static int interpret_nth_prior_checkout(struct repository *r, const char *name, int namelen, struct strbuf *buf);
|
static int interpret_nth_prior_checkout(struct repository *r, const char *name, int namelen, struct strbuf *buf);
|
||||||
|
|
||||||
static int get_oid_basic(struct repository *r, const char *str, int len,
|
static int get_oid_basic(struct repository *r, const char *str, int len,
|
||||||
@ -921,18 +921,19 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum get_oid_result get_parent(const char *name, int len,
|
static enum get_oid_result get_parent(struct repository *r,
|
||||||
|
const char *name, int len,
|
||||||
struct object_id *result, int idx)
|
struct object_id *result, int idx)
|
||||||
{
|
{
|
||||||
struct object_id oid;
|
struct object_id oid;
|
||||||
enum get_oid_result ret = get_oid_1(name, len, &oid,
|
enum get_oid_result ret = get_oid_1(r, name, len, &oid,
|
||||||
GET_OID_COMMITTISH);
|
GET_OID_COMMITTISH);
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
struct commit_list *p;
|
struct commit_list *p;
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
commit = lookup_commit_reference(the_repository, &oid);
|
commit = lookup_commit_reference(r, &oid);
|
||||||
if (parse_commit(commit))
|
if (parse_commit(commit))
|
||||||
return MISSING_OBJECT;
|
return MISSING_OBJECT;
|
||||||
if (!idx) {
|
if (!idx) {
|
||||||
@ -950,7 +951,8 @@ static enum get_oid_result get_parent(const char *name, int len,
|
|||||||
return MISSING_OBJECT;
|
return MISSING_OBJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum get_oid_result get_nth_ancestor(const char *name, int len,
|
static enum get_oid_result get_nth_ancestor(struct repository *r,
|
||||||
|
const char *name, int len,
|
||||||
struct object_id *result,
|
struct object_id *result,
|
||||||
int generation)
|
int generation)
|
||||||
{
|
{
|
||||||
@ -958,10 +960,10 @@ static enum get_oid_result get_nth_ancestor(const char *name, int len,
|
|||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = get_oid_1(name, len, &oid, GET_OID_COMMITTISH);
|
ret = get_oid_1(r, name, len, &oid, GET_OID_COMMITTISH);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
commit = lookup_commit_reference(the_repository, &oid);
|
commit = lookup_commit_reference(r, &oid);
|
||||||
if (!commit)
|
if (!commit)
|
||||||
return MISSING_OBJECT;
|
return MISSING_OBJECT;
|
||||||
|
|
||||||
@ -974,20 +976,20 @@ static enum get_oid_result get_nth_ancestor(const char *name, int len,
|
|||||||
return FOUND;
|
return FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct object *peel_to_type(const char *name, int namelen,
|
struct object *repo_peel_to_type(struct repository *r, const char *name, int namelen,
|
||||||
struct object *o, enum object_type expected_type)
|
struct object *o, enum object_type expected_type)
|
||||||
{
|
{
|
||||||
if (name && !namelen)
|
if (name && !namelen)
|
||||||
namelen = strlen(name);
|
namelen = strlen(name);
|
||||||
while (1) {
|
while (1) {
|
||||||
if (!o || (!o->parsed && !parse_object(the_repository, &o->oid)))
|
if (!o || (!o->parsed && !parse_object(r, &o->oid)))
|
||||||
return NULL;
|
return NULL;
|
||||||
if (expected_type == OBJ_ANY || o->type == expected_type)
|
if (expected_type == OBJ_ANY || o->type == expected_type)
|
||||||
return o;
|
return o;
|
||||||
if (o->type == OBJ_TAG)
|
if (o->type == OBJ_TAG)
|
||||||
o = ((struct tag*) o)->tagged;
|
o = ((struct tag*) o)->tagged;
|
||||||
else if (o->type == OBJ_COMMIT)
|
else if (o->type == OBJ_COMMIT)
|
||||||
o = &(get_commit_tree(((struct commit *)o))->object);
|
o = &(repo_get_commit_tree(r, ((struct commit *)o))->object);
|
||||||
else {
|
else {
|
||||||
if (name)
|
if (name)
|
||||||
error("%.*s: expected %s type, but the object "
|
error("%.*s: expected %s type, but the object "
|
||||||
@ -999,8 +1001,8 @@ struct object *peel_to_type(const char *name, int namelen,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int peel_onion(const char *name, int len, struct object_id *oid,
|
static int peel_onion(struct repository *r, const char *name, int len,
|
||||||
unsigned lookup_flags)
|
struct object_id *oid, unsigned lookup_flags)
|
||||||
{
|
{
|
||||||
struct object_id outer;
|
struct object_id outer;
|
||||||
const char *sp;
|
const char *sp;
|
||||||
@ -1050,15 +1052,15 @@ static int peel_onion(const char *name, int len, struct object_id *oid,
|
|||||||
else if (expected_type == OBJ_TREE)
|
else if (expected_type == OBJ_TREE)
|
||||||
lookup_flags |= GET_OID_TREEISH;
|
lookup_flags |= GET_OID_TREEISH;
|
||||||
|
|
||||||
if (get_oid_1(name, sp - name - 2, &outer, lookup_flags))
|
if (get_oid_1(r, name, sp - name - 2, &outer, lookup_flags))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
o = parse_object(the_repository, &outer);
|
o = parse_object(r, &outer);
|
||||||
if (!o)
|
if (!o)
|
||||||
return -1;
|
return -1;
|
||||||
if (!expected_type) {
|
if (!expected_type) {
|
||||||
o = deref_tag(the_repository, o, name, sp - name - 2);
|
o = deref_tag(r, o, name, sp - name - 2);
|
||||||
if (!o || (!o->parsed && !parse_object(the_repository, &o->oid)))
|
if (!o || (!o->parsed && !parse_object(r, &o->oid)))
|
||||||
return -1;
|
return -1;
|
||||||
oidcpy(oid, &o->oid);
|
oidcpy(oid, &o->oid);
|
||||||
return 0;
|
return 0;
|
||||||
@ -1069,7 +1071,7 @@ static int peel_onion(const char *name, int len, struct object_id *oid,
|
|||||||
* if we do not get the needed object, we should
|
* if we do not get the needed object, we should
|
||||||
* barf.
|
* barf.
|
||||||
*/
|
*/
|
||||||
o = peel_to_type(name, len, o, expected_type);
|
o = repo_peel_to_type(r, name, len, o, expected_type);
|
||||||
if (!o)
|
if (!o)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -1089,7 +1091,7 @@ static int peel_onion(const char *name, int len, struct object_id *oid,
|
|||||||
|
|
||||||
prefix = xstrndup(sp + 1, name + len - 1 - (sp + 1));
|
prefix = xstrndup(sp + 1, name + len - 1 - (sp + 1));
|
||||||
commit_list_insert((struct commit *)o, &list);
|
commit_list_insert((struct commit *)o, &list);
|
||||||
ret = get_oid_oneline(the_repository, prefix, oid, list);
|
ret = get_oid_oneline(r, prefix, oid, list);
|
||||||
free(prefix);
|
free(prefix);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1120,7 +1122,8 @@ static int get_describe_name(struct repository *r,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum get_oid_result get_oid_1(const char *name, int len,
|
static enum get_oid_result get_oid_1(struct repository *r,
|
||||||
|
const char *name, int len,
|
||||||
struct object_id *oid,
|
struct object_id *oid,
|
||||||
unsigned lookup_flags)
|
unsigned lookup_flags)
|
||||||
{
|
{
|
||||||
@ -1149,25 +1152,25 @@ static enum get_oid_result get_oid_1(const char *name, int len,
|
|||||||
if (!num && len1 == len - 1)
|
if (!num && len1 == len - 1)
|
||||||
num = 1;
|
num = 1;
|
||||||
if (has_suffix == '^')
|
if (has_suffix == '^')
|
||||||
return get_parent(name, len1, oid, num);
|
return get_parent(r, name, len1, oid, num);
|
||||||
/* else if (has_suffix == '~') -- goes without saying */
|
/* else if (has_suffix == '~') -- goes without saying */
|
||||||
return get_nth_ancestor(name, len1, oid, num);
|
return get_nth_ancestor(r, name, len1, oid, num);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = peel_onion(name, len, oid, lookup_flags);
|
ret = peel_onion(r, name, len, oid, lookup_flags);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return FOUND;
|
return FOUND;
|
||||||
|
|
||||||
ret = get_oid_basic(the_repository, name, len, oid, lookup_flags);
|
ret = get_oid_basic(r, name, len, oid, lookup_flags);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return FOUND;
|
return FOUND;
|
||||||
|
|
||||||
/* It could be describe output that is "SOMETHING-gXXXX" */
|
/* It could be describe output that is "SOMETHING-gXXXX" */
|
||||||
ret = get_describe_name(the_repository, name, len, oid);
|
ret = get_describe_name(r, name, len, oid);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return FOUND;
|
return FOUND;
|
||||||
|
|
||||||
return get_short_oid(the_repository, name, len, oid, lookup_flags);
|
return get_short_oid(r, name, len, oid, lookup_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1741,7 +1744,7 @@ static enum get_oid_result get_oid_with_context_1(struct repository *repo,
|
|||||||
memset(oc, 0, sizeof(*oc));
|
memset(oc, 0, sizeof(*oc));
|
||||||
oc->mode = S_IFINVALID;
|
oc->mode = S_IFINVALID;
|
||||||
strbuf_init(&oc->symlink_path, 0);
|
strbuf_init(&oc->symlink_path, 0);
|
||||||
ret = get_oid_1(name, namelen, oid, flags);
|
ret = get_oid_1(repo, name, namelen, oid, flags);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return ret;
|
return ret;
|
||||||
/*
|
/*
|
||||||
@ -1822,7 +1825,7 @@ static enum get_oid_result get_oid_with_context_1(struct repository *repo,
|
|||||||
sub_flags &= ~GET_OID_DISAMBIGUATORS;
|
sub_flags &= ~GET_OID_DISAMBIGUATORS;
|
||||||
sub_flags |= GET_OID_TREEISH;
|
sub_flags |= GET_OID_TREEISH;
|
||||||
|
|
||||||
if (!get_oid_1(name, len, &tree_oid, sub_flags)) {
|
if (!get_oid_1(repo, name, len, &tree_oid, sub_flags)) {
|
||||||
const char *filename = cp+1;
|
const char *filename = cp+1;
|
||||||
char *new_filename = NULL;
|
char *new_filename = NULL;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user