1. Introduction

This document is for developers who want to publish a git repository on the Frugalware FTP Server and on the Frugalware Gitweb Interface.

2. Name of the repository

The name of the official repositories are frugalware-current, frugalware-stable and so on.

The name of WIP repositories are typically in a featureNUM form, like kde45 or parted2, referring to the name of the software it contains and its version. This method is used so that the repository name can be a valid shell variable as well.

Please note that there is a convention that WIP repository names never contain a hyphen (-). This is on purpose. It’s not trivial to decide that when you merge code from one repository to another then build servers should try to build automatically the new packages you brought in or not. Because of this the policy is that if a hyphen is in the name, the it’ll build the new packages (WIP → -current merge), but it won’t do so when you merge the other way around.

3. Location of the repository

Since a repository consists of plain files, we can and should place them on the ftp server (/home/ftp). To prevent further problems, always use the server name "git.frugalware.org", currently it’s an alias of genesis.frugalware.org.

First decide if it’s a personal repository or a team one. For example if you create a repository to update to a newer python version, then you will probably do all the work, create it under /pub/other/people/nick/reponame. Simply create a dir, issue git init and push at least one commit to there (but before pushing, enable the hooks, see below).

Now anyone can git clone it, using a full mirror, for example ftp://ftp12.frugalware.org/mirrors/ftp.frugalware.org/pub/.

4. Registering for the gitweb interface

If the repository is a team one, then create it under /pub/other. In this case you probably want the gitweb interface, too. To use it:

  1. Update the file .git/description inside the repo with a short (less than 80 chars) description.

  2. Create the file .git/owner inside the repo containing your name, without your email address.

  3. Push a relative symlink to the homepage-ng repository, see the existing ones as a reference.

After some time (a maximum of 30 minutes) it should appear at http://git.frugalware.org/.

5. Enabling hooks for your repository

Currently you need hooks for the following reasons: . If you don’t use bare repositories, then the content outside .git won’t be updated automatically, you need a hook to do so.

  1. If you want CIA notification.

  2. If you want to send mails to the Frugalware-git mailing list.

  3. If you want to let others clone your repository via dumb protocols like http or rsync. (This means that if you disable this hook, it won’t be accessible anonymously!)

For the last one:

mv .git/hooks/post-update{.sample,}
echo "unset GIT_DIR; cd ..; git checkout -f" > .git/hooks/post-receive
chmod +x .git/hooks/post-receive

For the others:

ln -sf /home/ftp/pub/other/git-hooks/git-hooks.py .git/hooks/post-receive

One thing that a hook won’t do for you is to allow pushing to the master branch, even if it’s the checked out one. This is normally not good, but our hook will handle this, so we can ignore the problem:

git config receive.denyCurrentBranch ignore

6. Setting up server configuration for a WIP repo

When you run repoman, it invokes repoman server on the remote machine using ssh. repoman server, just like plain repoman, reads configuration from /etc/repoman.conf and $HOME/.repoman.conf, so you need to set up the later before you can push packages to your WIP repo.

Here is a minimal example:

repos=('current' 'mywiprepo')

And then you have to symlink the repos to $HOME/git, for example:

cd $HOME/git
ln -s /pub/frugalware/frugalware-current current
ln -s /pub/other/people/nick/nicktesting/ nicktesting

7. Enabling syncpkgd support for a WIP repo

If you create a new WIP repo, syncpkgd won’t sync packages in it by default.

This means that if you just push your commits, no attempt will be made to build the relevant binary package automatically for you, which is the case for the -current / -stable repos.

If you want syncpkgd support, then you need to edit 3 configuration files on the server which runs syncpkgd (that’s typically not your local machine and not the one that runs syncpkgcd).

Edit syncpkgd’s repoman config by extending the repos array and adding the foo_servers, foo_sudo and foo_bases variables:

vi ~syncpkgd/.repoman.conf

Add a pacman-g2 configuration file:

vi ~syncpkgd/.pacman-g2/repos/foo

The contents will be something like this:

Server = http://ftp.frugalware.org/pub/other/people/nick/foo/frugalware-@CARCH@
Don’t replace @CARCH@ with anything else, syncpkgcd will do so later!

Finally edit the git hook and add foo to the end of the repos array:

vi /pub/other/git-hooks/synchook/config.py

If you no longer need these entries, you can remove them, but leave at least one there as an example.