XEmacs -- Emacs: The Next Generation
English
German
Japanese
America
Australia
Europe
   
     About XEmacs Getting XEmacs Customizing XEmacs Troubleshooting XEmacs Developing XEmacs       

XEmacs CVS Repository

For those of you who have been accessing our repository for some time, there has been a big change as of 2001-12-09:

The primary repository is hosted at SunSITE.dk and is aliased to cvs.xemacs.org.

Please review the information below even if you are familiar with the XEmacs CVS repository.

This site has a collection of CVS (Concurrent Versions System) trees for XEmacs, a feature-packed text-editing environment based on Lisp. XEmacs' best features are its extensibility, self-documentation, and its support for multilingual text processing, and is actively being developed by volunteers from all over the world. This site is intended for use by people wanting to hack on or test the sources. For more information, or for source/binary tarballs, check out the XEmacs main WWW server.

Quick Start Guide

First, you need to do, just once:

$ cvs -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs login
(Logging in to cvs@sunsite.dk)
CVS password: cvs
  
To get the latest (21.5) development sources, do:
cvs -z3 -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs checkout -d xemacs-21.5 xemacs
  
To get the latest publically released (21.4) development sources, do:
cvs -z3 -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs checkout -d xemacs-21.4 -r release-21-4 xemacs
  
To get the stable (21.1) development sources, do:
cvs -z3 -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs checkout -d xemacs-21.1 -r release-21-1 xemacs
  
The XEmacs lisp packages are now unbundled, and are available in their own CVS module. There is only one version of the XEmacs packages - no stable or unstable branch. Get them like this:
cvs -z3 -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs checkout packages
  

Each of these components are available separately as non-CVS tarballs via ftp. Here are the current URL's:


What is CVS?

CVS is a hierarchical revision control system that not only keeps track of older versions (natch) but also allows spiffy things like separate branches for concurrent development and coordination services for large numbers of developers. CVS is currently the defacto industry standard source code control system for open source software projects. Knowledge of CVS and ssh are becoming required skills in the free software community. Regular contributors to XEmacs are strongly encouraged to get CVS write access to the source repository. This distributes most of the patch-tracking work to those most qualified to do it, namely the patch authors. XEmacs source code maintenance is basically organized on the bazaar model - we'd like to have as many people as possible, including you, making high quality contributions to the source code, in parallel. But even if you are just a lurker with no desire to make any modifications to the tree, CVS gives you a painless way to upgrade between versions.

Be warned that these trees are large! XEmacs 21 sources will take up almost 40 MB of hard drive space, before compilation. Add in the lisp packages tree (another 80 MB!) in your calculations if you're interested in messing with them too. All in all, the total tree size for the XEmacs core tree is 196MB, comprising over 2006 files with 397754-some odd lines of code. Packages add another 4042 files for 760315 lines of lisp.


Using the XEmacs CVS server

If you're interested in using the XEmacs CVS trees directly using remote CVS, you'll need a version of CVS >= 1.9, with best results (currently) probably coming from 1.11. This server uses the :pserver: protocol, with read-only access available for user cvs, password cvs (gee, where did that come from?). The process goes something like this:

First you need to log into SunSITE.dk. (N.B. We will alias this to cvs.xemacs.org again in the near future. You will then need to login again to check out modules with that hostname. However, old workspaces will continue to work automatically, with the explicit sunsite.dk hostname.) You only need to do this once, as it will create a file in your home directory called .cvspass with the necessary data.

pentagana [532]$ cvs -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs login
(Logging in to cvs@sunsite.dk)
CVS password: (not echoed)cvs
  

Now go the the place you want to put the tree, and actually check out the current version.

pentagana [533]$ cvs -z3 -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs checkout -d xemacs-21.5 xemacs
(churn, churn, churn)
  

And voila! One xemacs-21.5 directory complete with the latest versions of the base code. Packages are separate, of course.

The -doption says what to name the new CVS directory tree.

The -z3 option enables compression during transit, and speeds things along tremendously.

Note: I originally suggested you set this to -z9, but am now asking that you drop the compression rate. The gains in compression are not that great, and the impact on my poor server can be tremendous...

The -r option specifies the CVS branch to use. XEmacs 21.5 (the development version), is on the trunk ``branch'' (which has no name), while XEmacs 21.1 uses the branch release-21-1, which is in the same CVS module. The branch is not named something like xemacs-21.1, because periods are not permitted in a valid CVS branch name.

As it is ignored if not used on a network connection, you might want to add it to your ~/.cvsrc file for future use. You could use a line like this:

cvs -z3
  
Another neat something to put in there could be
diff -u
  
which will make sure everything always comes out in unified diffs, and
checkout -P
update -Pd
  

