fast-export: refactor get_tags_and_duplicates()
Split into a separate helper function get_commit() so that the part that finds the relevant commit, and the part that does something with it (handle tag object, etc.) are in different places. No functional changes. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1d844ee7bd
commit
3e9b9cb117
@ -485,9 +485,32 @@ static void handle_tag(const char *name, struct tag *tag)
|
|||||||
(int)message_size, (int)message_size, message ? message : "");
|
(int)message_size, (int)message_size, message ? message : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct commit *get_commit(struct rev_cmdline_entry *e, char *full_name)
|
||||||
|
{
|
||||||
|
switch (e->item->type) {
|
||||||
|
case OBJ_COMMIT:
|
||||||
|
return (struct commit *)e->item;
|
||||||
|
case OBJ_TAG: {
|
||||||
|
struct tag *tag = (struct tag *)e->item;
|
||||||
|
|
||||||
|
/* handle nested tags */
|
||||||
|
while (tag && tag->object.type == OBJ_TAG) {
|
||||||
|
parse_object(tag->object.sha1);
|
||||||
|
string_list_append(&extra_refs, full_name)->util = tag;
|
||||||
|
tag = (struct tag *)tag->tagged;
|
||||||
|
}
|
||||||
|
if (!tag)
|
||||||
|
die("Tag %s points nowhere?", e->name);
|
||||||
|
return (struct commit *)tag;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void get_tags_and_duplicates(struct rev_cmdline_info *info)
|
static void get_tags_and_duplicates(struct rev_cmdline_info *info)
|
||||||
{
|
{
|
||||||
struct tag *tag;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < info->nr; i++) {
|
for (i = 0; i < info->nr; i++) {
|
||||||
@ -502,41 +525,26 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info)
|
|||||||
if (dwim_ref(e->name, strlen(e->name), sha1, &full_name) != 1)
|
if (dwim_ref(e->name, strlen(e->name), sha1, &full_name) != 1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
switch (e->item->type) {
|
commit = get_commit(e, full_name);
|
||||||
case OBJ_COMMIT:
|
if (!commit) {
|
||||||
commit = (struct commit *)e->item;
|
|
||||||
break;
|
|
||||||
case OBJ_TAG:
|
|
||||||
tag = (struct tag *)e->item;
|
|
||||||
|
|
||||||
/* handle nested tags */
|
|
||||||
while (tag && tag->object.type == OBJ_TAG) {
|
|
||||||
parse_object(tag->object.sha1);
|
|
||||||
string_list_append(&extra_refs, full_name)->util = tag;
|
|
||||||
tag = (struct tag *)tag->tagged;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
die ("Tag %s points nowhere?", e->name);
|
|
||||||
switch(tag->object.type) {
|
|
||||||
case OBJ_COMMIT:
|
|
||||||
commit = (struct commit *)tag;
|
|
||||||
break;
|
|
||||||
case OBJ_BLOB:
|
|
||||||
export_blob(tag->object.sha1);
|
|
||||||
continue;
|
|
||||||
default: /* OBJ_TAG (nested tags) is already handled */
|
|
||||||
warning("Tag points to object of unexpected type %s, skipping.",
|
|
||||||
typename(tag->object.type));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
warning("%s: Unexpected object of type %s, skipping.",
|
warning("%s: Unexpected object of type %s, skipping.",
|
||||||
e->name,
|
e->name,
|
||||||
typename(e->item->type));
|
typename(e->item->type));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(commit->object.type) {
|
||||||
|
case OBJ_COMMIT:
|
||||||
|
break;
|
||||||
|
case OBJ_BLOB:
|
||||||
|
export_blob(commit->object.sha1);
|
||||||
|
continue;
|
||||||
|
default: /* OBJ_TAG (nested tags) is already handled */
|
||||||
|
warning("Tag points to object of unexpected type %s, skipping.",
|
||||||
|
typename(commit->object.type));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This ref will not be updated through a commit, lets make
|
* This ref will not be updated through a commit, lets make
|
||||||
* sure it gets properly updated eventually.
|
* sure it gets properly updated eventually.
|
||||||
|
Loading…
Reference in New Issue
Block a user