@@ -843,22 +843,28 @@ static void handle_tag(const char *name, struct tag *tag)
843
843
free (buf );
844
844
return ;
845
845
case REWRITE :
846
- if (tagged -> type != OBJ_COMMIT ) {
847
- die ("tag %s tags unexported %s!" ,
848
- oid_to_hex (& tag -> object .oid ),
849
- type_name (tagged -> type ));
850
- }
851
- p = rewrite_commit ((struct commit * )tagged );
852
- if (!p ) {
853
- printf ("reset %s\nfrom %s\n\n" ,
854
- name , oid_to_hex (& null_oid ));
855
- free (buf );
856
- return ;
846
+ if (tagged -> type == OBJ_TAG && !mark_tags ) {
847
+ die (_ ("Error: Cannot export nested tags unless --mark-tags is specified." ));
848
+ } else if (tagged -> type == OBJ_COMMIT ) {
849
+ p = rewrite_commit ((struct commit * )tagged );
850
+ if (!p ) {
851
+ printf ("reset %s\nfrom %s\n\n" ,
852
+ name , oid_to_hex (& null_oid ));
853
+ free (buf );
854
+ return ;
855
+ }
856
+ tagged_mark = get_object_mark (& p -> object );
857
+ } else {
858
+ /* tagged->type is either OBJ_BLOB or OBJ_TAG */
859
+ tagged_mark = get_object_mark (tagged );
857
860
}
858
- tagged_mark = get_object_mark (& p -> object );
859
861
}
860
862
}
861
863
864
+ if (tagged -> type == OBJ_TAG ) {
865
+ printf ("reset %s\nfrom %s\n\n" ,
866
+ name , oid_to_hex (& null_oid ));
867
+ }
862
868
if (starts_with (name , "refs/tags/" ))
863
869
name += 10 ;
864
870
printf ("tag %s\n" , name );
0 commit comments