远程存储库上的tracpastcommithook

2024-04-19 07:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

正在尝试使用this脚本设置与trac的svn commit。在

它被调用时没有问题,但问题是这里有一行:

144 repos = self.env.get_repository()

因为我是远程呼叫的self.env_get_存储库()使用服务器驱动器而不是本地驱动器映射查找存储库。也就是说,它查找的是E:/Projects/svn/InfoProj,而不是Y:/Projects/sv/InfoProj

我注意到trac集合上有一个changeset,它可以调用get_repository()并将路径作为变量传入,但似乎这还没有进入最新的稳定版本。在

This version of the script(code monkey提交的)的操作方式似乎有所不同,但抛出的错误似乎与此相关:

^{pr2}$

第156/157行抛出错误:警告:TypeError:“str”对象不可调用

脚本的10.3 stable version抛出一个完全不同的错误: 警告:名称错误:未定义全局名称“core”

我第一次在带有远程存储库的Windows设备上设置trac。我在python2.6中使用trac0.11stable。在

我以为会有更多的人尝试跨服务器提交遇到了这个问题。我到处找了找,找不到解决办法。我认为Linux有一种更优雅的方式来处理这个问题。在

提前谢谢。在


Tags: self服务器env脚本get远程versionrepository
1条回答
网友
1楼 · 发布于 2024-04-19 07:34:03

这是完全可以做到的,只需要一些小的黑客。。。呜呼!在

我遇到的问题是get_repository从trac.ini公司文件。它指向的是E:/而不是Y:/。简单的修复包括检查存储库是否位于repository\u dir上,如果不在,则检查一个新变量remote_repository_dir。修复的第二部分涉及从中删除错误消息缓存.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你应该有这样的东西:

^{pr2}$

在这一行下面加上:

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)

最后,您需要删除缓存.py文件(注意,这不是最好的方法,您应该能够包括远程变量作为检查的一部分,但目前它可以工作)。在

在缓存.py接近: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))

警告!这样做意味着,如果目录已更改,并且需要重新同步,则不再给您错误。在

希望这对某人有帮助。在

相关问题 更多 >