On Tue, Oct 30, 2012 at 5:37 PM, Jonathan Nieder <jrnieder@xxxxxxxxx> wrote: > Felipe Contreras wrote: > >> --- a/builtin/fast-export.c >> +++ b/builtin/fast-export.c >> @@ -523,11 +523,16 @@ static void get_tags_and_duplicates(struct object_array *pending, >> 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 upddated eventually. >> + */ >> + if (commit->util || commit->object.flags & SHOWN) { >> if (!(commit->object.flags & UNINTERESTING)) >> string_list_append(extra_refs, full_name)->util = commit; >> - } else >> + } >> + if (!commit->util) >> commit->util = full_name; > > Here's an explanation of why the above makes sense to me. > > get_tags_and_duplicates() gets called after the marks import and > before the revision walk. It walks through the revs from the > commandline and for each one: > > - peels it to a refname, and then to a commit > - stores the refname so fast-export knows what arg to pass to > the "commit" command during the revision walk > - if it already had a refname stored, instead adds the > (refname, commit) pair to the extra_refs list, so fast-export > knows to add a "reset" command later. > > If the commit already has the SHOWN flag set because it was pointed to > by a mark, it is not going to come up in the revision walk, so it will > not be mentioned in the output stream unless it is added to > extra_refs. That's what this patch does. > > Incidentally, the change from "else" to "if (!commit->util)" is > unnecessary because if a commit is already SHOWN then it will not be > encountered in the revision walk so commit->util does not need to be > set. > > If the commit does not have the SHOWN or UNINTERESTING flag set but it > is going to get the UNINTERESTING flag set during the walk because of > a negative commit listed on the command line, this patch won't help. Thanks for the thorough explanation. Perhaps some of that could make it's way into the commit message? -- Cheers, Sverre Rabbelier -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html