2009-07-17 20 views
0

嘗試使用this腳本設置使用trac的svn commit。遠程存儲庫上的trac-past-commit-hook

它被稱爲沒有問題,但問題是這條線的位置:

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) 

線一百五十七分之一百五十六拋出錯誤:警告:類型錯誤:「海峽」對象是不是調用

腳本的10.3 stable version拋出一個完全不同的錯誤: 警告:NameError:全局名稱「核心」沒有定義

我設立的trac的第一次在帶有遠程存儲庫的Windows盒子上。我在Python 2.6中使用trac 0.11 stable。

我認爲會有更多的人嘗試在遇到此問題的服務器上進行提交。我環顧四周,找不到解決方案。我認爲Linux有更好的處理方式。

在此先感謝。

+0

根據http://trac.edgewall.org/wiki/TracInstall#VersionControlSystem,Trac不支持遠程存儲庫,無論是Linux還是Windows - 這是真正的問題嗎? – 2009-07-17 22:12:40

回答

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) 

F最後,您需要刪除cache.py文件中的警報(注意,這不是實現此目的的最佳方法,您應該能夠將遠程變量作爲檢查的一部分包含在內,但現在它可以工作)。

在cache.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)) 

警告!這樣做意味着如果你的目錄已經改變並且你需要重新同步,它不會再給你一個錯誤。

希望這可以幫助別人。