views:

870

answers:

3

Hey Everyone,

I am trying to setup a central repository with shared hosting. I read all the way through this tutorial http://mercurial.selenic.com/wiki/PublishingRepositories to no avail. Here are the steps I took.

1. Copy hgwebdir.cgi file to directory at http://url.com/central_repository/hgwebdir.cgi
2. Added the following information to the hgweb.config file and copied it to same place.
       [paths]
       projectname = /home/username/central_repository/projectname

       [web]
       baseurl = /hg
3. Added the following to an htaccess file and copied it to the same place
       # Taken from http://www.pmwiki.org/wiki/Cookbook/CleanUrls#samedir
       # Used at http://ggap.sf.net/hg/
       Options +ExecCGI
       RewriteEngine On
       #write base depending on where the base url lives
       RewriteBase /hg
       RewriteRule ^$ hgwebdir.cgi  [L]
       # 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 (.*) hgwebdir.cgi/$1  [QSA,L]
4. Uploaded the repository without the working directory to /home/user/central_repository/projectname
5. Tried to clone the repository to my computer using the folloing destination path: http://url.com/hg/projectname

After going through these steps I get a 404: Not Found error.

However if I change the destination path to http://url.com/central_repository/projectname It acts like it found the repository, It tells me it found the changesets, and it was adding the changesets and manifests, but then it says "transaction abort! HTTP Error 500: Internal Server Error.

Thanks for any help! Metropolis

EDIT

Also whenever I try to put the ScriptAlias, Alias, the previous content, or the following content into an htaccess file, I get a 500 internal server error.

<Directory "/home/username/central_repository/projectname">
    DirectoryIndex index.cgi
    AddHandler cgi-script .cgi
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

In fact, if I take everything out of the hgwebdir.cgi file except for the following, I get a 500 error.

#!/usr/bin/env python
#
# An example CGI script to export multiple hgweb repos, edit as necessary

I even tried putting this file in the cgi-bin directory and I am still getting the error. I also was sure to put the file permissions to 755. Is it possible I can not run python files on this server?

A: 

If the .cgi extension isn't already mapped to the cgi handler in your host's Apache config you either need a ScriptAlias or AddHandler line for your hgwebdir.cgi script. Actually you can get rid of all that unnecessary RewriteCond and RewriteRule stuff if you just do a single ScriptAlias:

ScriptAlias /hg /home/username/central_repository/hgwebdir.cgi

Also the repo has a /home/user/central_repository/projectname/.hg directory, right? Putting the contents of the .hg directly into projectname would be wrong.

Lastly, try visiting it with your browser, not using clone. What do you see at http://ggap.sf.net/hg/ ? What is in the apache access and error logs? Hopefully you have access to the error log because that always has the best output for debugging this stuff.

Ry4an
Hey Ry4an, I think you helped me the other day also :). Thanks alot. If I am not supposed to put the .hg folder directly into the projectname folder, how Should I structure it? What I was planning on doing was /central_repository/project1/.hg, /cr/project2/.hg...etc...
Metropolis
A: 

http://wiki.dreamhost.com/Mercurial

This has worked for me in the past.

mfperzel
Hey thectrain, Thanks for the help. Unfortunately I do not have shell access, so I need to find another way to do this I believe.
Metropolis
A: 

This could also be a permission error.

I just encountered a similar situation where I had created a repository in my usual place where apache picks it up via hgwebcgi. I could clone that repository locally (not going via webserver), but not from a remote client, so I knew it was not a hg error as such.

Turned out the problem was that my repository was owned by the user I created it with, with no read/write access given to apache.

Running

chown -R apache:apache <repo>

did the trick. (I exclusive access these repositories via the web, so this seems ok, otherwise come up with a solution that will allow apache access without owning it)

ludwig