Mercurial

From Redbrick Wiki

Mercurial is a version control system, like subversion in that it manages changes in your code, but different in that it's designed to be distributed. Git and bazaar are also distributed version control systems. Mercurial is also written in python, which is cool. It's built in web interface is also excellent.

Setting Up On RedBrick

All the setup needs to be done on murphy, since that's the webserver. After that, you can access your code from anywhere.

First, we need to setup the repo that will contain the code

 receive@murphy (~) %  hg init hgrepo

Next, we setup the web access...

Step 1 - Create the directory, and copy in the python cgi

 receive@murphy (~) %  cd ~/public_html
 receive@murphy (~/public_html) %  mkdir hg
 receive@murphy (~/public_html) %  chmod 711 hg
 receive@murphy (~/public_html) %  cd hg
 receive@murphy (~/public_html/hg) %  cp /usr/share/doc/mercurial-common/examples/hgweb.cgi ./index.cgi
 receive@murphy (~/public_html/hg) %  chmod 755 index.cgi

Step 2 - Set the repo location

Open the index.cgi in nano (or any other text editor) and on the second to last line replace /YOUR/HOME/DIR/YOUR/REPO with the location of the repo you created. For me, this is /home/member/r/receive/hgrepo - the location will depend on where your home directory is. Optionally, replace "repository name" with something cooler.

Step 3 - Set Up htaccess

 receive@murphy (~/public_html/hg) %  touch .htaccess
 receive@murphy (~/public_html/hg) %  chmod 644 .htaccess

Open the htaccess file in a text editor.

RewriteEngine On
##################################
# Force all access to over https #
##################################

RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://www.redbrick.dcu.ie/~receive/hg/


###################################
# Options for rewriting hg access #
###################################

RewriteCond %{SERVER_PORT} 443
#write base depending on where the base url lives
RewriteBase /~receive/hg
# Send requests for files that exist to those files.
RewriteCond %{REQUEST_FILENAME} !-f
# Send requests for directories that exist to those directories.
RewriteCond %{REQUEST_FILENAME} !-d
# Send requests to hgwebdir.cgi, appending the rest of url.
RewriteRule (.*) index.cgi/$1  [QSA,L]

################################
# Options for password control #
################################

AuthType Basic
AuthName "My Mercurial Repo"
AuthUserFile /home/member/r/receive/.hgpasswd
Require valid-user

You can use this htaccess file as a sample, but you'll need to make a few changes. The rewrite base should be set to the location on the webserver you created the hg directory. If you've been following the same example names I used it will be ~username/hg

Also, you'll need to set the location you're going to use for your htpasswd file.

Step 4: Create the password file

 receive@murphy (~/public_html/hg) %  htpasswd -c /home/member/r/receive/.hgpasswd receive

This will prompt you to enter your new password twice.

 receive@murphy (~/public_html/hg) %  chmod 644 /home/member/r/receive/.hgpasswd


Using LDAP instead of the password file

In the .htaccess you created earlier replace the Options for password control with the following:

################################
# Options for password control #
################################

AuthType Basic
AuthBasicProvider ldap
AuthName "Some sort of name"
AuthLDAPURL ldap://192.168.0.3:389/o=redbrick?uid?sub?objectClass=posixAccount
AuthzLDAPAuthoritative Off
Require valid-user

And hey presto, no need for a password file and you can log in with your redbrick details, of course so can anyone else so if you want to restrict access replace

 Require valid-user

with

 Require user username1 username2 (Obviously replace username1 username2 with actual usernames etc)

Cloning the Repo

Once all this is done you should be able to login at https://www.redbrick.dcu.ie/~username/hg - of course you won't see any code there yet.

Go to whatever computer you want to start writing code on and clone a copy of the repo

 andrew@laptop:~ $  hg clone https://www.redbrick.dcu.ie/~receive/hg/

Now I have a copy of the repo on my laptop I can work on. You should read the guide to see all the commands that are available, but the basics you'll need are hg add and hg commit.


Pushing

Before you are able to push changes to your repo you will need to specify which users have permission to do so. You will need to add the following lines to the configuration for your repo (~/hgrepo/.hg/hgrc).

 [web]
 allow_push = *

If you wish to only give certain users permission to push changes to your repo replace * with their usernames.

Now once you make changes you can push them back to your repo on RedBrick.

 andrew@laptop:~/hg $ hg push

You can now look at the changes on the web interface :)