From: Shawn O. Pearce <spearce@spearce.org>
Date: Fri, 25 Aug 2006 02:38:13 +0000 (-0400)
Subject: Moved from command to after data to help cvs2svn.
X-Git-Tag: v1.5.0-rc4~14^2~63
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=02f3389d9647378ed864ff1cdfb6f0238b64ee91;p=git

Moved from command to after data to help cvs2svn.

cvs2svn has three phases: begin_commit, middle_commit, end_commit.
The ancester is computed in the middle_commit phase. So its easier
to generate a stream if the from command appears after the commit
message itself but before the file change commands.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---

diff --git a/fast-import.c b/fast-import.c
index 3e527edf70..1842d0738b 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -14,11 +14,11 @@ Format of STDIN stream:
   file_content ::= data;
 
   new_commit ::= 'commit' sp ref_str lf
-    ('from' sp (ref_str | hexsha1 | sha1exp_str | idnum) lf)?
     mark?
     ('author' sp name '<' email '>' ts tz lf)?
     'committer' sp name '<' email '>' ts tz lf
     commit_msg
+    ('from' sp (ref_str | hexsha1 | sha1exp_str | idnum) lf)?
     file_change*
     lf;
   commit_msg ::= data;
@@ -1385,7 +1385,6 @@ static void cmd_new_commit()
 		free(str_uq);
 
 	read_next_command();
-	cmd_from(b);
 	cmd_mark();
 	if (!strncmp("author ", command_buf.buf, 7)) {
 		author = strdup(command_buf.buf);
@@ -1398,6 +1397,8 @@ static void cmd_new_commit()
 	if (!committer)
 		die("Expected committer but didn't get one");
 	msg = cmd_data(&msglen);
+	read_next_command();
+	cmd_from(b);
 
 	/* ensure the branch is active/loaded */
 	if (!b->branch_tree.tree || !max_active_branches) {
@@ -1407,7 +1408,6 @@ static void cmd_new_commit()
 
 	/* file_change* */
 	for (;;) {
-		read_next_command();
 		if (1 == command_buf.len)
 			break;
 		else if (!strncmp("M ", command_buf.buf, 2))
@@ -1416,6 +1416,7 @@ static void cmd_new_commit()
 			file_change_d(b);
 		else
 			die("Unsupported file_change: %s", command_buf.buf);
+		read_next_command();
 	}
 
 	/* build the tree and the commit */