WARNING (July 2014)

This page is obsolete, as Sage is now using Git instead of Mercurial as a version control system.

The purpose of this page is to explain how to share your branch of Sage development. I am sure there more than one way to do so, but the solution shown here is the same as the way Sage Combinat shares its development.

First, clone the sage-main. Below, I use my sage trac username to name that branch, because it's my branch of Sage development.

sage -b main
sage -clone slabbe

Go to the directory associated to that new branch and initialize the Queue for Mercurial. See Sage Development Manual : Mercurial queues for more details.

cd SAGE_HOME/devel/sage-slabbe
hg qinit

This last step created a new directory (SAGE_HOME/devel/sage-slabbe/.hg/patches) where your patches will be saved. In order to share your branch, you simply need to share this directory. For example, you can copy its content to a public directory on your web site. You can also use svn, git or any other revision control system. As I want to work on my branch the exact same way as I am working on the sage-combinat branch, I choose to use hg.

Now I log on the server that will host my patches, I create the (public) patches directory and I initialize that directory as an hg directory:

ssh [email protected]
mkdir patches
cd patches
hg init

I also add a hook to that public repository so that it updates itself automatically when a push is made to it. In other words, I edit the file ~/patches/.hg/hgrc so that it becomes :

#file ~/patches/.hg/hgrc
[hooks]
changegroup = hg update

I then logout from the server and go to the patches directory on my machine and make a clone of the public patches repository created above. I could use the http adress, but I use the ssh one so that I can push to the server later on:

cd SAGE_HOME/devel/sage-slabbe/.hg/patches
hg clone ssh://[email protected]:~/patches .

Like for the Sage-combinat repository, I create in .hg/patches a file called .hgignore containing the following :

# file .hgignore
syntax: glob
status
guards

Then, add, commit and push this first change to the server.

hg add .hgignore
hg commit -m "Added the .hgignore file"
hg push

I can now create patches on my branch like in sage-combinat:

cd SAGE_HOME/devel/sage-slabbe/
hg qnew trac_XXXX-fixing-stuff.patch
vim sage/combinat/partition.py
hg qrefresh -e

I can push my changes to my public server like in sage-combinat:

cd SAGE_HOME/devel/sage-slabbe/.hg/patches
hg st
hg commit
hg push

For the first time, you may need to add the series file as well:

cd SAGE_HOME/devel/sage-slabbe/.hg/patches
hg add series
hg commit
hg push

Last thing, notice that the sage-combinat script can be used to install your branch on any Sage installation with the following one liner :

sage -combinat install -b slabbe -s http://server.com/path/to/your/username/patches/ 

In my case, the result is http://sage.math.washington.edu/home/slabbe/patches/.

SharingYourBranch (last edited 2014-07-20 19:36:28 by chapoton)