зеркало из https://github.com/microsoft/git.git
revision.c: use refs_for_each*() instead of for_each_*_submodule()
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:
Родитель
62f0b399e0
Коммит
073cf63c52
9
refs.c
9
refs.c
|
@ -1362,16 +1362,15 @@ int for_each_ref_in_submodule(const char *submodule, const char *prefix,
|
||||||
prefix, fn, cb_data);
|
prefix, fn, cb_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
int for_each_fullref_in_submodule(const char *submodule, const char *prefix,
|
int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
|
||||||
each_ref_fn fn, void *cb_data,
|
each_ref_fn fn, void *cb_data,
|
||||||
unsigned int broken)
|
unsigned int broken)
|
||||||
{
|
{
|
||||||
unsigned int flag = 0;
|
unsigned int flag = 0;
|
||||||
|
|
||||||
if (broken)
|
if (broken)
|
||||||
flag = DO_FOR_EACH_INCLUDE_BROKEN;
|
flag = DO_FOR_EACH_INCLUDE_BROKEN;
|
||||||
return do_for_each_ref(get_submodule_ref_store(submodule),
|
return do_for_each_ref(refs, prefix, fn, 0, flag, cb_data);
|
||||||
prefix, fn, 0, flag, cb_data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int for_each_replace_ref(each_ref_fn fn, void *cb_data)
|
int for_each_replace_ref(each_ref_fn fn, void *cb_data)
|
||||||
|
|
6
refs.h
6
refs.h
|
@ -291,6 +291,9 @@ int refs_for_each_remote_ref(struct ref_store *refs,
|
||||||
int head_ref(each_ref_fn fn, void *cb_data);
|
int head_ref(each_ref_fn fn, void *cb_data);
|
||||||
int for_each_ref(each_ref_fn fn, void *cb_data);
|
int for_each_ref(each_ref_fn fn, void *cb_data);
|
||||||
int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data);
|
int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data);
|
||||||
|
int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
|
||||||
|
each_ref_fn fn, void *cb_data,
|
||||||
|
unsigned int broken);
|
||||||
int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data,
|
int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data,
|
||||||
unsigned int broken);
|
unsigned int broken);
|
||||||
int for_each_tag_ref(each_ref_fn fn, void *cb_data);
|
int for_each_tag_ref(each_ref_fn fn, void *cb_data);
|
||||||
|
@ -306,9 +309,6 @@ int for_each_ref_submodule(const char *submodule,
|
||||||
each_ref_fn fn, void *cb_data);
|
each_ref_fn fn, void *cb_data);
|
||||||
int for_each_ref_in_submodule(const char *submodule, const char *prefix,
|
int for_each_ref_in_submodule(const char *submodule, const char *prefix,
|
||||||
each_ref_fn fn, void *cb_data);
|
each_ref_fn fn, void *cb_data);
|
||||||
int for_each_fullref_in_submodule(const char *submodule, const char *prefix,
|
|
||||||
each_ref_fn fn, void *cb_data,
|
|
||||||
unsigned int broken);
|
|
||||||
int for_each_tag_ref_submodule(const char *submodule,
|
int for_each_tag_ref_submodule(const char *submodule,
|
||||||
each_ref_fn fn, void *cb_data);
|
each_ref_fn fn, void *cb_data);
|
||||||
int for_each_branch_ref_submodule(const char *submodule,
|
int for_each_branch_ref_submodule(const char *submodule,
|
||||||
|
|
48
revision.c
48
revision.c
|
@ -1188,12 +1188,19 @@ void add_ref_exclusion(struct string_list **ref_excludes_p, const char *exclude)
|
||||||
string_list_append(*ref_excludes_p, exclude);
|
string_list_append(*ref_excludes_p, exclude);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_refs(const char *submodule, struct rev_info *revs, unsigned flags,
|
static void handle_refs(struct ref_store *refs,
|
||||||
int (*for_each)(const char *, each_ref_fn, void *))
|
struct rev_info *revs, unsigned flags,
|
||||||
|
int (*for_each)(struct ref_store *, each_ref_fn, void *))
|
||||||
{
|
{
|
||||||
struct all_refs_cb cb;
|
struct all_refs_cb cb;
|
||||||
|
|
||||||
|
if (!refs) {
|
||||||
|
/* this could happen with uninitialized submodules */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
init_all_refs_cb(&cb, revs, flags);
|
init_all_refs_cb(&cb, revs, flags);
|
||||||
for_each(submodule, handle_one_ref, &cb);
|
for_each(refs, handle_one_ref, &cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_one_reflog_commit(struct object_id *oid, void *cb_data)
|
static void handle_one_reflog_commit(struct object_id *oid, void *cb_data)
|
||||||
|
@ -2095,23 +2102,25 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
|
||||||
ctx->argc -= n;
|
ctx->argc -= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int for_each_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data, const char *term) {
|
static int for_each_bisect_ref(struct ref_store *refs, each_ref_fn fn,
|
||||||
|
void *cb_data, const char *term)
|
||||||
|
{
|
||||||
struct strbuf bisect_refs = STRBUF_INIT;
|
struct strbuf bisect_refs = STRBUF_INIT;
|
||||||
int status;
|
int status;
|
||||||
strbuf_addf(&bisect_refs, "refs/bisect/%s", term);
|
strbuf_addf(&bisect_refs, "refs/bisect/%s", term);
|
||||||
status = for_each_fullref_in_submodule(submodule, bisect_refs.buf, fn, cb_data, 0);
|
status = refs_for_each_fullref_in(refs, bisect_refs.buf, fn, cb_data, 0);
|
||||||
strbuf_release(&bisect_refs);
|
strbuf_release(&bisect_refs);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int for_each_bad_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data)
|
static int for_each_bad_bisect_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
|
||||||
{
|
{
|
||||||
return for_each_bisect_ref(submodule, fn, cb_data, term_bad);
|
return for_each_bisect_ref(refs, fn, cb_data, term_bad);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int for_each_good_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data)
|
static int for_each_good_bisect_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
|
||||||
{
|
{
|
||||||
return for_each_bisect_ref(submodule, fn, cb_data, term_good);
|
return for_each_bisect_ref(refs, fn, cb_data, term_good);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int handle_revision_pseudo_opt(const char *submodule,
|
static int handle_revision_pseudo_opt(const char *submodule,
|
||||||
|
@ -2120,8 +2129,14 @@ static int handle_revision_pseudo_opt(const char *submodule,
|
||||||
{
|
{
|
||||||
const char *arg = argv[0];
|
const char *arg = argv[0];
|
||||||
const char *optarg;
|
const char *optarg;
|
||||||
|
struct ref_store *refs;
|
||||||
int argcount;
|
int argcount;
|
||||||
|
|
||||||
|
if (submodule) {
|
||||||
|
refs = get_submodule_ref_store(submodule);
|
||||||
|
} else
|
||||||
|
refs = get_main_ref_store();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE!
|
* NOTE!
|
||||||
*
|
*
|
||||||
|
@ -2133,22 +2148,23 @@ static int handle_revision_pseudo_opt(const char *submodule,
|
||||||
* register it in the list at the top of handle_revision_opt.
|
* register it in the list at the top of handle_revision_opt.
|
||||||
*/
|
*/
|
||||||
if (!strcmp(arg, "--all")) {
|
if (!strcmp(arg, "--all")) {
|
||||||
handle_refs(submodule, revs, *flags, for_each_ref_submodule);
|
handle_refs(refs, revs, *flags, refs_for_each_ref);
|
||||||
handle_refs(submodule, revs, *flags, head_ref_submodule);
|
handle_refs(refs, revs, *flags, refs_head_ref);
|
||||||
clear_ref_exclusion(&revs->ref_excludes);
|
clear_ref_exclusion(&revs->ref_excludes);
|
||||||
} else if (!strcmp(arg, "--branches")) {
|
} else if (!strcmp(arg, "--branches")) {
|
||||||
handle_refs(submodule, revs, *flags, for_each_branch_ref_submodule);
|
handle_refs(refs, revs, *flags, refs_for_each_branch_ref);
|
||||||
clear_ref_exclusion(&revs->ref_excludes);
|
clear_ref_exclusion(&revs->ref_excludes);
|
||||||
} else if (!strcmp(arg, "--bisect")) {
|
} else if (!strcmp(arg, "--bisect")) {
|
||||||
read_bisect_terms(&term_bad, &term_good);
|
read_bisect_terms(&term_bad, &term_good);
|
||||||
handle_refs(submodule, revs, *flags, for_each_bad_bisect_ref);
|
handle_refs(refs, revs, *flags, for_each_bad_bisect_ref);
|
||||||
handle_refs(submodule, revs, *flags ^ (UNINTERESTING | BOTTOM), for_each_good_bisect_ref);
|
handle_refs(refs, revs, *flags ^ (UNINTERESTING | BOTTOM),
|
||||||
|
for_each_good_bisect_ref);
|
||||||
revs->bisect = 1;
|
revs->bisect = 1;
|
||||||
} else if (!strcmp(arg, "--tags")) {
|
} else if (!strcmp(arg, "--tags")) {
|
||||||
handle_refs(submodule, revs, *flags, for_each_tag_ref_submodule);
|
handle_refs(refs, revs, *flags, refs_for_each_tag_ref);
|
||||||
clear_ref_exclusion(&revs->ref_excludes);
|
clear_ref_exclusion(&revs->ref_excludes);
|
||||||
} else if (!strcmp(arg, "--remotes")) {
|
} else if (!strcmp(arg, "--remotes")) {
|
||||||
handle_refs(submodule, revs, *flags, for_each_remote_ref_submodule);
|
handle_refs(refs, revs, *flags, refs_for_each_remote_ref);
|
||||||
clear_ref_exclusion(&revs->ref_excludes);
|
clear_ref_exclusion(&revs->ref_excludes);
|
||||||
} else if ((argcount = parse_long_opt("glob", argv, &optarg))) {
|
} else if ((argcount = parse_long_opt("glob", argv, &optarg))) {
|
||||||
struct all_refs_cb cb;
|
struct all_refs_cb cb;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче