|
|
|
@ -51,7 +51,8 @@ static void mark_blob_uninteresting(struct blob *blob)
@@ -51,7 +51,8 @@ static void mark_blob_uninteresting(struct blob *blob)
|
|
|
|
|
blob->object.flags |= UNINTERESTING; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void mark_tree_contents_uninteresting(struct tree *tree) |
|
|
|
|
static void mark_tree_contents_uninteresting(struct repository *r, |
|
|
|
|
struct tree *tree) |
|
|
|
|
{ |
|
|
|
|
struct tree_desc desc; |
|
|
|
|
struct name_entry entry; |
|
|
|
@ -63,10 +64,10 @@ static void mark_tree_contents_uninteresting(struct tree *tree)
@@ -63,10 +64,10 @@ static void mark_tree_contents_uninteresting(struct tree *tree)
|
|
|
|
|
while (tree_entry(&desc, &entry)) { |
|
|
|
|
switch (object_type(entry.mode)) { |
|
|
|
|
case OBJ_TREE: |
|
|
|
|
mark_tree_uninteresting(lookup_tree(the_repository, entry.oid)); |
|
|
|
|
mark_tree_uninteresting(r, lookup_tree(r, entry.oid)); |
|
|
|
|
break; |
|
|
|
|
case OBJ_BLOB: |
|
|
|
|
mark_blob_uninteresting(lookup_blob(the_repository, entry.oid)); |
|
|
|
|
mark_blob_uninteresting(lookup_blob(r, entry.oid)); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
/* Subproject commit - not in this repository */ |
|
|
|
@ -81,7 +82,7 @@ static void mark_tree_contents_uninteresting(struct tree *tree)
@@ -81,7 +82,7 @@ static void mark_tree_contents_uninteresting(struct tree *tree)
|
|
|
|
|
free_tree_buffer(tree); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void mark_tree_uninteresting(struct tree *tree) |
|
|
|
|
void mark_tree_uninteresting(struct repository *r, struct tree *tree) |
|
|
|
|
{ |
|
|
|
|
struct object *obj; |
|
|
|
|
|
|
|
|
@ -92,7 +93,7 @@ void mark_tree_uninteresting(struct tree *tree)
@@ -92,7 +93,7 @@ void mark_tree_uninteresting(struct tree *tree)
|
|
|
|
|
if (obj->flags & UNINTERESTING) |
|
|
|
|
return; |
|
|
|
|
obj->flags |= UNINTERESTING; |
|
|
|
|
mark_tree_contents_uninteresting(tree); |
|
|
|
|
mark_tree_contents_uninteresting(r, tree); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
struct commit_stack { |
|
|
|
@ -198,7 +199,7 @@ void add_head_to_pending(struct rev_info *revs)
@@ -198,7 +199,7 @@ void add_head_to_pending(struct rev_info *revs)
|
|
|
|
|
struct object *obj; |
|
|
|
|
if (get_oid("HEAD", &oid)) |
|
|
|
|
return; |
|
|
|
|
obj = parse_object(the_repository, &oid); |
|
|
|
|
obj = parse_object(revs->repo, &oid); |
|
|
|
|
if (!obj) |
|
|
|
|
return; |
|
|
|
|
add_pending_object(revs, obj, "HEAD"); |
|
|
|
@ -210,7 +211,7 @@ static struct object *get_reference(struct rev_info *revs, const char *name,
@@ -210,7 +211,7 @@ static struct object *get_reference(struct rev_info *revs, const char *name,
|
|
|
|
|
{ |
|
|
|
|
struct object *object; |
|
|
|
|
|
|
|
|
|
object = parse_object(the_repository, oid); |
|
|
|
|
object = parse_object(revs->repo, oid); |
|
|
|
|
if (!object) { |
|
|
|
|
if (revs->ignore_missing) |
|
|
|
|
return object; |
|
|
|
@ -247,7 +248,7 @@ static struct commit *handle_commit(struct rev_info *revs,
@@ -247,7 +248,7 @@ static struct commit *handle_commit(struct rev_info *revs,
|
|
|
|
|
add_pending_object(revs, object, tag->tag); |
|
|
|
|
if (!tag->tagged) |
|
|
|
|
die("bad tag"); |
|
|
|
|
object = parse_object(the_repository, &tag->tagged->oid); |
|
|
|
|
object = parse_object(revs->repo, &tag->tagged->oid); |
|
|
|
|
if (!object) { |
|
|
|
|
if (revs->ignore_missing_links || (flags & UNINTERESTING)) |
|
|
|
|
return NULL; |
|
|
|
@ -297,7 +298,7 @@ static struct commit *handle_commit(struct rev_info *revs,
@@ -297,7 +298,7 @@ static struct commit *handle_commit(struct rev_info *revs,
|
|
|
|
|
if (!revs->tree_objects) |
|
|
|
|
return NULL; |
|
|
|
|
if (flags & UNINTERESTING) { |
|
|
|
|
mark_tree_contents_uninteresting(tree); |
|
|
|
|
mark_tree_contents_uninteresting(revs->repo, tree); |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
add_pending_object_with_path(revs, object, name, mode, path); |
|
|
|
@ -1253,7 +1254,7 @@ static void handle_one_reflog_commit(struct object_id *oid, void *cb_data)
@@ -1253,7 +1254,7 @@ static void handle_one_reflog_commit(struct object_id *oid, void *cb_data)
|
|
|
|
|
{ |
|
|
|
|
struct all_refs_cb *cb = cb_data; |
|
|
|
|
if (!is_null_oid(oid)) { |
|
|
|
|
struct object *o = parse_object(the_repository, oid); |
|
|
|
|
struct object *o = parse_object(cb->all_revs->repo, oid); |
|
|
|
|
if (o) { |
|
|
|
|
o->flags |= cb->all_flags; |
|
|
|
|
/* ??? CMDLINEFLAGS ??? */ |
|
|
|
@ -1312,7 +1313,7 @@ void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)
@@ -1312,7 +1313,7 @@ void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)
|
|
|
|
|
|
|
|
|
|
cb.all_revs = revs; |
|
|
|
|
cb.all_flags = flags; |
|
|
|
|
cb.refs = get_main_ref_store(the_repository); |
|
|
|
|
cb.refs = get_main_ref_store(revs->repo); |
|
|
|
|
for_each_reflog(handle_one_reflog, &cb); |
|
|
|
|
|
|
|
|
|
if (!revs->single_worktree) |
|
|
|
@ -1326,7 +1327,7 @@ static void add_cache_tree(struct cache_tree *it, struct rev_info *revs,
@@ -1326,7 +1327,7 @@ static void add_cache_tree(struct cache_tree *it, struct rev_info *revs,
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
if (it->entry_count >= 0) { |
|
|
|
|
struct tree *tree = lookup_tree(the_repository, &it->oid); |
|
|
|
|
struct tree *tree = lookup_tree(revs->repo, &it->oid); |
|
|
|
|
add_pending_object_with_path(revs, &tree->object, "", |
|
|
|
|
040000, path->buf); |
|
|
|
|
} |
|
|
|
@ -1352,7 +1353,7 @@ static void do_add_index_objects_to_pending(struct rev_info *revs,
@@ -1352,7 +1353,7 @@ static void do_add_index_objects_to_pending(struct rev_info *revs,
|
|
|
|
|
if (S_ISGITLINK(ce->ce_mode)) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
blob = lookup_blob(the_repository, &ce->oid); |
|
|
|
|
blob = lookup_blob(revs->repo, &ce->oid); |
|
|
|
|
if (!blob) |
|
|
|
|
die("unable to add index blob to traversal"); |
|
|
|
|
add_pending_object_with_path(revs, &blob->object, "", |
|
|
|
@ -1585,8 +1586,8 @@ static int handle_dotdot_1(const char *arg, char *dotdot,
@@ -1585,8 +1586,8 @@ static int handle_dotdot_1(const char *arg, char *dotdot,
|
|
|
|
|
*dotdot = '\0'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
a_obj = parse_object(the_repository, &a_oid); |
|
|
|
|
b_obj = parse_object(the_repository, &b_oid); |
|
|
|
|
a_obj = parse_object(revs->repo, &a_oid); |
|
|
|
|
b_obj = parse_object(revs->repo, &b_oid); |
|
|
|
|
if (!a_obj || !b_obj) |
|
|
|
|
return dotdot_missing(arg, dotdot, revs, symmetric); |
|
|
|
|
|
|
|
|
@ -1599,8 +1600,8 @@ static int handle_dotdot_1(const char *arg, char *dotdot,
@@ -1599,8 +1600,8 @@ static int handle_dotdot_1(const char *arg, char *dotdot,
|
|
|
|
|
struct commit *a, *b; |
|
|
|
|
struct commit_list *exclude; |
|
|
|
|
|
|
|
|
|
a = lookup_commit_reference(the_repository, &a_obj->oid); |
|
|
|
|
b = lookup_commit_reference(the_repository, &b_obj->oid); |
|
|
|
|
a = lookup_commit_reference(revs->repo, &a_obj->oid); |
|
|
|
|
b = lookup_commit_reference(revs->repo, &b_obj->oid); |
|
|
|
|
if (!a || !b) |
|
|
|
|
return dotdot_missing(arg, dotdot, revs, symmetric); |
|
|
|
|
|
|
|
|
@ -2208,7 +2209,7 @@ static int handle_revision_pseudo_opt(const char *submodule,
@@ -2208,7 +2209,7 @@ static int handle_revision_pseudo_opt(const char *submodule,
|
|
|
|
|
BUG("--single-worktree cannot be used together with submodule"); |
|
|
|
|
refs = get_submodule_ref_store(submodule); |
|
|
|
|
} else |
|
|
|
|
refs = get_main_ref_store(the_repository); |
|
|
|
|
refs = get_main_ref_store(revs->repo); |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* NOTE! |
|
|
|
@ -2889,9 +2890,10 @@ void reset_revision_walk(void)
@@ -2889,9 +2890,10 @@ void reset_revision_walk(void)
|
|
|
|
|
static int mark_uninteresting(const struct object_id *oid, |
|
|
|
|
struct packed_git *pack, |
|
|
|
|
uint32_t pos, |
|
|
|
|
void *unused) |
|
|
|
|
void *cb) |
|
|
|
|
{ |
|
|
|
|
struct object *o = parse_object(the_repository, oid); |
|
|
|
|
struct rev_info *revs = cb; |
|
|
|
|
struct object *o = parse_object(revs->repo, oid); |
|
|
|
|
o->flags |= UNINTERESTING | SEEN; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
@ -2924,7 +2926,7 @@ int prepare_revision_walk(struct rev_info *revs)
@@ -2924,7 +2926,7 @@ int prepare_revision_walk(struct rev_info *revs)
|
|
|
|
|
revs->treesame.name = "treesame"; |
|
|
|
|
|
|
|
|
|
if (revs->exclude_promisor_objects) { |
|
|
|
|
for_each_packed_object(mark_uninteresting, NULL, |
|
|
|
|
for_each_packed_object(mark_uninteresting, revs, |
|
|
|
|
FOR_EACH_OBJECT_PROMISOR_ONLY); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|