remote-svn, vcs-svn: Enable fetching to private refs
The reference to update by the fast-import stream is hard-coded. When fetching from a remote the remote-helper shall update refs in a private namespace, i.e. a private subdir of refs/. This namespace is defined by the 'refspec' capability, that the remote-helper advertises as a reply to the 'capabilities' command. Extend svndump and fast-export to allow passing the target ref. Update svn-fe to be compatible. 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:
parent
19ba02af47
commit
271fd1fc2a
@ -10,7 +10,7 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (svndump_init(NULL))
|
if (svndump_init(NULL))
|
||||||
return 1;
|
return 1;
|
||||||
svndump_read((argc > 1) ? argv[1] : NULL);
|
svndump_read((argc > 1) ? argv[1] : NULL, "refs/heads/master");
|
||||||
svndump_deinit();
|
svndump_deinit();
|
||||||
svndump_reset();
|
svndump_reset();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -40,7 +40,7 @@ int main(int argc, char *argv[])
|
|||||||
if (argc == 2) {
|
if (argc == 2) {
|
||||||
if (svndump_init(argv[1]))
|
if (svndump_init(argv[1]))
|
||||||
return 1;
|
return 1;
|
||||||
svndump_read(NULL);
|
svndump_read(NULL, "refs/heads/master");
|
||||||
svndump_deinit();
|
svndump_deinit();
|
||||||
svndump_reset();
|
svndump_reset();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -72,7 +72,7 @@ static char gitsvnline[MAX_GITSVN_LINE_LEN];
|
|||||||
void fast_export_begin_commit(uint32_t revision, const char *author,
|
void fast_export_begin_commit(uint32_t revision, const char *author,
|
||||||
const struct strbuf *log,
|
const struct strbuf *log,
|
||||||
const char *uuid, const char *url,
|
const char *uuid, const char *url,
|
||||||
unsigned long timestamp)
|
unsigned long timestamp, const char *local_ref)
|
||||||
{
|
{
|
||||||
static const struct strbuf empty = STRBUF_INIT;
|
static const struct strbuf empty = STRBUF_INIT;
|
||||||
if (!log)
|
if (!log)
|
||||||
@ -84,7 +84,7 @@ void fast_export_begin_commit(uint32_t revision, const char *author,
|
|||||||
} else {
|
} else {
|
||||||
*gitsvnline = '\0';
|
*gitsvnline = '\0';
|
||||||
}
|
}
|
||||||
printf("commit refs/heads/master\n");
|
printf("commit %s\n", local_ref);
|
||||||
printf("mark :%"PRIu32"\n", revision);
|
printf("mark :%"PRIu32"\n", revision);
|
||||||
printf("committer %s <%s@%s> %ld +0000\n",
|
printf("committer %s <%s@%s> %ld +0000\n",
|
||||||
*author ? author : "nobody",
|
*author ? author : "nobody",
|
||||||
|
@ -11,7 +11,7 @@ void fast_export_delete(const char *path);
|
|||||||
void fast_export_modify(const char *path, uint32_t mode, const char *dataref);
|
void fast_export_modify(const char *path, uint32_t mode, const char *dataref);
|
||||||
void fast_export_begin_commit(uint32_t revision, const char *author,
|
void fast_export_begin_commit(uint32_t revision, const char *author,
|
||||||
const struct strbuf *log, const char *uuid,
|
const struct strbuf *log, const char *uuid,
|
||||||
const char *url, unsigned long timestamp);
|
const char *url, unsigned long timestamp, const char *local_ref);
|
||||||
void fast_export_end_commit(uint32_t revision);
|
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_data(uint32_t mode, off_t len, struct line_buffer *input);
|
||||||
void fast_export_blob_delta(uint32_t mode,
|
void fast_export_blob_delta(uint32_t mode,
|
||||||
|
@ -299,13 +299,13 @@ static void handle_node(void)
|
|||||||
node_ctx.text_length, &input);
|
node_ctx.text_length, &input);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void begin_revision(void)
|
static void begin_revision(const char *remote_ref)
|
||||||
{
|
{
|
||||||
if (!rev_ctx.revision) /* revision 0 gets no git commit. */
|
if (!rev_ctx.revision) /* revision 0 gets no git commit. */
|
||||||
return;
|
return;
|
||||||
fast_export_begin_commit(rev_ctx.revision, rev_ctx.author.buf,
|
fast_export_begin_commit(rev_ctx.revision, rev_ctx.author.buf,
|
||||||
&rev_ctx.log, dump_ctx.uuid.buf, dump_ctx.url.buf,
|
&rev_ctx.log, dump_ctx.uuid.buf, dump_ctx.url.buf,
|
||||||
rev_ctx.timestamp);
|
rev_ctx.timestamp, remote_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void end_revision(void)
|
static void end_revision(void)
|
||||||
@ -314,7 +314,7 @@ static void end_revision(void)
|
|||||||
fast_export_end_commit(rev_ctx.revision);
|
fast_export_end_commit(rev_ctx.revision);
|
||||||
}
|
}
|
||||||
|
|
||||||
void svndump_read(const char *url)
|
void svndump_read(const char *url, const char *local_ref)
|
||||||
{
|
{
|
||||||
char *val;
|
char *val;
|
||||||
char *t;
|
char *t;
|
||||||
@ -353,7 +353,7 @@ void svndump_read(const char *url)
|
|||||||
if (active_ctx == NODE_CTX)
|
if (active_ctx == NODE_CTX)
|
||||||
handle_node();
|
handle_node();
|
||||||
if (active_ctx == REV_CTX)
|
if (active_ctx == REV_CTX)
|
||||||
begin_revision();
|
begin_revision(local_ref);
|
||||||
if (active_ctx != DUMP_CTX)
|
if (active_ctx != DUMP_CTX)
|
||||||
end_revision();
|
end_revision();
|
||||||
active_ctx = REV_CTX;
|
active_ctx = REV_CTX;
|
||||||
@ -366,7 +366,7 @@ void svndump_read(const char *url)
|
|||||||
if (active_ctx == NODE_CTX)
|
if (active_ctx == NODE_CTX)
|
||||||
handle_node();
|
handle_node();
|
||||||
if (active_ctx == REV_CTX)
|
if (active_ctx == REV_CTX)
|
||||||
begin_revision();
|
begin_revision(local_ref);
|
||||||
active_ctx = NODE_CTX;
|
active_ctx = NODE_CTX;
|
||||||
reset_node_ctx(val);
|
reset_node_ctx(val);
|
||||||
break;
|
break;
|
||||||
@ -463,7 +463,7 @@ void svndump_read(const char *url)
|
|||||||
if (active_ctx == NODE_CTX)
|
if (active_ctx == NODE_CTX)
|
||||||
handle_node();
|
handle_node();
|
||||||
if (active_ctx == REV_CTX)
|
if (active_ctx == REV_CTX)
|
||||||
begin_revision();
|
begin_revision(local_ref);
|
||||||
if (active_ctx != DUMP_CTX)
|
if (active_ctx != DUMP_CTX)
|
||||||
end_revision();
|
end_revision();
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
int svndump_init(const char *filename);
|
int svndump_init(const char *filename);
|
||||||
int svndump_init_fd(int in_fd, int back_fd);
|
int svndump_init_fd(int in_fd, int back_fd);
|
||||||
void svndump_read(const char *url);
|
void svndump_read(const char *url, const char *local_ref);
|
||||||
void svndump_deinit(void);
|
void svndump_deinit(void);
|
||||||
void svndump_reset(void);
|
void svndump_reset(void);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user