2009-07-17 12 views
0

thisスクリプトを使用してtracでsvnコミットを設定しようとしています。リモートリポジトリのtrac-past-commit-hook

それは問題なしと呼ばれているが、問題はここに、このラインである:

144 repos = self.env.get_repository() 

私は、このリモートでself.env_get_repositoryを呼び出していますので()は、サーバーのドライブを使用して、リポジトリではなく、ローカルドライブを探しますマッピング。つまり、Y:/ Projects/svn/InfoProjではなく、E:/ Projects/svn/InfoProjを探しています。

get_repository()を呼び出しパス変数として、しかし、これはまだ最新の安定版にしていないようだ。

This version of the scriptは(コード猿が提出した1)違ったことを行うように見えますが、関連すると思われるエラーがスローされます。

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) 

線157分の156スローエラー:警告:例外TypeError:「STR」オブジェクト呼び出すことはできません

スクリプトの10.3 stable versionは完全に別のエラーがスローされます。 警告:NameError:グローバル名「コアは、」私はのためのTracを設定してい

が定義されていません。リモートリポジトリを持つWindowsのボックスではじめて。私はPython 2.6で安定したtrac 0.11を使用しています。

この問題に遭遇したサーバー間でコミットしようとする人がもっとたくさんいると思いました。私は周りを見回して解決策を見つけることができませんでした。私はLinuxがこれをよりうまく処理する方法を持っていると仮定しています。

ありがとうございます。

+0

http://trac.edgewall.org/wiki/TracInstall#VersionControlSystemによると、Tracはリモートリポジトリをサポートしていません.LinuxでもWindowsでも、本当の問題ですか? –

+0

こんにちはRichard、 返信いただきありがとうございます。リポジトリはtracと同じ場所にありますが、コミットはリモートで実行されています。これが同じものとみなされるかどうかは分かりません。 – going

答えて

0

これは完全に可能で、ちょうど2つの小さなハッキングを必要としています...うわー!

問題は、get_repositoryがsvnリポジトリの値をtrac.iniファイルから読み込むことです。これはE:を指していて、Y:/ではありません。単純な修正では、リポジトリがrepository_dirにあるかどうかをチェックし、そうでない場合は、新しい変数remote_repository_dirをチェックします。修正の2番目の部分は、現在のリポジトリアドレスが渡されたものと一致するかどうかを確認するエラーメッセージをcache.pyから取り除くことです。

いつものように、これは自己責任で使用し、 !!!

まず、trac.iniファイルを開き、 'repository_dir'変数の下に新しい変数 'remote_repository_dir'を追加します。リモートリポジトリディレクトリは、ローカルマシン上のマップされたドライブを指します。それは次のようになります。

repository_dir = E:/Projects/svn/InfoProj 
remote_repository_dir = Y:/Projects/svn/InfoProj 

次は、我々はそれがrepository_dir場所でリポジトリを見つけることができない場合は、新しい変数をチェックするためにapi.pyファイルを変更します。周り: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.""") 

次近い:これまでその

  rtype, rdir = self.repository_type, self.repository_dir 
      if not os.path.isabs(rdir): 
       rdir = os.path.join(self.env.path, rdir) 

変更:156あなたがこれを持っているだろうし

  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ファイル内のアラートを削除する必要があります(これを行うのが最善の方法ではないことに注意してください。チェックの一部としてリモート変数を含めることができるはずですが、今のところ動作します)。それは次のようになります。97:近くcache.pyで

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)) 
:私たちは、それは次のようになりますので、if文の最初の部分を削除しようとしている

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)) 

警告!これを行うと、ディレクトリが変更され、再同期が必要な場合、もはやエラーが表示されなくなります。

これは誰かを助けることを望みます。