Skip to content

Commit

Permalink
vcs-svn: add a comment before each commit
Browse files Browse the repository at this point in the history
Current svn-fe produces output like this:

	blob
	mark :7382321
	data 5
	hello

	blob
	mark :7382322
	data 5
	Hello

	commit
	mark :3
[...]
	M 100644 :7382321 hello.c
	M 100644 :7382322 hello2.c

This means svn-fe has to keep track of the paths modified in each
commit and the corresponding marks, instead of dealing with each file
as it arrives in input and then forgetting about it.  A better
strategy would be to use inline blobs:

	commit
	mark :3
[...]
	M 100644 inline hello.c
	data 5
	hello
[...]

As a first step towards that, teach svn-fe to notice when the
collection of blobs for each commit starts and write a comment
("# commit 3.") there.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
  • Loading branch information
Jonathan Nieder committed Mar 7, 2011
1 parent 78e1a3f commit 7e11902
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 7 deletions.
5 changes: 5 additions & 0 deletions vcs-svn/fast_export.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ void fast_export_modify(uint32_t depth, uint32_t *path, uint32_t mode,
putchar('\n');
}

void fast_export_begin_commit(uint32_t revision)
{
printf("# commit %"PRIu32".\n", revision);
}

static char gitsvnline[MAX_GITSVN_LINE_LEN];
void fast_export_commit(uint32_t revision, uint32_t author, char *log,
uint32_t uuid, uint32_t url,
Expand Down
1 change: 1 addition & 0 deletions vcs-svn/fast_export.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ void fast_export_reset(void);
void fast_export_delete(uint32_t depth, uint32_t *path);
void fast_export_modify(uint32_t depth, uint32_t *path, uint32_t mode,
uint32_t mark);
void fast_export_begin_commit(uint32_t revision);
void fast_export_commit(uint32_t revision, uint32_t author, char *log,
uint32_t uuid, uint32_t url, unsigned long timestamp);
void fast_export_blob(uint32_t mode, uint32_t mark, uint32_t len,
Expand Down
29 changes: 22 additions & 7 deletions vcs-svn/svndump.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
#define NODEACT_CHANGE 1
#define NODEACT_UNKNOWN 0

#define DUMP_CTX 0
#define REV_CTX 1
#define NODE_CTX 2
/* States: */
#define DUMP_CTX 0 /* dump metadata */
#define REV_CTX 1 /* revision metadata */
#define NODE_CTX 2 /* node metadata */
#define INTERNODE_CTX 3 /* between nodes */

#define LENGTH_UNKNOWN (~0)
#define DATE_RFC2822_LEN 31
Expand Down Expand Up @@ -269,7 +271,14 @@ static void handle_node(void)
node_ctx.textLength, &input);
}

static void handle_revision(void)
static void begin_revision(void)
{
if (!rev_ctx.revision) /* revision 0 gets no git commit. */
return;
fast_export_begin_commit(rev_ctx.revision);
}

static void end_revision(void)
{
if (rev_ctx.revision)
repo_commit(rev_ctx.revision, rev_ctx.author, rev_ctx.log,
Expand Down Expand Up @@ -303,13 +312,17 @@ void svndump_read(const char *url)
} else if (key == keys.revision_number) {
if (active_ctx == NODE_CTX)
handle_node();
if (active_ctx == REV_CTX)
begin_revision();
if (active_ctx != DUMP_CTX)
handle_revision();
end_revision();
active_ctx = REV_CTX;
reset_rev_ctx(atoi(val));
} else if (key == keys.node_path) {
if (active_ctx == NODE_CTX)
handle_node();
if (active_ctx == REV_CTX)
begin_revision();
active_ctx = NODE_CTX;
reset_node_ctx(val);
} else if (key == keys.node_kind) {
Expand Down Expand Up @@ -351,7 +364,7 @@ void svndump_read(const char *url)
read_props();
} else if (active_ctx == NODE_CTX) {
handle_node();
active_ctx = REV_CTX;
active_ctx = INTERNODE_CTX;
} else {
fprintf(stderr, "Unexpected content length header: %"PRIu32"\n", len);
buffer_skip_bytes(&input, len);
Expand All @@ -360,8 +373,10 @@ void svndump_read(const char *url)
}
if (active_ctx == NODE_CTX)
handle_node();
if (active_ctx == REV_CTX)
begin_revision();
if (active_ctx != DUMP_CTX)
handle_revision();
end_revision();
}

int svndump_init(const char *filename)
Expand Down

0 comments on commit 7e11902

Please sign in to comment.