remote-svn, vcs-svn: Enable fetching to private refs
authorFlorian Achleitner <florian.achleitner.2.6.31@gmail.com>
Wed, 19 Sep 2012 15:21:22 +0000 (17:21 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 7 Oct 2012 21:10:17 +0000 (14:10 -0700)
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>
contrib/svn-fe/svn-fe.c
test-svn-fe.c
vcs-svn/fast_export.c
vcs-svn/fast_export.h
vcs-svn/svndump.c
vcs-svn/svndump.h
index 35db24f5eae600a973391915ceb61c4635941aec..c796cc0071ec07f48c8dd1e5913b689efec799df 100644 (file)
@@ -10,7 +10,7 @@ int main(int argc, char **argv)
 {
        if (svndump_init(NULL))
                return 1;
-       svndump_read((argc > 1) ? argv[1] : NULL);
+       svndump_read((argc > 1) ? argv[1] : NULL, "refs/heads/master");
        svndump_deinit();
        svndump_reset();
        return 0;
index 83633a21e586fd94015bd983b683ffc10b2c1963..cb0d80f40c58b6f197977ba139f9c1647182c79f 100644 (file)
@@ -40,7 +40,7 @@ int main(int argc, char *argv[])
        if (argc == 2) {
                if (svndump_init(argv[1]))
                        return 1;
-               svndump_read(NULL);
+               svndump_read(NULL, "refs/heads/master");
                svndump_deinit();
                svndump_reset();
                return 0;
index 1f04697866bd481e24f17e0833c1c2d29c8e12e2..11f8f94b98a84e79f13bdb3cfbcab269dc2fc98f 100644 (file)
@@ -72,7 +72,7 @@ static char gitsvnline[MAX_GITSVN_LINE_LEN];
 void fast_export_begin_commit(uint32_t revision, const char *author,
                        const struct strbuf *log,
                        const char *uuid, const char *url,
-                       unsigned long timestamp)
+                       unsigned long timestamp, const char *local_ref)
 {
        static const struct strbuf empty = STRBUF_INIT;
        if (!log)
@@ -84,7 +84,7 @@ void fast_export_begin_commit(uint32_t revision, const char *author,
        } else {
                *gitsvnline = '\0';
        }
-       printf("commit refs/heads/master\n");
+       printf("commit %s\n", local_ref);
        printf("mark :%"PRIu32"\n", revision);
        printf("committer %s <%s@%s> %ld +0000\n",
                   *author ? author : "nobody",
index 8823aca15c9592ce732e741e879aa182f2273202..17eb13bc75e8e79c145f288a0923e3c74bef3742 100644 (file)
@@ -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_begin_commit(uint32_t revision, const char *author,
                        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_data(uint32_t mode, off_t len, struct line_buffer *input);
 void fast_export_blob_delta(uint32_t mode,
index d81a078b8e21a902fdd8058673baab622fb375ba..c8a5b7eebb952eca4b8e6bc5eaccd06ec7e18b62 100644 (file)
@@ -299,13 +299,13 @@ static void handle_node(void)
                                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. */
                return;
        fast_export_begin_commit(rev_ctx.revision, rev_ctx.author.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)
@@ -314,7 +314,7 @@ static void end_revision(void)
                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 *t;
@@ -353,7 +353,7 @@ void svndump_read(const char *url)
                        if (active_ctx == NODE_CTX)
                                handle_node();
                        if (active_ctx == REV_CTX)
-                               begin_revision();
+                               begin_revision(local_ref);
                        if (active_ctx != DUMP_CTX)
                                end_revision();
                        active_ctx = REV_CTX;
@@ -366,7 +366,7 @@ void svndump_read(const char *url)
                                if (active_ctx == NODE_CTX)
                                        handle_node();
                                if (active_ctx == REV_CTX)
-                                       begin_revision();
+                                       begin_revision(local_ref);
                                active_ctx = NODE_CTX;
                                reset_node_ctx(val);
                                break;
@@ -463,7 +463,7 @@ void svndump_read(const char *url)
        if (active_ctx == NODE_CTX)
                handle_node();
        if (active_ctx == REV_CTX)
-               begin_revision();
+               begin_revision(local_ref);
        if (active_ctx != DUMP_CTX)
                end_revision();
 }
index acb5b474d2208e0fb89456e03e0d1897e728cef3..febeecbe9da82244fa6818f8cd611ea11b491e38 100644 (file)
@@ -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);
+void svndump_read(const char *url, const char *local_ref);
 void svndump_deinit(void);
 void svndump_reset(void);