summaryrefslogtreecommitdiff
path: root/builtin/fast-export.c
diff options
context:
space:
mode:
authorFelipe Contreras <felipe.contreras@gmail.com>2012-11-28 22:24:00 (GMT)
committerJunio C Hamano <gitster@pobox.com>2012-12-03 17:57:16 (GMT)
commitf28e7c904ac82b0c5e43805529e7d5296fa4d13b (patch)
tree602de6ff18dc2b91a17cb747c2ae248cdeaaf783 /builtin/fast-export.c
parent49266e8a11cffa1bb41217021470e33d26109bb2 (diff)
downloadgit-f28e7c904ac82b0c5e43805529e7d5296fa4d13b.zip
git-f28e7c904ac82b0c5e43805529e7d5296fa4d13b.tar.gz
git-f28e7c904ac82b0c5e43805529e7d5296fa4d13b.tar.bz2
fast-export: make sure updated refs get updated
When an object has already been exported (and thus is in the marks) it's flagged as SHOWN, so it will not be exported again, even if in a later time it's exported through a different ref. We don't need the object to be exported again, but we want the ref updated, which doesn't happen. Since we can't know if a ref was exported or not, let's just assume that if the commit was marked (flags & SHOWN), the user still wants the ref updated. IOW: If it's specified in the command line, it will get updated, regardless of whether or not the object was marked. So: % git branch test master % git fast-export $mark_flags master % git fast-export $mark_flags test Would export 'test' properly. Additionally, this fixes issues with remote helpers; now they can push refs whose objects have already been exported, and a few other issues as well. Update the tests accordingly. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/fast-export.c')
-rw-r--r--builtin/fast-export.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 2547e6c..77dffd1 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -526,10 +526,14 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info,
typename(e->item->type));
continue;
}
- if (commit->util)
- /* more than one name for the same object */
+
+ /*
+ * This ref will not be updated through a commit, lets make
+ * sure it gets properly updated eventually.
+ */
+ if (commit->util || commit->object.flags & SHOWN)
string_list_append(extra_refs, full_name)->util = commit;
- else
+ if (!commit->util)
commit->util = full_name;
}
}