Infrastructure/VersionControl/Current

= Current VCS =

The VCS task is to replace the repository hosting the packages for Fedora Extras (and possibly Fedora Core in the future.) It is not meant to become the only repository for Fedora hosting -- we currently have small repositories for git, mercurial, and private development and this is likely to continue.

Currently our VCS is based on CVS with a lookaside cache for the distributed tarballs and a Makefile that defines the commands not available through cvs.


 * http://cvs.fedora.redhat.com/viewcvs/?root=extras shows the top of the cvs tree.
 * the rpms directory shows all the packages for Extras.
 * Looking in one of the packages shows the releases that the package can be built for.  These release directories are commonly called "branches" but to CVS they are just directories, not branches.
 * Within a release branch there are several different files:


 * *.spec: The spec file controls the rpmbuild process.
 * diffs/patches: These are used in the spec file to patch the source to make it compile and run on Fedora.
 * other package files: There may be other files (init scripts, extra documentation, etc) that are included into the rpm by the spec file.
 * sources, .cvsignore: These are auto-generated by the Makefile rules. They contain information on the upstream tarball and other large files that are used in creating the RPM.  Rather than importing the large files into CVS we store them in a "lookaside cache" where we can have one unique copy even if the package exists in several branches.  The sources file lists the filenames with md5sums.  .cvsignore lists the tarball names so cvs doesn't list them as files we might want to commit.
 * Makefile: This is copied from the common module when a new branch is created. It imports the Makefile.common file to give the user access to our specialized commands.   The Makefile.common with the majority of the logic is here: http://cvs.fedora.redhat.com/viewcvs/common/Makefile.common?root=extras&rev=1.39&view=auto

The Makefile has commands to tag the release in a standardised fashion (based on the Name, epoch, version, release in the rpm spec file), upload new tarballs, perform local builds, and queue builds on the buildserver. We may adapt this mechanism for the future VCS or implement it as plugins to the VCS. ACLs aren't implemented at al in our CVS instance. lookaside cache is going to come with us to whatever new VCS we implement.