From Fedora Project Wiki

Developing on Revisor

Here's a few quick notes on developing for Revisor.


Obtaining the Source

The source can be obtained from our fedorahosted.org source repository , using git:

Anonymous users should use:

$ git clone git://git.fedorahosted.org/git/revisor

while users with access to push commits to the revisor source repository should use:

$ git clone ssh://git.fedorahosted.org/git/revisor

This creates a directory revisor/ in the current directory with branch master.

Running Revisor From Source

Stop (medium size).png Note: Revisor cannot run from source on a system that has the Revisor RPM installed. Stop (medium size).png

Revisor of course has a couple of dependencies on other programs so you should install these:

busybox-anaconda notify-python usermode pam python automake intltool gettext desktop-file-utils

Now you can let automake generate some of the files needed to run Revisor. Navigate to the revisor source tree directory you have just created with cloning:

$ autoreconf -v && ./configure

Once automake is done, and configure has completed, all the files are in place; but Revisor still needs a way to find these files. Although it is possible to manually symlink some of the directories Revisor looks at, to the location where they live in the source repository, we recommend you use ./switchhere which should make exercise this as painless as possible. Note that this script forcibly deletes some of the directories Revisor would have owned if it were installed on the system, and as such if you had Revisor installed previously, you might want to check if you have any (important) files left in those directories, such as highly customized kickstart configuration files.

The ./switchhere script does the following:

  • Symlink /etc/revisor to $PWD/conf so that /etc/revisor/revisor.conf primary configuration file and the /etc/revisor/conf.d configuration directory are valid (the symlink causes the actual file and directory to be found in $PWD/conf/)
  • Create the /usr/share/revisor directory so that a couple of symlinks can be created from within that directory:

1. In Revisor 2.1.0 (development version in branch master), this includes:

  • /usr/share/revisor/ui => $PWD/revisor/modgui/glade/
  • /usr/share/revisor/pixmaps => $PWD/revisor/modgui/glade/pixmaps/
  • /usr/share/revisor/comps => $PWD/conf/

2. In Revisor 2.0.5 (branch 2.0.5), this includes:

  • /usr/share/revisor/ui => $PWD/glade/
  • /usr/share/revisor/pixmaps => $PWD/glade/pixmaps/
  • /usr/share/revisor/comps => $PWD/conf/
  • In Revisor 2.1.0, also create symlinks from within the appropriate /usr/share/man/man$x/ directories to the source for these man pages in $PWD/doc/.

From this moment on, you should be able to run:

$ ./revisor.py

Stop (medium size).png Note that revisor needs root privileges to run, and that you'll need to sudo or su -c to gain those. Use here whatever you find the most convenient; Revisor though should have a nice error message when ran without those privileges. Stop (medium size).png

Installing the Required Packages for Revisor Modules

The modules available with Revisor each have their own package dependencies. You need to install those if you start developing on them. Running Revisor from source with the --debug switch shows you more details:

Module Name Requires:
!ModCobbler cobbler, koan
!ModDelta deltarpm
!ModGUI pygtk2 >= 2.9.2, pygtk2-libglade, gnome-python2-gconf, system-config-kickstart
!ModJigdo jigdo
!ModRebrand rpmbuild, rpmdevtools
!ModVirt python-virtinst

To be done with it once and for all, run:

rpmbuild rpmdevtools python-virtinst

Building Revisor

To build the Revisor RPM packages, run:

bin/revisor-build

This should run:

autoreconf -v
./configure

make mock

make srpm
make rpm

rpmlint /path/to/rpm

Note that if you have added files to the tree, you should at least make Automake aware of these files.

Developing

Branches

Each target has (or should have) it's own branch:

  • EL-5
  • F-7
  • F-8

A rule of thumb is, that each release gets a tag in it's corresponding branch. Say if you were to release 2.1.0-1 for F-7, you would tag 2.1.0-1.fc7. Tags need to be unique amongst branches, so unless you have a release to all branches... Add the dist-tag.

Once you do tag and make build anything in koji, you will also need to upload the files (tar.gz & spec and/or srpm) to http://files.revisor.fedoraunity.org/

Switching Branches

To switch branches, first clone the source repository like described in "Obtaining the Source" earlier on this page. Then, create a local branch with the same name as the upstream branch, using a reference point such as a tag:

$ git branch 2.0.5 2.0.5-13

Edit .git/config and add a [branch] section:


[branch "master"] 
remote = origin
merge = refs/heads/master

[branch "2.0.5"] 
remote = origin
merge = refs/heads/2.0.5

Check out the branch:

$ git checkout 2.0.5

and pull in the latest changes:

$ git pull

Working On Different Branches

Usually though, what I do, is create separate clones for each branch (append a directory name to the git clone command), so that I can change things in one branch and without having to commit them, change to another branch. Here's an example of me using branch 'master' and '2.0.5':

$ pwd
/home/jmeeuwen/devel/revisor

$ git clone ssh://git.fedorahosted.org/git/revisor 2.0.5
Initialized empty Git repository in /home/jmeeuwen/devel/revisor/2.0.5/.git/
remote: Generating pack...
remote: Done counting 7477 objects.
remote: Deltifying 7477 objects.
remote:  100% (7477/7477) done
Indexing 7477 objects...
remote: Total 7477, written 7477 (delta 5378), reused 0 (delta 0)
100% (7477/7477) done
Resolving 5378 deltas...
100% (5378/5378) done

$ git clone ssh://git.fedorahosted.org/git/revisor master
Initialized empty Git repository in /home/jmeeuwen/devel/revisor/master/.git/
remote: Generating pack...
remote: Done counting 7477 objects.
remote: Deltifying 7477 objects.
remote:  100% (7477/7477) done
Indexing 7477 objects...
remote: Total 7477, written 7477 (delta 5378), reused 0 (delta 0)
100% (7477/7477) done
Resolving 5378 deltas...
100% (5378/5378) done

$ ls -l
total 8
drwxrwxr-x 14 jmeeuwen jmeeuwen 4096 2007-11-24 00:53 2.0.5
drwxrwxr-x 13 jmeeuwen jmeeuwen 4096 2007-11-20 21:23 master

$ cd 2.0.5
$ git branch 2.0.5 2.0.5-13
$ git checkout 2.0.5
$ git branch -D master
Deleted branch master.
$ vi .git/config

[branch "2.0.5"] 
remote = origin
merge = refs/heads/2.0.5

$ git pull
Updating cc12a50..a45e773
Fast forward
Makefile.am      |   13 +++++++++
revisor.py       |    2 +
revisor.spec.in  |    5 +++-
revisor/base.py  |    5 +++
revisor/cfg.py   |   10 +++++++
revisor/pungi.py |   72 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
6 files changed, 105 insertions(+), 2 deletions(-)

I can't really imagine this is best practice though ;-)