|
|
How to setup FreeHg on your own server
Assuming you are using Debian unstable (it should be similar on other distributions).
sudo apt-get install -t experimental python-django hg clone http://freehg.org/u/mmarshall/freehg/ cd freehg cp default_settings.py settings.py
Note: the below patches (and some other convenient things) are in this repo: https://bitbucket.org/jpellerin/freehg.
Apply the following patch:
# HG changeset patch
# User Ondrej Certik <ondrej@certik.cz>
# Date 1215091794 -7200
# Node ID e2055dc9678e37e8ec0e140ee76dfcefd0245ffe
# Parent 9de77539abe2c32a2a1bdc35cc87fa872b96b3af
summary view adapted to the latest mercurial
diff --git a/repos/views.py b/repos/views.py
--- a/repos/views.py
+++ b/repos/views.py
@@ -78,6 +78,7 @@ def summary(request, username, reponame)
from mercurial.hgweb.hgweb_mod import hgweb
from mercurial.hgweb.common import style_map
from mercurial import templater
+ from mercurial.templatefilters import filters as common_filters
from django.conf import settings
web = hgweb(hgrepo, name=repo.get_long_name())
web.refresh()
@@ -85,7 +86,7 @@ def summary(request, username, reponame)
yield web.config("web", "motd", "")
templatepath = settings.HG_TEMPLATE_PATH
mapfile = mapfile = style_map(templatepath, "freehg")
- web.t = templater.templater(mapfile, templater.common_filters,
+ tmpl = templater.templater(mapfile, common_filters,
defaults={"url": request.build_absolute_uri(),
"staticurl": "/static/",
"urlbase": "/",
@@ -106,7 +107,7 @@ def summary(request, username, reponame)
else:
# FIXME I have a feeling that this isn't correct.
content.append(str(thing).decode('utf8'))
- write(web.summary())
+ write(web.summary(tmpl))
return render_to_response('repos/summary.html',
dict(And also this patch:
--- default_settings.py 2008-06-15 11:41:43.658803990 +0200
+++ settings.py 2008-07-03 15:18:54.245187159 +0200
@@ -7,10 +7,13 @@
# ('Your Name', 'your_email@domain.com'),
)
+import os
+
MANAGERS = ADMINS
-DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-DATABASE_NAME = '' # Or path to database file if using sqlite3.
+DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+#DATABASE_NAME = '' # Or path to database file if using sqlite3.
+DATABASE_NAME = os.path.join(os.path.dirname(__file__), 'database.dat')
DATABASE_USER = '' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
@@ -63,10 +66,15 @@
ROOT_URLCONF = 'freehg.urls'
+HTPASSWD_FILE = os.path.join(os.path.dirname(__file__), 'htpasswd')
+HG_TEMPLATE_PATH = os.path.join(os.path.dirname(__file__), 'hgtemplates')
+REPO_PATH = "/tmp/po"
+
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
+ os.path.join(os.path.dirname(__file__), 'templates'),
)
INSTALLED_APPS = (Create database tables:
./manage.py syncdb
(You can answer "no" to create superuser now.) Test it locally
./manage.py runserver
Installing in apache
Apache config:
<VirtualHost *>
ServerName freehg.org
ServerAdmin your@email.com
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE freehg.settings
PythonPath "['/home/ondra/repos/'] + sys.path"
<Location "/static">
SetHandler None
</Location>
Alias /static /home/ondra/repos/freehg/htdocs/static
RewriteEngine on
RewriteCond %{QUERY_STRING} .+
RewriteRule /u(/.*) /home/ondra/repos/freehg/web/hgwebdir.cgi$1
RewriteCond %{REQUEST_URI} !u/([^/]+)/([^/?]+)/?$
RewriteCond %{REQUEST_URI} !u/([^/]+)/([^/?]+)/edit/?$
RewriteCond %{REQUEST_URI} !u/([^/]+)/([^/?]+)/delete/?$
RewriteRule /u(/.*) /home/ondra/repos/freehg/web/hgwebdir.cgi$1
<Directory "/home/ondra/repos/freehg/web/">
Order allow,deny
Allow from all
AllowOverride All
SetHandler None
Options ExecCGI
AddHandler cgi-script .cgi
AuthUserFile /home/ondra/repos/freehg/htpasswd
AuthGroupFile /dev/null
AuthName "freehg.org"
AuthType Basic
<LimitExcept GET>
Require valid-user
</LimitExcept>
</Directory>
</VirtualHost>Then setup permissions
$ chmod o+x freehg $ cd freehg $ chmod o+x database.dat
so that Apache can write to the database and create files in the freehg dir. Put this into your /etc/mercurial/hgrc:
[web] style = /home/ondra/repos/freehg/hgtemplates/freehg allow_archive = bz2 gz zip push_ssl = false allow_push = *
not working ,any details?
Problems and fixes
Recommended version of Django
The Author recommends (http://matthewmarshall.org/blog/2008/03/freehg.org/#comment-4238781) revision 7350 from the Django repository
svn co -r 7350 http://code.djangoproject.com/svn/django/trunk/
Django 0.95
FreeHG doesn't work with Django 0.95 or above. Here is how you need to change the source code to get it working with 0.95: The parameter name for "max_length" was changed to "maxlength" (without the underscore). To get "manage.py syncdb" runnig you need to change "repos/model.py" line 51 - 54 from
name = models.CharField(max_length=30) long_name = models.CharField(max_length=50, blank=True) description = models.TextField(max_length=5000, blank=True)
to:
name = models.CharField(maxlength=30) long_name = models.CharField(maxlength=50, blank=True) description = models.TextField(maxlength=5000, blank=True)
Additionaly: In "accountviews.py", "repos/forms.py" and "views.py"change the line:
from django import newforms as forms
to:
from django import forms
Ubuntu 8.10 (and probably other distros shiping with Django above 1.0)
If you want to install FreeHG on Ubuntu 8.10
download Django 0.95 from http://www.djangoproject.com/download/0.95.4/tarball/
- extract the "django" directory from the tar ball
- copy the "django" directory below your freehg folder
- apply the changes above to "repos/model.py"
