Daily Use Guide for using Savannah for lwIP

Table of Contents:

1 - Obtaining lwIP from the CVS repository
2 - Committers/developers CVS access using SSH (to be written)
3 - Merging from DEVEL branch to main trunk (stable branch)
4 - How to release lwIP



1 Obtaining lwIP from the CVS repository
----------------------------------------

To perform an anonymous CVS checkout of the main trunk (this is where
bug fixes and incremental enhancements occur), do this:

cvs -z3 -d:pserver:anonymous@cvs.sv.gnu.org:/sources/lwip checkout lwip
 
Or, obtain a stable branch (updated with bug fixes only) as follows:
cvs -z3 -d:pserver:anonymous@cvs.sv.gnu.org:/sources/lwip checkout \
  -r STABLE-0_7 -d lwip-0.7 lwip

Or, obtain a specific (fixed) release as follows:
cvs -z3 -d:pserver:anonymous@cvs.sv.gnu.org:/sources/lwip checkout \
  -r STABLE-0_7_0 -d lwip-0.7.0 lwip

3 Committers/developers CVS access using SSH
--------------------------------------------

The Savannah server uses SSH (Secure Shell) protocol 2 authentication and encryption.
As such, CVS commits to the server occur through a SSH tunnel for project members.
To create a SSH2 key pair in UNIX-like environments, do this:

ssh-keygen -t dsa

Under Windows, a recommended SSH client is "PuTTY", freely available with good
documentation and a graphic user interface. Use its key generator.

Now paste the id_dsa.pub contents into your Savannah account public key list. Wait
a while so that Savannah can update its configuration (This can take minutes).

Try to login using SSH:

ssh -v your_login@cvs.sv.gnu.org

If it tells you:

Authenticating with public key "your_key_name"...
Server refused to allocate pty

then you could login; Savannah refuses to give you a shell - which is OK, as we
are allowed to use SSH for CVS only. Now, you should be able to do this:

export CVS_RSH=ssh
cvs -z3 -d:ext:your_login@cvs.sv.gnu.org:/sources/lwip co lwip
 
after which you can edit your local files with bug fixes or new features and
commit them. Make sure you know what you are doing when using CVS to make
changes on the repository. If in doubt, ask on the lwip-members mailing list.

(If SSH asks about authenticity of the host, you can check the key
 fingerprint against http://savannah.nongnu.org/cvs/?group=lwip)


3 Merging from DEVEL branch to main trunk (stable)
--------------------------------------------------

Merging is a delicate process in CVS and requires the
following disciplined steps in order to prevent conflicts
in the future. Conflicts can be hard to solve!

Merging from branch A to branch B requires that the A branch
has a tag indicating the previous merger. This tag is called
'merged_from_A_to_B'. After merging, the tag is moved in the
A branch to remember this merger for future merge actions.

IMPORTANT: AFTER COMMITTING A SUCCESFUL MERGE IN THE
REPOSITORY, THE TAG MUST BE SET ON THE SOURCE BRANCH OF THE
MERGE ACTION (REPLACING EXISTING TAGS WITH THE SAME NAME).

Merge all changes in DEVEL since our last merge to main:

In the working copy of the main trunk:
cvs update -P -jmerged_from_DEVEL_to_main -jDEVEL 

(This will apply the changes between 'merged_from_DEVEL_to_main'
and 'DEVEL' to your work set of files)

We can now commit the merge result.
cvs commit -R -m "Merged from DEVEL to main." 

If this worked out OK, we now move the tag in the DEVEL branch
to this merge point, so we can use this point for future merges:

cvs rtag -F -r DEVEL merged_from_DEVEL_to_main lwip 

4 How to release lwIP
---------------------

First, checkout a clean copy of the branch to be released. Tag this set with
tag name "STABLE-0_6_3". (I use release number 0.6.3 throughout this example).

Login CVS using pserver authentication, then export a clean copy of the
tagged tree. Export is similar to a checkout, except that the CVS metadata
is not created locally. 

export CVS_RSH=ssh
cvs -z3 -d:pserver:anonymous@cvs.sv.gnu.org:/sources/lwip checkout \
  -r STABLE-0_6_3 -d lwip-0.6.3 lwip

Archive this directory using tar, gzip'd, bzip2'd and zip'd.

tar czvf lwip-0.6.3.tar.gz lwip-0.6.3
tar cjvf lwip-0.6.3.tar.bz2 lwip-0.6.3
zip -r lwip-0.6.3.zip lwip-0.6.3

Now, sign the archives with a detached GPG binary signature as follows:

gpg -b lwip-0.6.3.tar.gz
gpg -b lwip-0.6.3.tar.bz2
gpg -b lwip-0.6.3.zip

Upload these files using anonymous FTP:
ncftp ftp://savannah.gnu.org/incoming/savannah/lwip

ncftp>mput *0.6.3.*

Additionally, you may post a news item on Savannah, like this:

A new 0.6.3 release is now available here:
http://savannah.nongnu.org/files/?group=lwip&highlight=0.6.3

You will have to submit this via the user News interface, then approve
this via the Administrator News interface.