ROOT has moved to Subversion

Since two weeks ROOT has moved to Subversion for version control.

We have made the change because Subversion offers many benefits over CVS. Basically all large Open Source projects have preceded us in this move. For more details about the why, how and where see this presentation.

A detailed Subversion HowTo has been added to the ROOT website.

To ease the migration for the CVS head users we will be keeping the CVS head in sync with the Subversion trunk till the 1st of November. The CVS patch branches for v5-12 and v5-14 will be maintained and remain available in CVS (and of course also in Subversion). The ROOT developers are already exclusively working in Subversion and the CVS syncing is done via a Subversion hook script. However, for the developers to benefit fully of the new features of Subversion, we cannot keep this automatic syncing past the 1st of November.

[quote]Since two weeks ROOT has moved to Subversion for version control.
[/quote]

Hi. Two days ago I’ve downloaded CVS head (sure, using CVS, not SVN).
After compression the size of root.tar.gz was about 22 MB.

Yestarday I’ve installed SVN and downloaded ROOT’s head with SVN.
After compression the size of root.tar.gz is 40 MB. What’s wrong?
I took command from SVN howto you ment:

svn co root.cern.ch/svn/root/trunk root

This must be:

“i.e. the head in CVS language”

Why it’s so big now?

What do you mean by “root.tar.gz” ? How did you make it?
You can generate the source tar file via SVN by doing:

cd $ROOTSYS make distsrc The generated tar file should be 22.4 MBytes. You can import it too from
root.cern.ch/root/Version517.html

Rene

I do: tar zcvf root.tar.gz root in both cases.

What should be the size of head, which I download with SVN (with
"svn co root.cern.ch/svn/root/trunk root") without compression?

Because svn creates copies of all files in .svn directories. This allows svn to work completely off-line and having pristine copies around in case you want to revert. Of course this doubles the space. If you make you tar exclude the .svn directories.

Cheers, Fons.

if you tar zcvf root.tar.gz root you tar all the “.svn” directories with the full history that you do not get in the cvs case.
Let me repeat to make a tar file use “make distsrc”. This will not include the .svn directories.

Rene

Yes, you are right.

I’ve just noticed - the size of, say, gl module is twice the size of gl module downloaded by CVS.
In my $ROOTSYS/gl/src/.svn/text-base/ I have copies of ALL SOURCES from gl/src. I never used SVN before and do not know how it works. May be I should configure it somehow? Does this mean that using svn I’m downloading more data or text-base is created on my machine (not downloaded)?

Yes, true, you download more data, but then you can make diffs locally without the network)

Rene

[quote=“brun”]Yes, true, you download more data, but then you can make diffs locally without the network)

Rene[/quote]

Ok, thank you, I understand now :slight_smile:

Well, of course you don’t really download more data, the data is just copied on arrival so it has not impact on the network.

– Fons

[quote]
Well, of course you don’t really download more data, the data is just copied on arrival so it has not impact on the network.
– Fons[/quote]
Ah! Yes, that’s what I thought (and think) a good logically-correct system should do :slight_smile:

hi,

just a comment: the how to link for subversion doesn’t work.

cheers,
axel.

Thanks, I’ve corrected the link to the Subversion HowTo in the top of this thread.

Cheers, Fons.

Now, how big is the whole repository with all tags and logs? Near 1GB?

Yes, 1.07 GB.

Cheers, Fons.

So big repo! It took me 4 days to checkout the whole repo with “git svn”! Now, I have all branches and tags locally. #-o :unamused:

$ git svn http://root.cern.ch/svn/root/ --stdlayout
...
$ du -sh root
713M   root
$ du -sh root/.git
579M  root/.git

Now, I can browser all history and changes locally. Though I definitely know that I cannot view all the codes in the rest of my life, still feel happy to have it. :slight_smile:

OK, after “git gc”, the repo is slightly decreased in size:

$ git gc
$ du -sh .
576M     .
$ du -sh .git
443M     .git

It is still big. :slight_smile:

Next week I hope to have a git mirror running on root.cern.ch, so you can access the whole thing from our git.

Cheers, Fons.

[quote=“rdm”]Next week I hope to have a git mirror running on root.cern.ch, so you can access the whole thing from our git.
Cheers, Fons.[/quote]
Where is the git mirror? :slight_smile:

After “git svn clone --stdlayout”, the local repo doesn’t take remote svn tags as local tags. So I wrote this little python script to correct it. Hope it helpful for others who want to use “git svn”:

#!/usr/bin/env python
import os

def git_fix_svn_tags(gdir):
    print "Change to dir %s"%gdir
    os.chdir(gdir)
    svn_tags = []
    for l in os.popen("git show-ref").readlines():
        head,tag = l.strip().split()
        if "remotes/tags" in tag:
            svn_tags.append([head,tag.split("/")[-1]])
    for t in svn_tags:
        print "Add tag: %s (%s)"%(t[1],t[0]),
        if os.system("git tag %s %s"%(t[1],t[0])) == 0: print "OK!"
        else: print "Oops!"

if __name__=="__main__":
    import sys
    if len(sys.argv) < 2:
        print "Usage: %s <path-in-git-control>"%sys.argv[0]
    else: git_fix_svn_tags(sys.argv[1])

I’ll try to provide the git mirror after the release next week. Thanks for the script.

Cheers, Fons.

Another problem I encountered while doing “git svn rebase” is the following error:

Byte order is not compatible at ../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/_retrieve.al) line 380, at /usr/lib/perl5/5.10/Memoize/Storable.pm line 21

This case happens when you checkout the repo in an x86_64 PC and update it in another x86 PC. This problem can be fixed by delete the directory “.git/svn/.caches” according to goo.gl/zo2AL .