Merge branch 'rs/pending'

* rs/pending:
  commit: factor out clear_commit_marks_for_object_array
  checkout: use leak_pending flag
  bundle: use leak_pending flag
  bisect: use leak_pending flag
  revision: add leak_pending flag
  checkout: use add_pending_{object,sha1} in orphan check
  revision: factor out add_pending_sha1
  checkout: check for "Previous HEAD" notice in t2020

Conflicts:
	builtin/checkout.c
	revision.c
This commit is contained in:
Junio C Hamano
2011-10-13 19:03:22 -07:00
8 changed files with 64 additions and 49 deletions

View File

@ -589,23 +589,11 @@ static void update_refs_for_switch(struct checkout_opts *opts,
report_tracking(new);
}
static int add_one_ref_to_rev_list_arg(const char *refname,
const unsigned char *sha1,
int flags,
void *cb_data)
static int add_pending_uninteresting_ref(const char *refname,
const unsigned char *sha1,
int flags, void *cb_data)
{
argv_array_push(cb_data, refname);
return 0;
}
static int clear_commit_marks_from_one_ref(const char *refname,
const unsigned char *sha1,
int flags,
void *cb_data)
{
struct commit *commit = lookup_commit_reference_gently(sha1, 1);
if (commit)
clear_commit_marks(commit, -1);
add_pending_sha1(cb_data, refname, sha1, flags | UNINTERESTING);
return 0;
}
@ -674,18 +662,21 @@ static void suggest_reattach(struct commit *commit, struct rev_info *revs)
*/
static void orphaned_commit_warning(struct commit *commit)
{
struct argv_array args = ARGV_ARRAY_INIT;
struct rev_info revs;
argv_array_push(&args, "(internal)");
argv_array_push(&args, sha1_to_hex(commit->object.sha1));
argv_array_push(&args, "--not");
for_each_ref(add_one_ref_to_rev_list_arg, &args);
argv_array_push(&args, "--");
struct object *object = &commit->object;
struct object_array refs;
init_revisions(&revs, NULL);
if (setup_revisions(args.argc - 1, args.argv, &revs, NULL) != 1)
die(_("internal error: only -- alone should have been left"));
setup_revisions(0, NULL, &revs, NULL);
object->flags &= ~UNINTERESTING;
add_pending_object(&revs, object, sha1_to_hex(object->sha1));
for_each_ref(add_pending_uninteresting_ref, &revs);
refs = revs.pending;
revs.leak_pending = 1;
if (prepare_revision_walk(&revs))
die(_("internal error in revision walk"));
if (!(commit->object.flags & UNINTERESTING))
@ -693,9 +684,8 @@ static void orphaned_commit_warning(struct commit *commit)
else
describe_detached_head(_("Previous HEAD position was"), commit);
argv_array_clear(&args);
clear_commit_marks(commit, -1);
for_each_ref(clear_commit_marks_from_one_ref, NULL);
clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
free(refs.objects);
}
static int switch_branches(struct checkout_opts *opts, struct branch_info *new)