Re: [PATCH/RFC v3 10/16] Create a note for every imported commit containing svn metadata.

2012-08-15 Thread Florian Achleitner
On Wednesday 15 August 2012 12:49:04 Junio C Hamano wrote:
 Florian Achleitner florian.achleitner.2.6...@gmail.com writes:
  To provide metadata from svn dumps for further processing, e.g.
  branch detection, attach a note to each imported commit that
  stores additional information.
  The notes are currently hard-coded in refs/notes/svn/revs.
  Currently the following lines from the svn dump are directly
  accumulated in the note. This can be refined on purpose, of course.
  - Revision-number
  - Node-path
  - Node-kind
  - Node-action
  - Node-copyfrom-path
  - Node-copyfrom-rev
  
  Signed-off-by: Florian Achleitner florian.achleitner.2.6...@gmail.com
  ---
  
   vcs-svn/fast_export.c |   13 +
   vcs-svn/fast_export.h |2 ++
   vcs-svn/svndump.c |   21 +++--
   3 files changed, 34 insertions(+), 2 deletions(-)
  
  diff --git a/vcs-svn/fast_export.c b/vcs-svn/fast_export.c
  index 1ecae4b..796dd1a 100644
  --- a/vcs-svn/fast_export.c
  +++ b/vcs-svn/fast_export.c
  @@ -12,6 +12,7 @@
  
   #include svndiff.h
   #include sliding_window.h
   #include line_buffer.h
  
  +#include cache.h
 
 Shouldn't it be near the beginning?  Also if you include cache.h,
 it probably makes git-compat-util and strbuf redundant.

Ack.

 
   #define MAX_GITSVN_LINE_LEN 4096
  
  @@ -68,6 +69,18 @@ void fast_export_modify(const char *path, uint32_t
  mode, const char *dataref) 
  putchar('\n');
   
   }
  
  +void fast_export_begin_note(uint32_t revision, const char *author,
  +   const char *log, unsigned long timestamp)
  +{
  +   timestamp = 1341914616;
 
 The magic number needs some comment.
 
  +   size_t loglen = strlen(log);
 
 decl-after-statement.  I am starting to suspect that the assignment
 is a leftover from an earlier debugging effort, though.

Oh yes sorry. Leftover from a previous experiment.
Thx for your reviews Junio, I got too blind to see this.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC v3 10/16] Create a note for every imported commit containing svn metadata.

2012-08-14 Thread Florian Achleitner
To provide metadata from svn dumps for further processing, e.g.
branch detection, attach a note to each imported commit that
stores additional information.
The notes are currently hard-coded in refs/notes/svn/revs.
Currently the following lines from the svn dump are directly
accumulated in the note. This can be refined on purpose, of course.
- Revision-number
- Node-path
- Node-kind
- Node-action
- Node-copyfrom-path
- Node-copyfrom-rev

Signed-off-by: Florian Achleitner florian.achleitner.2.6...@gmail.com
---
 vcs-svn/fast_export.c |   13 +
 vcs-svn/fast_export.h |2 ++
 vcs-svn/svndump.c |   21 +++--
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/vcs-svn/fast_export.c b/vcs-svn/fast_export.c
index 1ecae4b..796dd1a 100644
--- a/vcs-svn/fast_export.c
+++ b/vcs-svn/fast_export.c
@@ -12,6 +12,7 @@
 #include svndiff.h
 #include sliding_window.h
 #include line_buffer.h
+#include cache.h
 
 #define MAX_GITSVN_LINE_LEN 4096
 
@@ -68,6 +69,18 @@ void fast_export_modify(const char *path, uint32_t mode, 
const char *dataref)
putchar('\n');
 }
 
+void fast_export_begin_note(uint32_t revision, const char *author,
+   const char *log, unsigned long timestamp)
+{
+   timestamp = 1341914616;
+   size_t loglen = strlen(log);
+   printf(commit refs/notes/svn/revs\n);
+   printf(committer %s %s@%s %ld +\n, author, author, local, 
timestamp);
+   printf(data %PRIuMAX\n, loglen);
+   fwrite(log, loglen, 1, stdout);
+   fputc('\n', stdout);
+}
+
 void fast_export_note(const char *committish, const char *dataref)
 {
printf(N %s %s\n, dataref, committish);
diff --git a/vcs-svn/fast_export.h b/vcs-svn/fast_export.h
index 9b32f1e..c2f6f11 100644
--- a/vcs-svn/fast_export.h
+++ b/vcs-svn/fast_export.h
@@ -10,6 +10,8 @@ void fast_export_deinit(void);
 void fast_export_delete(const char *path);
 void fast_export_modify(const char *path, uint32_t mode, const char *dataref);
 void fast_export_note(const char *committish, const char *dataref);
+void fast_export_begin_note(uint32_t revision, const char *author,
+   const char *log, unsigned long timestamp);
 void fast_export_begin_commit(uint32_t revision, const char *author,
const struct strbuf *log, const char *uuid,
const char *url, unsigned long timestamp, const char 
*local_ref);
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index 288bb42..cd65b51 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -48,7 +48,7 @@ static struct {
 static struct {
uint32_t revision;
unsigned long timestamp;
-   struct strbuf log, author;
+   struct strbuf log, author, note;
 } rev_ctx;
 
 static struct {
@@ -77,6 +77,7 @@ static void reset_rev_ctx(uint32_t revision)
rev_ctx.timestamp = 0;
strbuf_reset(rev_ctx.log);
strbuf_reset(rev_ctx.author);
+   strbuf_reset(rev_ctx.note);
 }
 
 static void reset_dump_ctx(const char *url)
@@ -310,8 +311,15 @@ static void begin_revision(const char *remote_ref)
 
 static void end_revision()
 {
-   if (rev_ctx.revision)
+   struct strbuf mark = STRBUF_INIT;
+   if (rev_ctx.revision) {
fast_export_end_commit(rev_ctx.revision);
+   fast_export_begin_note(rev_ctx.revision, remote-svn,
+   Note created by remote-svn., 
rev_ctx.timestamp);
+   strbuf_addf(mark, :%PRIu32, rev_ctx.revision);
+   fast_export_note(mark.buf, inline);
+   fast_export_buf_to_data(rev_ctx.note);
+   }
 }
 
 void svndump_read(const char *url, const char *local_ref)
@@ -358,6 +366,7 @@ void svndump_read(const char *url, const char *local_ref)
end_revision();
active_ctx = REV_CTX;
reset_rev_ctx(atoi(val));
+   strbuf_addf(rev_ctx.note, %s\n, t);
break;
case sizeof(Node-path):
if (constcmp(t, Node-))
@@ -369,10 +378,12 @@ void svndump_read(const char *url, const char *local_ref)
begin_revision(local_ref);
active_ctx = NODE_CTX;
reset_node_ctx(val);
+   strbuf_addf(rev_ctx.note, %s\n, t);
break;
}
if (constcmp(t + strlen(Node-), kind))
continue;
+   strbuf_addf(rev_ctx.note, %s\n, t);
if (!strcmp(val, dir))
node_ctx.type = REPO_MODE_DIR;
else if (!strcmp(val, file))
@@ -383,6 +394,7 @@ void svndump_read(const char *url, const char *local_ref)
case sizeof(Node-action):
if (constcmp(t, Node-action))