You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Stefan Sperling <st...@apache.org> on 2014/04/01 14:15:43 UTC
Re: svn commit: r1583639 [1/3] - in /subversion/branches/ra-git: ./
build/ac-macros/ subversion/include/ subversion/libsvn_client/
subversion/libsvn_ra/ subversion/libsvn_ra_git/ tools/dev/unix-build/
On Tue, Apr 01, 2014 at 11:51:43AM -0000, stsp@apache.org wrote:
> Author: stsp
> Date: Tue Apr 1 11:51:43 2014
> New Revision: 1583639
>
> URL: http://svn.apache.org/r1583639
> Log:
> Create the ra-git branch: git repository access for Suversion
>
> This allows Subversion clients to interact with git repositories,
> paving the way towards better integration of both systems.
>
> This code originated in a private git repository maintained by me and Carlos.
> Due to popular demand we're now moving development of this library to
> svn.apache.org. Since the Subversion project has finally been convinced
> that git has the better backend[1], we hope to accelerate development of
> the git repository access layer by joining forces on this project with
> the other SVN and libgit2 developers.
>
> [1] https://issues.apache.org/jira/browse/INFRA-7524
>
> We hope to get libsvn_ra_git production ready in time for Subversion 1.9.0.
>
> The long-term intention is that git will become the default repository
> backend for Subversion 1.10 and later, lifting much of the burden of
> backend development off the SVN team. BDB has already been deprecated in
> 1.8 because of this burden. Development of the FSFS successor FSX has been
> slower than anticipated but FSX will stay as an optional backend in case
> empirical data demonstrates that it outperforms git in large deployments.
> But the default migration path for the current FSFS userbase will be git.
>
> See the BRANCH-README for design and implementation notes and a list
> of remaining TODO items.
For those who are going to test/review this:
I forgot to mention that we currently use libgit-0.20.0 as our base.
A different version of libgit2 might not work as expected.
Building libgit2 is a breeze, by the way. It has a very portable
cmake-based build system and no externals dependencies (except
libssh, but that isn't yet supported by ra-git anyway).
Have fun!
For those interested, here's a "screenshot" of the action:
$ svn checkout git+https://github.com/carlosmn/jagged
DBG: ra_plugin.c: 952: creating git repos in '/tmp/svn-HGOtGH'
DBG: ra_plugin.c: 144: trying remote url 'https://github.com/carlosmn/jagged'
DBG: ra_plugin.c: 191: found remote url 'https://github.com/carlosmn/jagged', fs_path: ''
DBG: ra_plugin.c: 213: fetching from https://github.com/carlosmn/jagged
DBG: ra_plugin.c: 628: Counting objects: 670, done.
DBG: ra_plugin.c: 628:
DBG: ra_plugin.c: 628: Compressing objects: 100% (351/351), done.
DBG: ra_plugin.c: 628:
DBG: ra_plugin.c: 648: objects: 670 total 670 indexed 670 received 0 local, deltas: 171 total 171 indexed, 1274089 bytes received
DBG: ra_plugin.c: 661: update refs/remotes/origin/master
DBG: ra_plugin.c: 242: scanning git commits...
DBG: ra_plugin.c: 272: r1 -> 6ad856118a0f42e4ea82b0d3ef70f39983aa19d7
DBG: ra_plugin.c: 272: r2 -> 1396344f68f5699bd7008c575ea7dd2b8f124c02
DBG: ra_plugin.c: 272: r3 -> 02299b15b2fa4df1203349245558acee7d5cfe75
DBG: ra_plugin.c: 272: r4 -> 7f589e38136c94ff838fce17f6b15ff4ad6391b9
DBG: ra_plugin.c: 272: r5 -> 35972242ef82ac0f587ca335a1769e61c2831e08
DBG: ra_plugin.c: 272: r6 -> 40b6fc0744fcc44419b4a6652a20b710a3d2db7d
DBG: ra_plugin.c: 272: r7 -> b1dafc5459544d29605cc89654e12953537be950
DBG: ra_plugin.c: 272: r8 -> d5ac4160703d4f7d769f0b31ca29875583ccec8c
DBG: ra_plugin.c: 272: r9 -> b2780bd85748fc3f7d9a1d0b26da69d1b322a5ce
DBG: ra_plugin.c: 272: r10 -> e498f545c9469d29e21de15338aa7ddef51df63c
DBG: ra_plugin.c: 272: r11 -> b41dc899b020fcc776ae44c896c220dca9345538
DBG: ra_plugin.c: 272: r12 -> 3769e9508a4e50fec3c912b497bfe486adbf09cb
DBG: ra_plugin.c: 272: r13 -> 400f30f3a451855d9b42d4a5e7e6ae0f13ab5810
DBG: ra_plugin.c: 272: r14 -> 843557ed5c9ecf7044449fe58bed538aa31c291a
DBG: ra_plugin.c: 272: r15 -> 4f6567d5655f782503d41d0e702a36fce1f2827c
DBG: ra_plugin.c: 272: r16 -> 212461b0ac473b6cffc48d65a00250d71d9e9f3b
DBG: ra_plugin.c: 272: r17 -> 54fe89bbe52aaf3dc9d9a38963735a4a31860ae8
DBG: ra_plugin.c: 272: r18 -> 891727fa17a953bcf686d59beeeb8b886a37a93c
DBG: ra_plugin.c: 272: r19 -> c0971512a155a7efc819bb534df20092dd62d838
DBG: ra_plugin.c: 272: r20 -> 0211055f2766fddb58da64fac6f5b35814d3dfe8
DBG: ra_plugin.c: 272: r21 -> ffecc89926ebb8ea947caa89d7e9cf4f29f2361a
DBG: ra_plugin.c: 272: r22 -> 0a9109b7950a26fc734e9ccdefab0e510506b345
DBG: ra_plugin.c: 272: r23 -> fdd11adc6615331c94aba142a3b7f2a2875f44b5
DBG: ra_plugin.c: 272: r24 -> 144af3a9e22f0fa05ac3539766b2f8e8d51bdfc7
DBG: ra_plugin.c: 272: r25 -> c08e6a2821558bda74eed4378476bf9d54362145
DBG: ra_plugin.c: 272: r26 -> 503094b8bd84187e6412a05621b8fbb81f9072f9
DBG: ra_plugin.c: 272: r27 -> 892ebc2709dec722e389d796d347ad7adf15091d
DBG: ra_plugin.c: 272: r28 -> a3c4a52d5ba910252131cb57b13f14ddab8514d2
DBG: ra_plugin.c: 279: done scanning git commits (28 revisions)
A jagged/.gitignore
A jagged/.travis.yml
A jagged/scripts
A jagged/scripts/build.sh
A jagged/scripts/build.cmd
A jagged/scripts/arch.mk
A jagged/src
A jagged/src/main
A jagged/src/main/native
A jagged/src/main/native/libjagged
A jagged/src/main/native/libjagged/util.h
A jagged/src/main/native/libjagged/exception.h
A jagged/src/main/native/libjagged/reference.h
A jagged/src/main/native/libjagged/repository.h
A jagged/src/main/native/libjagged/object.c
A jagged/src/main/native/libjagged/misc.c
A jagged/src/main/native/libjagged/CMakeLists.txt
A jagged/src/main/native/libjagged/reference.c
A jagged/src/main/native/libjagged/repository.c
A jagged/src/main/native/libjagged/global.c
A jagged/src/main/native/libjagged/oid.h
A jagged/src/main/java
A jagged/src/main/java/org
A jagged/src/main/java/org/libgit2
A jagged/src/main/java/org/libgit2/jagged
A jagged/src/main/java/org/libgit2/jagged/TreeEntry.java
A jagged/src/main/java/org/libgit2/jagged/ObjectId.java
A jagged/src/main/java/org/libgit2/jagged/DetachedHead.java
A jagged/src/main/java/org/libgit2/jagged/Mode.java
A jagged/src/main/java/org/libgit2/jagged/Version.java
A jagged/src/main/java/org/libgit2/jagged/Commit.java
A jagged/src/main/java/org/libgit2/jagged/Capabilities.java
A jagged/src/main/java/org/libgit2/jagged/Options.java
A jagged/src/main/java/org/libgit2/jagged/Branch.java
A jagged/src/main/java/org/libgit2/jagged/Reference.java
A jagged/src/main/java/org/libgit2/jagged/FilteringOptions.java
A jagged/src/main/java/org/libgit2/jagged/ConfigurationLevel.java
A jagged/src/main/java/org/libgit2/jagged/Tree.java
A jagged/src/main/java/org/libgit2/jagged/Signature.java
A jagged/src/main/java/org/libgit2/jagged/ObjectType.java
A jagged/src/main/java/org/libgit2/jagged/core
A jagged/src/main/java/org/libgit2/jagged/core/GitError.java
A jagged/src/main/java/org/libgit2/jagged/core/NativeLoader.java
A jagged/src/main/java/org/libgit2/jagged/core/HashCode.java
A jagged/src/main/java/org/libgit2/jagged/core/BlobMetadata.java
A jagged/src/main/java/org/libgit2/jagged/core/GitErrorType.java
A jagged/src/main/java/org/libgit2/jagged/core/Lazy.java
A jagged/src/main/java/org/libgit2/jagged/core/ReferenceType.java
A jagged/src/main/java/org/libgit2/jagged/core/Ensure.java
A jagged/src/main/java/org/libgit2/jagged/core/GitException.java
A jagged/src/main/java/org/libgit2/jagged/core/NativeHandle.java
A jagged/src/main/java/org/libgit2/jagged/core/BlobFilteredContentStream.java
A jagged/src/main/java/org/libgit2/jagged/core/Platform.java
A jagged/src/main/java/org/libgit2/jagged/core/BlobContentStream.java
A jagged/src/main/java/org/libgit2/jagged/core/CommitMetadata.java
A jagged/src/main/java/org/libgit2/jagged/core/NativeMethods.java
A jagged/src/main/java/org/libgit2/jagged/ReferenceCollection.java
A jagged/src/main/java/org/libgit2/jagged/GitObject.java
A jagged/src/main/java/org/libgit2/jagged/Blob.java
A jagged/src/main/java/org/libgit2/jagged/Repository.java
A jagged/src/test
A jagged/src/test/java
A jagged/src/test/java/org
A jagged/src/test/java/org/libgit2
A jagged/src/test/java/org/libgit2/jagged
A jagged/src/test/java/org/libgit2/jagged/BlobTest.java
A jagged/src/test/java/org/libgit2/jagged/ReferenceTest.java
A jagged/src/test/java/org/libgit2/jagged/RepositoryTest.java
A jagged/src/test/java/org/libgit2/jagged/TreeTest.java
A jagged/src/test/java/org/libgit2/jagged/GitTest.java
A jagged/src/test/java/org/libgit2/jagged/ObjectIdTest.java
A jagged/src/test/java/org/libgit2/jagged/VersionTest.java
A jagged/src/test/java/org/libgit2/jagged/CommitTest.java
A jagged/src/test/java/org/libgit2/jagged/core
A jagged/src/test/java/org/libgit2/jagged/core/NativeTestMethods.java
A jagged/src/test/java/org/libgit2/jagged/core/ExceptionTest.java
A jagged/src/test/java/org/libgit2/jagged/CapabilitiesTest.java
A jagged/src/test/java/org/libgit2/jagged/OptionsTest.java
A jagged/src/test/native
A jagged/src/test/native/libjagged_test
A jagged/src/test/native/libjagged_test/CMakeLists.txt
A jagged/src/test/native/libjagged_test/exception.c
A jagged/src/test/resources
A jagged/src/test/resources/testrepo
A jagged/src/test/resources/testrepo/.gitted
A jagged/src/test/resources/testrepo/.gitted/HEAD
A jagged/src/test/resources/testrepo/.gitted/description
A jagged/src/test/resources/testrepo/.gitted/logs
A jagged/src/test/resources/testrepo/.gitted/logs/HEAD
A jagged/src/test/resources/testrepo/.gitted/logs/refs
A jagged/src/test/resources/testrepo/.gitted/logs/refs/heads
A jagged/src/test/resources/testrepo/.gitted/logs/refs/heads/master
A jagged/src/test/resources/testrepo/.gitted/config
A jagged/src/test/resources/testrepo/.gitted/index
A jagged/src/test/resources/testrepo/.gitted/objects
A jagged/src/test/resources/testrepo/.gitted/objects/05
A jagged/src/test/resources/testrepo/.gitted/objects/05/5fe18dd1aef07991ebd08b4d54fc761dd022fb
A jagged/src/test/resources/testrepo/.gitted/objects/d1
A jagged/src/test/resources/testrepo/.gitted/objects/d1/796967d47949153bb852c07304d9e5f2f0040c
A jagged/src/test/resources/testrepo/.gitted/objects/2d
A jagged/src/test/resources/testrepo/.gitted/objects/2d/08ab4853a55488a4e3323ebf804c3a732a2f6d
A jagged/src/test/resources/testrepo/.gitted/objects/dc
A jagged/src/test/resources/testrepo/.gitted/objects/dc/48b6c38e967e57965e36c6f7a1c3ec5c3e1ff4
A jagged/src/test/resources/testrepo/.gitted/objects/d4
A jagged/src/test/resources/testrepo/.gitted/objects/d4/bcc68acd4410bf836a39f20afb2c2ece09584e
A jagged/src/test/resources/testrepo/.gitted/objects/5e
A jagged/src/test/resources/testrepo/.gitted/objects/5e/ab02d63a3676df528bcd878ac935ec0c4d5bdc
A jagged/src/test/resources/testrepo/.gitted/objects/57
A jagged/src/test/resources/testrepo/.gitted/objects/57/cf500670b83b1ad4d86db6436bb91531cf3e27
A jagged/src/test/resources/testrepo/.gitted/objects/e7
A jagged/src/test/resources/testrepo/.gitted/objects/e7/7ab1c63f3fbde9c5ef9972939aa0717012d7c0
A jagged/src/test/resources/testrepo/.gitted/objects/8f
A jagged/src/test/resources/testrepo/.gitted/objects/8f/be49af0d14c65f881b57709acae2ea3414089a
A jagged/src/test/resources/testrepo/.gitted/objects/96
A jagged/src/test/resources/testrepo/.gitted/objects/96/a82bbe56b718c4c452491014c91d9b63ab8a79
A jagged/src/test/resources/testrepo/.gitted/info
A jagged/src/test/resources/testrepo/.gitted/info/exclude
A jagged/src/test/resources/testrepo/.gitted/refs
A jagged/src/test/resources/testrepo/.gitted/refs/heads
A jagged/src/test/resources/testrepo/.gitted/refs/heads/master
A jagged/src/test/resources/testrepo/one.txt
A jagged/src/test/resources/testrepo/three.txt
A jagged/src/test/resources/testrepo/two.txt
A jagged/.gitmodules
A jagged/pom.xml
A jagged/README.md
A jagged/Makefile
A jagged/make.cmd
A jagged/settings
A jagged/settings/java-cleanup.xml
A jagged/settings/java-formatting.xml
A jagged/LICENSE
Checked out revision 28.
Re: libsvn_ra_git [was: svn commit: r1583639 [1/3] - ...]
Posted by Stefan Sperling <st...@elego.de>.
On Tue, Apr 01, 2014 at 11:49:04AM -0400, Mark Phippard wrote:
> Did you guys run this by legal@?
>
> libgit2 is GPLv2 licensed. I know they claim to support permissive linking
> and that should be the end of it, but ASF legal might still want to weigh
> in.
I don't see a problem. libgit2 is intended to be an optional dependency.
People who don't like the GPL or don't trust the linking exception
promise can keep using Subversion's native repository backends.
It's not like github would ever turn around on their linking exception
promise, would they? I really doubt that.
Also, I think we should keep the discussion focused on technical matters.
Re: libsvn_ra_git [was: svn commit: r1583639 [1/3] - ...]
Posted by Mark Phippard <ma...@gmail.com>.
On Tue, Apr 1, 2014 at 11:33 AM, Julian Foad <ju...@btopenworld.com>wrote:
> Stefan Sperling wrote:
>
> >> URL: http://svn.apache.org/r1583639
> >> Log:
> >> Create the ra-git branch: git repository access for Suversion
> >
> > For those who are going to test/review this:
> >
> > I forgot to mention that we currently use libgit-0.20.0 as our base.
> > A different version of libgit2 might not work as expected.
> >
> > Building libgit2 is a breeze, by the way. It has a very portable
> > cmake-based build system and no externals dependencies (except
> > libssh, but that isn't yet supported by ra-git anyway).
>
> Very cool!
>
> I committed a couple of tweaks to the 'build.conf' file to help it build
> on Linux (I'm using Ubuntu 12.04). For the record, I built and installed
> libgit2 like this:
>
>
Did you guys run this by legal@?
libgit2 is GPLv2 licensed. I know they claim to support permissive linking
and that should be the end of it, but ASF legal might still want to weigh
in.
--
Thanks
Mark Phippard
http://markphip.blogspot.com/
libsvn_ra_git [was: svn commit: r1583639 [1/3] - ...]
Posted by Julian Foad <ju...@btopenworld.com>.
Stefan Sperling wrote:
>> URL: http://svn.apache.org/r1583639
>> Log:
>> Create the ra-git branch: git repository access for Suversion
>
> For those who are going to test/review this:
>
> I forgot to mention that we currently use libgit-0.20.0 as our base.
> A different version of libgit2 might not work as expected.
>
> Building libgit2 is a breeze, by the way. It has a very portable
> cmake-based build system and no externals dependencies (except
> libssh, but that isn't yet supported by ra-git anyway).
Very cool!
I committed a couple of tweaks to the 'build.conf' file to help it build on Linux (I'm using Ubuntu 12.04). For the record, I built and installed libgit2 like this:
[[[
$ cd ~/src/libgit2-0.20.0
$ mkdir build && cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=~/.local/libgit2-0.20.0
[...]
$ cmake --build . --target install
[...]
[ 23%] Built target git2
[...]
[100%] Built target libgit2_clar
Install the project...
-- Install configuration: "Debug"
-- Installing: /home/julianfoad/.local/libgit2-0.20.0/lib/libgit2.so.0.20.0
-- Installing: /home/julianfoad/.local/libgit2-0.20.0/lib/libgit2.so.0
-- Installing: /home/julianfoad/.local/libgit2-0.20.0/lib/libgit2.so
-- Installing: /home/julianfoad/.local/libgit2-0.20.0/lib/pkgconfig/libgit2.pc
[...]
-- Installing: /home/julianfoad/.local/libgit2-0.20.0/include/git2/diff.h
-- Installing: /home/julianfoad/.local/libgit2-0.20.0/include/git2.h
]]]
And then I configured Subversion with:
LDFLAGS=-Wl,-rpath,$HOME/.local/libgit2-0.20.0/lib [my normal ./configure ... command] --with-libgit2=$HOME/.local/libgit2-0.20.0
- Julian