which will make update get rid of empty directories and create any new ones in the tree. There have also been reports that some files are not created unless -Pd is used with cvs update.

When there is an upstream update, you can get the whole skinny quick, fast and relatively painlessly with the following command (executed from the directory created by cvs checkout).

pentagana [533]$ cvs update
  

Again, you probably will want to add the -P switch (after the word update!) to properly track any changes to the directory structure if you do not have that in your ~/.cvsrc file.

A word about CVS tags

XEmacs developers do CVS commits on an irregular basis. The purpose behind this is to keep those actively coding on the same page. There is no guarantee that the current CVS sources even compile for anyone. This means that if you blindly do a cvs update, there is a chance that what you get is not functional.

The way to get around this is to use the tag feature of CVS. All of the official releases (i.e. those available in tarball form on the ftp site) are at least minimally tested by the `release engineer' for that release. By specifying a tag to most CVS commands, you can tell it which version to grab (however, they default to the most recent in the branch you're working on). All of the 21.x releases are tagged in the format rMAJOR-MINOR-RELEASE (examples: XEmacs 21.5 beta 1 is tagged r21-5-1). Yes, this naming convention has changed from before. Old tags had names like r21-2b26.

The way you use this is by appending the -r <TAG> option to the CVS command you want to use. Therefore, to update to 21.2 beta 26 (but no further) from an earlier release, you'd type:

pentagana [533]$ cvs update -r r21-2-26
  

For beta release on the trunk (XEmacs 21.5), there is a special r21-5-latest-beta tag that you can use to always upgrade to the latest released beta, but no further. This way you can do cvs update -r r21-5-latest-beta just once, and because the tag is sticky, just do a simple cvs update thereafter.

For more info, check your friendly CVS texinfo files.


New Package system

For those of you wishing to work with XEmacs 21, you should probably know about our new packaging system. All the details are available here, but for those of you impatient to jump right in, here's the deal with the CVS trees related to packages.

Each individual package can be grabbed from this CVS server via the same process described above, with the replacement of <PACKAGE-NAME> for the module name. For example:

pentagana [535]$ cvs -z3 -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs checkout gnus
  
will get you a brand spanking new copy of gnus.

There is also an 'uber-package' that will grab all of the packages at once, and even set them up for easy compilation and installation. To use that, simple grab the module packages.


Web Access using ViewCVS

The web-based information generated here is all courtesy of ViewCVS. The history of ViewCVS goes back to cvsweb.

You can browse the file hierarchy by picking directories (which have slashes after them, e.g. lisp/). If you pick a file, e.g. config.el, you will see the revision history for that file.

There is a link at each revision to:

A form at the bottom of the page allows you to display diffs between arbitrary revisions or to only view files of a certain CVS branch.


Commit (R/W) access to the CVS trees

A number of people are able to commit directly to the CVS tree using CVS commands. We are trying to increase this number, which has the following advantages:

  • The CVS history will contain the true author of a change, which makes tracking changes easier, and gives credit where credit is due.

  • Committers are more likely to take responsibility for their changes when they are directly modifying the CVS repository themselves.

To qualify to be a committer, you should have one of the following qualifications:

  • A history of submitting successful patches to xemacs-patches

  • A maintainer of a lisp package gets automatic CVS commit access to the portion of the CVS repository that contains the package.

Currently we are adding new committers using the following method (which may change):

  1. Make sure ssh version 1 is installed on your computer.

  2. Get yourself a ssh public key. Here is some unsolicited advice on maintaining your ssh key:

    In general, you should only have ONE identity that you expose to the outside world. Create only ONE ~/.ssh/identity and ~/.ssh/identity.pub pair with ssh-keygen, and change the comment to something more meaningful like your email address. Your ssh public key is a lot like a business card.

    For example, I modified the comment in my public key using

    ssh-keygen -c -C 'Martin Buchholz <martin@xemacs.org>'
          

    After you have created your public key, copy the ~/.ssh/identity and .ssh/identity.pub file pair to all the machines you run ssh from. When people ask you for your public ssh key, just send them the contents of this identity.pub.

    Also, append your public key file identity.pub to the ~/.ssh/authorized_keys file on all the machines you run ssh to.

  3. Send the CVS administrator (currently Stephen Turnbull) your preferred CVS user name and your public ssh key (i.e. the contents of ~/.ssh/identity.pub). The CVS administrator will take care of the administrivia to give you access.

  4. Add this stanza to your ~/.ssh/config file (create it if necessary):

    Host cvs.xemacs.org
    	User		xemacs
    	ForwardX11	no
    	ForwardAgent	no
            Protocol        1
          

    Yes, you need to use the literal xemacs, not your own CVS user name.

    You can debug your ssh connection by doing something like ssh -v cvs.xemacs.org, and on connecting (there will be no prompt) entering the command noop, and if ssh is working, getting the response ok. You can use command version to determine the CVS server version.

  5. Create a shell script, perhaps named `cvs-rw', that looks like this:

    #!/bin/sh
    exec env CVS_RSH=ssh cvs -w -z3 -d:ext:xemacs@cvs.xemacs.org:/pack/xemacscvs ${1+"$@"}
          
    You can test this by running a harmless CVS command, like cvs-rw diff version.sh.
  6. When you want to do a commit, do

    cvs-rw commit [commit-args ...]
          

    Unfortunately, the :ext: server is unreliable, so for now you should use cvs-rw only for commit operations. Use plain cvs for checkout, update, diff, etc...

    There is an important bug even in the latest versions of CVS. For most operations, CVS will automatically recurse into subdirectories, and execute the operation in each subdirectory. For example, in the top-level directory .../xemacs-21.5, executing cvs update . will update the top-level directory, as well as src, src/s, src/m, lisp, etc, and so on.

    The bug occurs only for the commit operation. If (1) you do a recursive commit, and (2) there are changes to commit in both the top level and lower level directories, the changes in the top level directory will not get committed. For example, as a new developer you wish to add your photo to ./etc/photos. So you copy newface.png and newfacem.png to ./etc/photos, and use cvs add to inform the CVS server of their existence. Since the lowest ChangeLog on that path is in the top directory, you note "* newface*.png: New file" in ./ChangeLog. If you now execute cvs-rw commit ., cvs will report "Committing newface.png ... Committing newfacem.png." ./ChangeLog has not been committed, and your change will not be visible to other developers!

    Nor does it help to give an explicit list like

    cvs-rw commit ./ChangeLog ./etc/photos/newface.png ./etc/photos/newfacem.png
          

    ./ChangeLog will still be omitted. The fix is simple: just repeat the commit. Since all lower-level files have been committed, only ./ChangeLog remains. Condition (2) is not satisfied (there is no work in subdirectories), so ./ChangeLog is committed to the repository.


