按照转载的“
在Windows使用apache搭建Mercurial版本控制服务”安装Mercurial WEB服务,没有成功,因为我下载的都是最新版的软件,包括:,
Mercurial 1.9.3 ,,,感觉配置方法应会有所不同,于是到该文指定的
http://mercurial.selenic.com/wiki/PublishingRepositories转了一圈,果然有了一些不同,hgwebdir已经为hgweb所取代。按如下步骤重新来过:
1. 安装TortoiseHg,直接装吧,不需要考虑长名路径问题了。装在了C:\Program Files\TortoiseHg中。其实这个对设置Mercurial的WEB服务并不是必须的,只是作为客户端和本地版本管理时,更为方便。
2. 安装Mercurial 1.9.3,也没管长路径,装在了C:\Program Files\Mercurial。
3. 安装Python2.6.6,没安装2.7或3,是因为Mercurial声明支持的是python2.6,安装在了C:\python26。
4. 安装XAMPP1.7.7,这个倒是没装在C:\Program Files下,直接装在了C:\xampp。
5. 使用TortoiseHg建立一个版本库:在D:下建立hg文件夹,进行D:\hg,右击,选择TortoiseHg | Create Repository Here。
6. 在C:\xampp\htdocs下建立一个文件夹,hgweb。
7. 在C:\xampp\htdocs\hgweb中建立hgweb.cgi文件,内容如下(最新的内容可在找到):
- #!/usr/bin/env python
-
#
-
# An example hgweb CGI script, edit as necessary
-
# See also http://mercurial.selenic.com/wiki/PublishingRepositories
-
# Path to repo or hgweb config to serve (see 'hg help hgweb')
-
config = "/path/to/repo/or/config"
-
# Uncomment and adjust if Mercurial is not installed system-wide:
-
#import sys; sys.path.insert(0, "/path/to/python/lib")
-
# Uncomment to send python tracebacks to the browser if an error occurs:
-
#import cgitb; cgitb.enable()
-
from mercurial import demandimport; demandimport.enable()
-
from mercurial.hgweb import hgweb, wsgicgi
-
application = hgweb(config)
-
wsgicgi.launch(application)
将首行改成指向python.exe位置:
第六行的注释:# Path to repo or hgweb config to serve (see 'hg help hgweb'),是说config变量可以指向仓库,也可以指向一个配置文件。先简单点,指向仓库,将第七行改为:
按照《在Windows使用apache搭建Mercurial版本控制服务》中的指示,将C:\Program Files\Mercurial\library.zip解压到C:\xampp\mlib,将C:\Program Files\Mercurial\templates文件夹也复制到该文件夹下。
去除第八行的注释,将其中的路径改为C:/xampp/mlib:
- import sys; sys.path.insert(0, "C:/xampp/mlib")
改动之后的文件内容如下:
- #!C:/Python26/python.exe
-
#
-
# An example hgweb CGI script, edit as necessary
-
# See also http://mercurial.selenic.com/wiki/PublishingRepositories
-
# Path to repo or hgweb config to serve (see 'hg help hgweb')
-
config = "D:/hg"
-
# Uncomment and adjust if Mercurial is not installed system-wide:
-
import sys; sys.path.insert(0, "C:/xampp/mlib")
-
# Uncomment to send python tracebacks to the browser if an error occurs:
-
#import cgitb; cgitb.enable()
-
from mercurial import demandimport; demandimport.enable()
-
from mercurial.hgweb import hgweb, wsgicgi
-
application = hgweb(config)
-
wsgicgi.launch(application)
8. 修改Apache的配置文件http.conf,在最后添加一行:
- ScriptAlias /hg "C:/xampp/htdocs/hgweb/hgweb.cgi"
9. 重启Apache,浏览器中输入localhost/hg,很期待看到成果,结果却很失望,看到的却是:
10. 去掉第十行的注释
- import cgitb; cgitb.enable()
刷新浏览器,看到如下提示:
- Traceback (most recent call last):
-
File "hgweb.cgi", line 17, in
-
application = hgweb(config)
-
File "mercurial/hgweb/__init__.py", line 12, in hgweb
-
return hgweb_mod.hgweb(*args, **kwargs)
-
File "mercurial/hgweb/hgweb_mod.py", line 30, in __init__
-
self.repo = hg.repository(u, repo)
-
File "mercurial/hg.py", line 63, in repository
-
repo = _lookup(path).instance(ui, path, create)
-
File "mercurial/bundlerepo.py", line 303, in instance
-
return bundlerepository(ui, repopath, bundlename)
-
File "mercurial/bundlerepo.py", line 175, in __init__
-
raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
-
Abort: D:/xampp/htdocs/hgweb/hgweb.config: not a Mercurial bundle file
一番折腾后,问题没有得到解决。
google、百度,均未能解决问题。
无意中在Mercurial维基中,找到了一遍文章:
UnixInstall,其中有这样一行:
- $ export PYTHONPATH=/usr/local/lib/python2.5/site-packages:${PYTHONPATH}
但是在我的python2.6安装中,并没有 site-packages这个文件夹。
在Mercurial官方下载了
mercurial-1.9.3.win32-py2.6.exe,安装,显示安装在C:\Program Files\Lib\site-packages。
将
- import sys; sys.path.insert(0, "C:/xampp/mlib")
改为
- import sys; sys.path.insert(0, "C:/Python26/Lib/site-packages")
刷新页面,问题解决。
不过这样只能访问一个库,想访问多个库,需要使用hgweb.config文件,将config变量赋值为hgweb.config
如果hgweb.config不想和hgweb.cgi放在同一个文件夹下,那就在赋值时指定绝对路径。否则就被视为相对于hgweb.cgi的相对路径。现在这样的设置,就表明hgweb.config和hgweb.cgi在同一个文件夹内。
在D:\xampp\htdocs\hgweb中建立hgweb.config文件,先用paths方式指定库,内容为:
访问,可以看到其中有了一个项目hg,点击项目名称,即可访问该库。
再看collection方式:
- [collections]
-
D:/hg = D:/hg
访问,居然看不到项目名?!
修改一下:
项目名显示为等号右侧的值,无论左边怎么改,都显示等号右边的值。
改成:
项目名显示为hg。
再用TortoiesHg在F:/test/hgtest建立一个项目,将hgweb.config的内容改成:
- [collections]
-
D: = D:/hg
-
F:/test = F:/test/hgtest
显示了两个项目,名称分别为hg和hgtest。推测是,显示的名称为右侧的值去掉左侧的值之后的字符串。
还可以在collections中指向一个包含多个项目库的父目录,多个库将逐项显示。
例如,在F:/test下分别建立hgtest和hgrespo两个项目库,将hgweb.config的内容设置为:
- [collections]
-
F:/test = F:/test
依照刚才的推测,将显示出分别名为hgtest和hgrespo的两个项目库。
最后要说明的是,不是一定要将包含有hgweb.cgi的文件夹放在htdocs(或其它Apache指定的主目录中),如果放在其它位置的话,只需要在Apache的配置文件中指定目录的访问权限即可。
例如,在D:盘建立一个myhg文件夹,将hgweb.cgi放入其中,并修改hgweb.cgi中的各个路径。同时,在Apache的配置文件http.conf文件的最后再增加如下内容:
- <Directory "D:/myhg">
-
Options ExecCGI FollowSymLinks
-
Order deny,allow
-
Allow from all
-
</Directory>
即可用访问了。
注:重新安装了一次,这次的安装顺序是:Python2.6.6,Mercurial 1.9.3,Mercurial 1.9.3 for Python2.6,xampp1.7.7。
建立hgweb文件夹和hgweb.cgi和hgweb.config文件,调整Apache配置。
hgweb.cgi仅修改了第一行的Python路径和第六行的config变量所指向的路径,没有解压library.zip,也没有修改第十行,一次性成功,没有出现任何问题。
阅读(2935) | 评论(0) | 转发(0) |