Skip to content

Commit dffc131

Browse files
committed
Merge branch 'ef/fast-export'
* ef/fast-export: builtin-fast-export.c: handle nested tags builtin-fast-export.c: fix crash on tagged trees builtin-fast-export.c: turn error into warning test-suite: adding a test for fast-export with tag variants
2 parents 37a13ac + 1982467 commit dffc131

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

builtin-fast-export.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,10 @@ static void get_tags_and_duplicates(struct object_array *pending,
363363
break;
364364
case OBJ_TAG:
365365
tag = (struct tag *)e->item;
366+
367+
/* handle nested tags */
366368
while (tag && tag->object.type == OBJ_TAG) {
369+
parse_object(tag->object.sha1);
367370
string_list_append(full_name, extra_refs)->util = tag;
368371
tag = (struct tag *)tag->tagged;
369372
}
@@ -376,11 +379,17 @@ static void get_tags_and_duplicates(struct object_array *pending,
376379
case OBJ_BLOB:
377380
handle_object(tag->object.sha1);
378381
continue;
382+
default: /* OBJ_TAG (nested tags) is already handled */
383+
warning("Tag points to object of unexpected type %s, skipping.",
384+
typename(tag->object.type));
385+
continue;
379386
}
380387
break;
381388
default:
382-
die ("Unexpected object of type %s",
383-
typename(e->item->type));
389+
warning("%s: Unexpected object of type %s, skipping.",
390+
e->name,
391+
typename(e->item->type));
392+
continue;
384393
}
385394
if (commit->util)
386395
/* more than one name for the same object */

t/t9301-fast-export.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,4 +262,19 @@ test_expect_success 'cope with tagger-less tags' '
262262
263263
'
264264

265+
test_expect_success 'set-up a few more tags for tag export tests' '
266+
git checkout -f master &&
267+
HEAD_TREE=`git show -s --pretty=raw HEAD | grep tree | sed "s/tree //"` &&
268+
git tag tree_tag -m "tagging a tree" $HEAD_TREE &&
269+
git tag -a tree_tag-obj -m "tagging a tree" $HEAD_TREE &&
270+
git tag tag-obj_tag -m "tagging a tag" tree_tag-obj &&
271+
git tag -a tag-obj_tag-obj -m "tagging a tag" tree_tag-obj
272+
'
273+
274+
# NEEDSWORK: not just check return status, but validate the output
275+
test_expect_success 'tree_tag' 'git fast-export tree_tag'
276+
test_expect_success 'tree_tag-obj' 'git fast-export tree_tag-obj'
277+
test_expect_success 'tag-obj_tag' 'git fast-export tag-obj_tag'
278+
test_expect_success 'tag-obj_tag-obj' 'git fast-export tag-obj_tag-obj'
279+
265280
test_done

0 commit comments

Comments
 (0)