Re: git bugs
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Jun 12, 2008, 03:17 UTC
- Message-ID
- <20080612031723.GJ11793@spearce.org>
- In-Reply-To
- <832adb090806100141n69c086a2v2f59fe94b2f4ead3@mail.gmail.com>
Ben Lynn <benlynn@gmail.com> wrote:
Show 8 quoted lines
> 1. The import/export language poorly handles distinct initial commits > on the same branch, because given two commits with same branch name, > it assumes the latter is the descendant of the former (if there are no > "from" commands). > > Normally this is what you want. But if your project, like git, ever > merges distinct initial commits, then all but the first will > unexpectedly gain parents, corrupting all their descendants' hashes.
...
> As a workaround, I have a custom importer that knows that > git-fast-export omits the "from" command in initial commits. But there > should be a command to specify that the current commit is an initial > commit, allowing reliable export of projects such as git.
fast-export is wrong, and is using the language wrong. fast-import is correct. Because I said so. :-)
No, seriously, fast-import came along first and can describe what you are referring to as the many initial root commits in git.git. The issue is fast-export is not generating commands to say as much.
Its quite easily fixable.
When we output a commit in handle_commit() we just need to reset the branch if we have no parents. That simple. This is totally untested, but I think it fixes it.
diff --git a/builtin-fast-export.c b/builtin-fast-export.c index 1dfc01e..d0a462f 100644 --- a/builtin-fast-export.c +++ b/builtin-fast-export.c @@ -188,6 +188,8 @@ static void handle_commit(struct commit *commit, struct rev_info *rev) mark_object(&commit->object); if (!is_encoding_utf8(encoding)) reencoded = reencode_string(message, "UTF-8", encoding); + if (!commit->parents) + printf("reset %s\n", (const char*)commit->util); printf("commit %s\nmark :%d\n%.*s\n%.*s\ndata %u\n%s", (const char *)commit->util, last_idnum, (int)(author_end - author), author,
-- Shawn.