reachable: reuse revision.c "add all reflogs" code
We want to add all reflog entries as tips for finding reachable objects. The revision machinery can already do this (to support "rev-list --reflog"); we can reuse that code. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
5f78a431ab
commit
718ccc9731
24
reachable.c
24
reachable.c
@ -22,22 +22,6 @@ static void update_progress(struct connectivity_progress *cp)
|
|||||||
display_progress(cp->progress, cp->count);
|
display_progress(cp->progress, cp->count);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_one_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
|
|
||||||
const char *email, unsigned long timestamp, int tz,
|
|
||||||
const char *message, void *cb_data)
|
|
||||||
{
|
|
||||||
struct object *object;
|
|
||||||
struct rev_info *revs = (struct rev_info *)cb_data;
|
|
||||||
|
|
||||||
object = parse_object(osha1);
|
|
||||||
if (object)
|
|
||||||
add_pending_object(revs, object, "");
|
|
||||||
object = parse_object(nsha1);
|
|
||||||
if (object)
|
|
||||||
add_pending_object(revs, object, "");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int add_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
|
static int add_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
|
||||||
{
|
{
|
||||||
struct object *object = parse_object_or_die(sha1, path);
|
struct object *object = parse_object_or_die(sha1, path);
|
||||||
@ -48,12 +32,6 @@ static int add_one_ref(const char *path, const unsigned char *sha1, int flag, vo
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_one_reflog(const char *path, const unsigned char *sha1, int flag, void *cb_data)
|
|
||||||
{
|
|
||||||
for_each_reflog_ent(path, add_one_reflog_ent, cb_data);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void add_one_tree(const unsigned char *sha1, struct rev_info *revs)
|
static void add_one_tree(const unsigned char *sha1, struct rev_info *revs)
|
||||||
{
|
{
|
||||||
struct tree *tree = lookup_tree(sha1);
|
struct tree *tree = lookup_tree(sha1);
|
||||||
@ -138,7 +116,7 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,
|
|||||||
|
|
||||||
/* Add all reflog info */
|
/* Add all reflog info */
|
||||||
if (mark_reflog)
|
if (mark_reflog)
|
||||||
for_each_reflog(add_one_reflog, revs);
|
add_reflogs_to_pending(revs, 0);
|
||||||
|
|
||||||
cp.progress = progress;
|
cp.progress = progress;
|
||||||
cp.count = 0;
|
cp.count = 0;
|
||||||
|
@ -1275,7 +1275,7 @@ static int handle_one_reflog(const char *path, const unsigned char *sha1, int fl
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_reflog(struct rev_info *revs, unsigned flags)
|
void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)
|
||||||
{
|
{
|
||||||
struct all_refs_cb cb;
|
struct all_refs_cb cb;
|
||||||
cb.all_revs = revs;
|
cb.all_revs = revs;
|
||||||
@ -2061,7 +2061,7 @@ static int handle_revision_pseudo_opt(const char *submodule,
|
|||||||
for_each_glob_ref_in(handle_one_ref, arg + 10, "refs/remotes/", &cb);
|
for_each_glob_ref_in(handle_one_ref, arg + 10, "refs/remotes/", &cb);
|
||||||
clear_ref_exclusion(&revs->ref_excludes);
|
clear_ref_exclusion(&revs->ref_excludes);
|
||||||
} else if (!strcmp(arg, "--reflog")) {
|
} else if (!strcmp(arg, "--reflog")) {
|
||||||
handle_reflog(revs, *flags);
|
add_reflogs_to_pending(revs, *flags);
|
||||||
} else if (!strcmp(arg, "--not")) {
|
} else if (!strcmp(arg, "--not")) {
|
||||||
*flags ^= UNINTERESTING | BOTTOM;
|
*flags ^= UNINTERESTING | BOTTOM;
|
||||||
} else if (!strcmp(arg, "--no-walk")) {
|
} else if (!strcmp(arg, "--no-walk")) {
|
||||||
|
@ -276,6 +276,7 @@ extern void add_pending_sha1(struct rev_info *revs,
|
|||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
extern void add_head_to_pending(struct rev_info *);
|
extern void add_head_to_pending(struct rev_info *);
|
||||||
|
extern void add_reflogs_to_pending(struct rev_info *, unsigned int flags);
|
||||||
|
|
||||||
enum commit_action {
|
enum commit_action {
|
||||||
commit_ignore,
|
commit_ignore,
|
||||||
|
Reference in New Issue
Block a user