News and changes

2001-12-09

All of the XEmacs CVS Repository (including its website) is now hosted by SunSITE.dk. The repository is browsable with ViewCVS, which offers these great features:

  • Colorization for many file types via enscript.
  • Bonsai-like query features. (Requires MySQL and some other prerequisites)
  • Annotation/blame viewing support against a read-only repository.
2001-11-08

Changes by Stephen:

Fix bogus instructions from old CVS repository host, name of cvs administrator, etc.

2001-06-01

Changes by Steve Y:

Modified references to the package tree to refer to the new packages CVS module.

2001-05-21

Changes by Stephen:

The Great Trunk Move is documented.

The ``top-level changes get lost in recursive commits'' bug is described.

The version of CVS in use, and recommended, is now 1.11.

XEmacs versions are updated: beta -> 21.5, gamma (new) -> 21.4, and stable remains 21.1.

References to the xemacs-20 module are eliminated.

2000-01-04

Changes by Martin (?):

A section on committing to the CVS tree has been added.

The tag r21-2-latest-beta has been introduced.

Many more people have CVS write access.

We are planning the following changes in the future:

  • Moving the unstable development branch to the CVS trunk, and moving xemacs-21.1 onto a branch, probably release-21-1.
  • Moving the web pages (like this page) under CVS control itself.
  • Upgrade the CVS server to a nicer machine.
  • Upgrade the version of the CVS server software to 1.10.x.
  • Eliminate the currently required password on anonymous access.

We've done a little reworking of the CVS tree, and to reduce confusion, the current tree has been renamed from xemacs-20 to just xemacs. For now symlinks are in place to keep things backwards compatible, but I don't know how long they're going to be there. Also, we've opened up the numbers of people who have write access to the tree, and so updates are going to me much more frequent. This means you probably will want to start working with tags in order to make sure you get a release or snapshot, instead of the current (potentially unstable) working copy (unless you REALLY want that...). For the moment, the head of the tree will still be the latest stable release (currently pre21.0) but this may change to where the head is our development area, and you will have to use tags to grab a particular version.


This document used to be maintained by
Jareth Hein
 
 
  Made with XEmacs!
Valid XHTML 1.0!
Checked by Linklint
  This page is part of the XEmacs website <http://www.xemacs.org>
Contents copyright © 2000, 2001; all rights reserved.
Maintained by webmaster@xemacs.org
Hosted by SourceForge Logo sunSITE.dk Logo Tux.Org Logo
This page last modified Fri Feb 22 03:26:07 2002 UTC.
 
 
Conform with <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Automatically validated by PSGML