Table of Contents
This chapter takes you through a brief guided tour of the Ankur Development System. It will also be a brief tutorial of the usage of certain key parts of the development infrastructure (like CVS, etc).
Everything at Ankur is a collaborative process, with the volunteers communicating through the respective mailing lists. All volunteers keep the mailing list regularly updated regarding the work they are doing. Also, mailing lists are the places for asking questions and clearing doubts. If you take up something, please, before doing anything else, post an announcement at the concerned mailing list.
All major project related decisions are made via general consensus, and/or by voting. Of course, certain decisions are taken in a “benevolent dictatorial” manner by the project coordinator, but, usually, such decisions are few and far between.
Write access to services such as CVS, shell server, etc are given by the administrators. If you need write access to any such service, please post a request to <core@bengalinux.org>, stating valid reasons.
Software releases are made via the release manager, if you need to release something at the Project file area, please get in touch with the release manager at <release@bengalinux.org>.
CVS is often regarded as an extremely hairy and geeky tool, and even seasoned GNU/Linux campaigners often avoid it. So, naturally, first of all, this chapter deals with CVS. This section begins with a quick and dirty crash course on working with CVS, and, later, you will find a short but detailed description of CVS.
Make sure to use ssh
$ export CVS_RSH=ssh
Checkout the imbeng module (need to specify -rbranchname to checkout a particular branch)
$ cvs -z3 -d:ext:username@cvs.sourceforge.net:/cvsroot/bengalinux co imbeng
Update all files in the imbeng module
$ cd imbeng
$ cvs update -dP .
Update a single file (say AUTHORS)
$ cd imbeng
$ cvs update AUTHORS
Commit changes you made (e.g., to the AUTHORS file)
$ cd imbeng
$ cvs commit -m "brief description of changes" AUTHORS
Once you have set things up (see details below), it is important to keep the CVS tree as updated as possible. In order to do this, whenever you work on a file (say imbeng/fubar), connect to the internet and update your copy of the file.
$ cd imbeng
$ cvs up fubar
Disconnect if you wish, and make the changes you want Reconnect and commit these changes.
$ cvs commit -m "brief message" fubar
Of course, if you are sure that no one else would be working on that file, it is not as important to commit everytime you change something, but it does keep a backup in case something happens to your local copy.
CVS is a very complicated tool, but thankfully it is easy enough to use for normal users.
Basically, a repository of files (arranged in a directory structure) is stored in a central server, and users can check out copies of this repository. This would create a copy of the (current version of the) files in the users local hard drive.
The user can make changes to these files at their leisure (no need to be connected to the net), and subsequently commit these changes to the main repository. It is even possible for more than one user to work on (and commit changes in) the same file, and CVS intelligently merges these changes as long as they are in different parts of the file. (If there are conflicting changes, CVS needs someone to manually sort out the ambiguities.)
CVS also retains all previous versions of all files that were ever part of the repository, so it's possible (though not easy) to recover from mistakes.
I will be specific to the sourceforge CVS from now on, but all this should hold with appropriate changes to any other CVS tree.
Of course, you need to be working on Unix (such as GNU/Linux) and have an internet connection (Windows users see the Windows HOWTO when it is written). To access the sourceforge cvs repository, and change anything in there, you will need write access. For write access, send a mail to <core@bengalinux.org>, stating valid reasons.
A cvs repository typically contains several `modules'. You can check out one or more modules, but not part of a module. Currently Ankur has the following modules:
devel-guide
docs
gnome-translations
imbeng
misc
www
xponjika
A module needs to be checked out only once (and if your hard drive crashes or you otherwise need to delete your locally checked out copy, you can always check it out again later).
When you check out a module, it will create a directory locally. You can place this directory anywhere, but it's probably a good idea to collect all the Ankur modules together. So, start up a shell and create a directory where you will keep the modules.
$ cd ~
$ mkdir Ankur-cvs
$ cd Ankur-cvs
You are now all set to check out a module. Connect to the internet, and issue the following commands to checkout the imbeng module:
$ export CVS_RSH=ssh
this works in bash, might be different in other shells.
$ cvs -z3 -d:ext:username@cvs.sourceforge.net:/cvsroot/bengalinux co imbeng
Remember to use your own username here. Note that the sf CVS server might be inaccessible at some times, n which case this will fail and you should try again later.
If you are doing this for the first time, you will probably see a message like
The authenticity of host 'cvs.sourceforge.net (66.35.250.207)' can't be established. DSA key fingerprint is 02:ab:7c:aa:49:ed:0b:a8:50:13:10:c2:3e:92:0f:42. Are you sure you want to continue connecting (yes/no)?
to which you should say yes. It should then ask for your password (possibly after a warning):
Warning: Permanently added 'cvs.sourceforge.net,66.35.250.207' (DSA) to the list of known hosts. deepayan@cvs.sourceforge.net's password:
Enter your sourceforge password here. If you are authenticated, the imbeng module should be downloaded to your hard drive:
cvs server: Updating imbeng U imbeng/AUTHORS U imbeng/COPYING U imbeng/ChangeLog U imbeng/INSTALL U imbeng/Makefile.am U imbeng/Makefile.in U imbeng/NEWS U imbeng/README U imbeng/aclocal.m4 U imbeng/config.guess U imbeng/config.h.in U imbeng/config.sub U imbeng/configure U imbeng/configure.in U imbeng/depcomp U imbeng/imbeng.c U imbeng/imbeng.h U imbeng/install-sh U imbeng/ltmain.sh U imbeng/missing U imbeng/mkinstalldirs
You can now browse and edit any of these files.
deepayan 17:50:53 $ pwd /home/deepayan/Ankur-cvs deepayan 17:50:59 $ ls -lR .: total 4 drwxr-xr-x 3 deepayan deepayan 4096 May 5 16:07 imbeng ./imbeng: total 776 -rw-r--r-- 1 deepayan deepayan 83 May 5 16:07 AUTHORS -rw-r--r-- 1 deepayan deepayan 17992 Jan 30 03:15 COPYING drwxr-xr-x 2 deepayan deepayan 4096 May 5 16:09 CVS -rw-r--r-- 1 deepayan deepayan 0 Jan 30 03:15 ChangeLog -rw-r--r-- 1 deepayan deepayan 9236 Jan 30 03:15 INSTALL -rw-r--r-- 1 deepayan deepayan 232 Jan 30 03:15 Makefile.am -rw-r--r-- 1 deepayan deepayan 13867 Jan 30 03:15 Makefile.in -rw-r--r-- 1 deepayan deepayan 0 Jan 30 03:15 NEWS -rw-r--r-- 1 deepayan deepayan 85 Jan 30 03:15 README -rw-r--r-- 1 deepayan deepayan 148585 Jan 30 03:15 aclocal.m4 -rwxr-xr-x 1 deepayan deepayan 38504 Jan 30 03:15 config.guess -rw-r--r-- 1 deepayan deepayan 1522 Jan 30 03:15 config.h.in -rwxr-xr-x 1 deepayan deepayan 28224 Jan 30 03:15 config.sub -rwxr-xr-x 1 deepayan deepayan 281745 Jan 30 03:20 configure -rw-r--r-- 1 deepayan deepayan 599 Jan 30 03:20 configure.in -rwxr-xr-x 1 deepayan deepayan 12123 Jan 30 03:15 depcomp -rw-r--r-- 1 deepayan deepayan 15947 Jan 31 06:12 imbeng.c -rw-r--r-- 1 deepayan deepayan 2440 Jan 30 03:15 imbeng.h -rwxr-xr-x 1 deepayan deepayan 5569 Jan 30 03:15 install-sh -rw-r--r-- 1 deepayan deepayan 141392 Jan 30 03:15 ltmain.sh -rwxr-xr-x 1 deepayan deepayan 10270 Jan 30 03:15 missing -rwxr-xr-x 1 deepayan deepayan 1801 Jan 30 03:15 mkinstalldirs ./imbeng/CVS: total 12 -rw-r--r-- 1 deepayan deepayan 951 May 5 16:09 Entries -rw-r--r-- 1 deepayan deepayan 7 May 5 16:03 Repository -rw-r--r-- 1 deepayan deepayan 54 May 5 16:03 Root
Note that there's a directory called imbeng/CVS/. Don't touch anything in it. Almost all cvs commands will produce a warning about this directory, which you can safely ignore.
OK, so now that you have a copy of the CVS tree in your local machine, what should you do next ? The most useful things to do are
Update your copy of the CVS tree to reflect the changes others have made since you last updated.
Commit your own changes to the CVS tree so that others can see them.
You could also do things like
Add a new file
Delete an existing file
which should be about all a regular user needs to do. Details on each of these things follow:
A general rule of cvs is that you need to be IN the module directory (or one of its subdirectories) for the cvs commands to have any effect (this is because cvs reads information from files in the CVS/ directory). So, to update the whole of the imbeng module, for instance, do
$ export CVS_RSH=ssh
It's probably a good idea to add this to your shell profile
$ cd ~/Ankur-cvs/imbeng/
$ cvs up -dP .
This would compare your existing files to the versions currently in CVS (which has changed since the last time you checked if someone else committed anything) and if necessary download the changes and merge them with your local files. The only constraint is that it would NEVER automatically remove any changes you have made locally to any of the files. Comparing local and CVS files obvioulsy takes some bandwidth. If you are interested in only one (or a few) specific file(s), there's no point in checking everything. You can update individual files as follows (e.g., the AUTHORS file):
$ cvs up AUTHORS
Suppose you make changes to the AUTHORS file. You can commit these changes to the main CVS repository by
$ cvs commit -m "brief description of changes" AUTHORS
You could also similarly commit the whole directory
$ cvs commit -m "brief description of changes" .
in which case all the files you have changed will be uploaded. Others can subsequently see your changes when they update their own copies of the CVS archive.
You should always give the -m message. If not, you will be thrown into an editor (most likely vi) where you will need to write a message.
Suppose you want to add a new file to the tree, say imbeng/ fubar. Create this file locally and make whatever changes you want. Then, do
$ cd imbeng
$ cvs add fubar
$ cvs commit -m "added new file fubar with ..." fubar