尝试使用this脚本使用trac设置svn提交。
它被称为没有问题,但问题是这一行:
144 repos = self.env.get_repository()
因为我正在远程调用self.env_get_repository()使用服务器驱动器而不是本地驱动器映射来查找存储库。也就是说,它正在寻找E:/ Projects / svn / InfoProj而不是Y:/ Projects / sv / InfoProj
我注意到trac集上有一个changeset,可以调用get_repository()并将路径作为变量传入,但似乎这还没有进入最新的稳定版本。
This version of the script(由代码猴提交的那个)似乎做了不同的事情,但是抛出了一个似乎相关的错误:
154 if url is None:
155 url = self.env.config.get('project', 'url')
156 self.env.href = Href(url)
157 self.env.abs_href = Href(url)
第156/157行抛出错误:警告:TypeError:'str'对象不可调用
脚本的10.3 stable version会抛出完全不同的错误: 警告:NameError:未定义全局名称“core”
我是第一次在带有远程存储库的Windows机器上设置trac。我在Python 2.6中使用了trac 0.11 stable。
我认为会有更多的人尝试在遇到这个问题的服务器上提交。我环顾四周,无法找到解决方案。我认为Linux有一种更优雅的方式来处理它。
提前致谢。
答案 0 :(得分:0)
这是完全可行的,只需要几个小黑客......哇哇!
我遇到的问题是get_repository从trac.ini文件中读取svn存储库的值。这指向E:/而不是Y:/。简单修复涉及检查存储库是否位于 repository_dir ,如果没有,则检查新变量 remote_repository_dir 。修复程序的第二部分涉及从cache.py中删除错误消息,该错误消息检查当前存储库地址是否与传入的地址匹配。
与往常一样,使用此风险需要您自担风险并提前备份所有内容!!!
首先打开trac.ini文件,在'repository_dir'变量下面添加一个新变量'remote_repository_dir'。远程存储库目录将指向本地计算机上的映射驱动器。现在看起来应该是这样的:
repository_dir = E:/Projects/svn/InfoProj
remote_repository_dir = Y:/Projects/svn/InfoProj
接下来,我们将修改api.py文件以检查新变量是否在 repository_dir 位置找不到存储库。大约:71你应该有这样的东西:
repository_dir = Option('trac', 'repository_dir', '',
"""Path to local repository. This can also be a relative path
(''since 0.11'').""")
在此行的下方添加:
remote_repository_dir = Option('trac', 'remote_repository_dir', '',
"""Path to remote repository.""")
接下来:156你将拥有这个:
rtype, rdir = self.repository_type, self.repository_dir
if not os.path.isabs(rdir):
rdir = os.path.join(self.env.path, rdir)
将其更改为:
rtype, rdir = self.repository_type, self.repository_dir
if not os.path.isdir(rdir):
rdir = self.remote_repository_dir
if not os.path.isabs(rdir):
rdir = os.path.join(self.env.path, rdir)
最后,你需要删除cache.py文件中的警报(注意这不是最好的方法,你应该能够包含远程变量作为检查的一部分,但现在它可以工作)
在cache.py near:97附近,它应该如下所示:
if repository_dir:
# directory part of the repo name can vary on case insensitive fs
if os.path.normcase(repository_dir) != os.path.normcase(self.name):
self.log.info("'repository_dir' has changed from %r to %r"
% (repository_dir, self.name))
raise TracError(_("The 'repository_dir' has changed, a "
"'trac-admin resync' operation is needed."))
elif repository_dir is None: #
self.log.info('Storing initial "repository_dir": %s' % self.name)
cursor.execute("INSERT INTO system (name,value) VALUES (%s,%s)",
(CACHE_REPOSITORY_DIR, self.name,))
else: # 'repository_dir' cleared by a resync
self.log.info('Resetting "repository_dir": %s' % self.name)
cursor.execute("UPDATE system SET value=%s WHERE name=%s",
(self.name, CACHE_REPOSITORY_DIR))
我们将删除if语句的第一部分,现在它应该如下所示:
if repository_dir is None: #
self.log.info('Storing initial "repository_dir": %s' % self.name)
cursor.execute("INSERT INTO system (name,value) VALUES (%s,%s)",
(CACHE_REPOSITORY_DIR, self.name,))
else: # 'repository_dir' cleared by a resync
self.log.info('Resetting "repository_dir": %s' % self.name)
cursor.execute("UPDATE system SET value=%s WHERE name=%s",
(self.name, CACHE_REPOSITORY_DIR))
警告!这样做意味着如果您的目录已更改并且您需要重新同步,它将不再为您提供错误。
希望这有助于某人。