remote-svn: add incremental import
Search for a note attached to the ref to update and read it's 'Revision-number:'-line. Start import from the next svn revision. If there is no next revision in the svn repo, svnrdump terminates with a message on stderr an non-zero return value. This looks a little weird, but there is no other way to know whether there is a new revision in the svn repo. On the start of an incremental import, the parent of the first commit in the fast-import stream is set to the branch name to update. All following commits specify their parent by a mark number. Previous mark files are currently not reused. Signed-off-by: Florian Achleitner <florian.achleitner.2.6.31@gmail.com> Acked-by: David Michael Barr <b@rr-dav.id.au> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
8d7cd8eb3b
commit
8e43a1d010
@ -68,13 +68,19 @@ void fast_export_modify(const char *path, uint32_t mode, const char *dataref)
|
||||
}
|
||||
|
||||
void fast_export_begin_note(uint32_t revision, const char *author,
|
||||
const char *log, unsigned long timestamp)
|
||||
const char *log, unsigned long timestamp, const char *note_ref)
|
||||
{
|
||||
static int firstnote = 1;
|
||||
size_t loglen = strlen(log);
|
||||
printf("commit refs/notes/svn/revs\n");
|
||||
printf("commit %s\n", note_ref);
|
||||
printf("committer %s <%s@%s> %ld +0000\n", author, author, "local", timestamp);
|
||||
printf("data %"PRIuMAX"\n", (uintmax_t)loglen);
|
||||
fwrite(log, loglen, 1, stdout);
|
||||
if (firstnote) {
|
||||
if (revision > 1)
|
||||
printf("from %s^0", note_ref);
|
||||
firstnote = 0;
|
||||
}
|
||||
fputc('\n', stdout);
|
||||
}
|
||||
|
||||
|
||||
@ -11,10 +11,10 @@ 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);
|
||||
const char *log, unsigned long timestamp, const char *note_ref);
|
||||
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);
|
||||
const struct strbuf *log, const char *uuid,const char *url,
|
||||
unsigned long timestamp, const char *local_ref);
|
||||
void fast_export_end_commit(uint32_t revision);
|
||||
void fast_export_data(uint32_t mode, off_t len, struct line_buffer *input);
|
||||
void fast_export_buf_to_data(const struct strbuf *data);
|
||||
|
||||
@ -309,20 +309,20 @@ static void begin_revision(const char *remote_ref)
|
||||
rev_ctx.timestamp, remote_ref);
|
||||
}
|
||||
|
||||
static void end_revision(void)
|
||||
static void end_revision(const char *note_ref)
|
||||
{
|
||||
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);
|
||||
"Note created by remote-svn.", rev_ctx.timestamp, note_ref);
|
||||
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)
|
||||
void svndump_read(const char *url, const char *local_ref, const char *notes_ref)
|
||||
{
|
||||
char *val;
|
||||
char *t;
|
||||
@ -363,7 +363,7 @@ void svndump_read(const char *url, const char *local_ref)
|
||||
if (active_ctx == REV_CTX)
|
||||
begin_revision(local_ref);
|
||||
if (active_ctx != DUMP_CTX)
|
||||
end_revision();
|
||||
end_revision(notes_ref);
|
||||
active_ctx = REV_CTX;
|
||||
reset_rev_ctx(atoi(val));
|
||||
strbuf_addf(&rev_ctx.note, "%s\n", t);
|
||||
@ -479,7 +479,7 @@ void svndump_read(const char *url, const char *local_ref)
|
||||
if (active_ctx == REV_CTX)
|
||||
begin_revision(local_ref);
|
||||
if (active_ctx != DUMP_CTX)
|
||||
end_revision();
|
||||
end_revision(notes_ref);
|
||||
}
|
||||
|
||||
static void init(int report_fd)
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
int svndump_init(const char *filename);
|
||||
int svndump_init_fd(int in_fd, int back_fd);
|
||||
void svndump_read(const char *url, const char *local_ref);
|
||||
void svndump_read(const char *url, const char *local_ref, const char *notes_ref);
|
||||
void svndump_deinit(void);
|
||||
void svndump_reset(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user