Signed-off-by: David Barr <david.barr@xxxxxxxxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> Signed-off-by: David Barr <david.barr@xxxxxxxxxxxx> --- vcs-svn/fast_export.c | 17 +++++++---------- vcs-svn/fast_export.h | 5 +++-- vcs-svn/svndump.c | 44 ++++++++++++++++++++++++++------------------ 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/vcs-svn/fast_export.c b/vcs-svn/fast_export.c index bb5e9aa..1d50512 100644 --- a/vcs-svn/fast_export.c +++ b/vcs-svn/fast_export.c @@ -9,7 +9,6 @@ #include "fast_export.h" #include "line_buffer.h" #include "repo_tree.h" -#include "string_pool.h" #include "strbuf.h" #define MAX_GITSVN_LINE_LEN 4096 @@ -61,25 +60,23 @@ void fast_export_modify(const char *path, uint32_t mode, const char *dataref) } static char gitsvnline[MAX_GITSVN_LINE_LEN]; -void fast_export_begin_commit(uint32_t revision, uint32_t author, char *log, - uint32_t uuid, uint32_t url, +void fast_export_begin_commit(uint32_t revision, const char *author, + const char *log, const char *uuid, const char *url, unsigned long timestamp) { - if (!log) - log = ""; - if (~uuid && ~url) { + if (*uuid && *url) { snprintf(gitsvnline, MAX_GITSVN_LINE_LEN, "\n\ngit-svn-id: %s@%"PRIu32" %s\n", - pool_fetch(url), revision, pool_fetch(uuid)); + url, revision, uuid); } else { *gitsvnline = '\0'; } printf("commit refs/heads/master\n"); printf("mark :%"PRIu32"\n", revision); printf("committer %s <%s@%s> %ld +0000\n", - ~author ? pool_fetch(author) : "nobody", - ~author ? pool_fetch(author) : "nobody", - ~uuid ? pool_fetch(uuid) : "local", timestamp); + *author ? author : "nobody", + *author ? author : "nobody", + *uuid ? uuid : "local", timestamp); printf("data %"PRIu32"\n%s%s\n", (uint32_t) (strlen(log) + strlen(gitsvnline)), log, gitsvnline); diff --git a/vcs-svn/fast_export.h b/vcs-svn/fast_export.h index a47c609..bc5bddf 100644 --- a/vcs-svn/fast_export.h +++ b/vcs-svn/fast_export.h @@ -10,8 +10,9 @@ void fast_export_reset(void); void fast_export_delete(const char *path); void fast_export_modify(const char *path, uint32_t mode, const char *dataref); -void fast_export_begin_commit(uint32_t revision, uint32_t author, char *log, - uint32_t uuid, uint32_t url, unsigned long timestamp); +void fast_export_begin_commit(uint32_t revision, const char *author, + const char *log, const char *uuid, const char *url, + unsigned long timestamp); void fast_export_end_commit(uint32_t revision); void fast_export_data(uint32_t mode, uint32_t len, struct line_buffer *input); diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c index 03f916d..fd67db8 100644 --- a/vcs-svn/svndump.c +++ b/vcs-svn/svndump.c @@ -11,7 +11,6 @@ #include "repo_tree.h" #include "fast_export.h" #include "line_buffer.h" -#include "string_pool.h" #include "strbuf.h" #define REPORT_FILENO 3 @@ -42,13 +41,14 @@ static struct { } node_ctx; static struct { - uint32_t revision, author; + uint32_t revision; unsigned long timestamp; - struct strbuf log; + struct strbuf log, author; } rev_ctx; static struct { - uint32_t version, uuid, url; + uint32_t version; + struct strbuf uuid, url; } dump_ctx; static void reset_node_ctx(char *fname) @@ -71,14 +71,16 @@ static void reset_rev_ctx(uint32_t revision) rev_ctx.revision = revision; rev_ctx.timestamp = 0; strbuf_reset(&rev_ctx.log); - rev_ctx.author = ~0; + strbuf_reset(&rev_ctx.author); } -static void reset_dump_ctx(uint32_t url) +static void reset_dump_ctx(const char *url) { - dump_ctx.url = url; + strbuf_reset(&dump_ctx.url); + if (url) + strbuf_addstr(&dump_ctx.url, url); dump_ctx.version = 1; - dump_ctx.uuid = ~0; + strbuf_reset(&dump_ctx.uuid); } static void handle_property(const char *key, const char *val, uint32_t len, @@ -91,13 +93,15 @@ static void handle_property(const char *key, const char *val, uint32_t len, break; if (!val) die("invalid dump: unsets svn:log"); - /* Value length excludes terminating nul. */ - strbuf_add(&rev_ctx.log, val, len + 1); + strbuf_reset(&rev_ctx.log); + strbuf_add(&rev_ctx.log, val, len); break; case 10: if (memcmp(key, "svn:author", 10)) break; - rev_ctx.author = pool_intern(val); + strbuf_reset(&rev_ctx.author); + if (val) + strbuf_add(&rev_ctx.author, val, len); break; case 8: if (memcmp(key, "svn:date", 8)) @@ -272,8 +276,9 @@ static void begin_revision(void) { if (!rev_ctx.revision) /* revision 0 gets no git commit. */ return; - fast_export_begin_commit(rev_ctx.revision, rev_ctx.author, rev_ctx.log.buf, - dump_ctx.uuid, dump_ctx.url, rev_ctx.timestamp); + fast_export_begin_commit(rev_ctx.revision, rev_ctx.author.buf, + rev_ctx.log.buf, dump_ctx.uuid.buf, dump_ctx.url.buf, + rev_ctx.timestamp); } static void end_revision(void) @@ -289,7 +294,7 @@ void svndump_read(const char *url) uint32_t active_ctx = DUMP_CTX; uint32_t len; - reset_dump_ctx(pool_intern(url)); + reset_dump_ctx(url); while ((t = buffer_read_line(&input))) { val = strstr(t, ": "); if (!val) @@ -310,7 +315,8 @@ void svndump_read(const char *url) case 4: if (memcmp(t, "UUID", 4)) continue; - dump_ctx.uuid = pool_intern(val); + strbuf_reset(&dump_ctx.uuid); + strbuf_addstr(&dump_ctx.uuid, val); break; case 15: if (memcmp(t, "Revision-number", 15)) @@ -419,10 +425,13 @@ int svndump_init(const char *filename) if (buffer_init(&input, filename)) return error("cannot open %s: %s", filename, strerror(errno)); fast_export_init(REPORT_FILENO); + strbuf_init(&dump_ctx.uuid, 4096); + strbuf_init(&dump_ctx.url, 4096); strbuf_init(&rev_ctx.log, 4096); + strbuf_init(&rev_ctx.author, 4096); strbuf_init(&node_ctx.src, 4096); strbuf_init(&node_ctx.dst, 4096); - reset_dump_ctx(~0); + reset_dump_ctx(NULL); reset_rev_ctx(0); reset_node_ctx(NULL); return 0; @@ -431,7 +440,7 @@ int svndump_init(const char *filename) void svndump_deinit(void) { fast_export_deinit(); - reset_dump_ctx(~0); + reset_dump_ctx(NULL); reset_rev_ctx(0); reset_node_ctx(NULL); strbuf_release(&rev_ctx.log); @@ -447,5 +456,4 @@ void svndump_reset(void) { fast_export_reset(); buffer_reset(&input); - pool_reset(); } -- 1.7.3.2.846.gf4b062 -- 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