0

Mercurial には、チェンジセット メッセージを投稿するフックと、チェンジセットをバグ追跡ソフトウェアにリンクするフックがあります。ブランチごとに個別のリポジトリを使用しています。ブランチが完成したら、それをアーカイブ リポジトリにプッシュし、元のリポジトリを削除して、リポジトリの Mercurial ページが古いリポジトリでごちゃごちゃにならないようにします。また、古いリポジトリが占めるスペースを再利用したいと考えています。変更セットが見つからない場合に既存の変更セットにリダイレクトするように Apache を構成したいと考えています。

たとえば、http://hg/hg/repo1/rev/c36b1c72fc6eが見つからない場合、以下を順番に試します。

http://hg/hg/repo1/rev/c36b1c72fc6e  
http://hg/hg/repo2/rev/c36b1c72fc6e  
http://hg/hg/repo3/rev/c36b1c72fc6e  
http://hg/hg/archive/rev/c36b1c72fc6e  

既存の変更セットが見つかるまで。

これを行うには mod_rewrite ルールを使用できるはずですが、うまくいきませんでした。これは私の最新の試みです:

RewriteEngine on  
RewriteLog /var/log/httpd/rewrite.log  
RewriteLogLevel 9  

# Re-map URLs that aren't found

RewriteCond %{REQUEST_URI}   !-U
RewriteRule ^/hg/repo1/(.*)$ http://hg/hg/archive/$1 

上記の構成を使用した試みのログは次のとおりです。

(2) init rewrite engine with requested uri /hg/repo1/rev/c36b1c72fc6e
(3) applying pattern '^/hg/repo1/(.*)$' to uri '/hg/repo1/rev/c36b1c72fc6e'
(2) init rewrite engine with requested uri /hg/repo1/rev/c36b1c72fc6e
(3) applying pattern '^/hg/repo1/(.*)$' to uri '/hg/repo1/rev/c36b1c72fc6e'
(4) RewriteCond: input='/hg/repo1/rev/c36b1c72fc6e' pattern='!-U' => matched
(2) rewrite '/hg/repo1/rev/c36b1c72fc6e' -> 'http://hg/hg/archive/rev/c36b1c72fc6e'
(2) implicitly forcing redirect (rc=302) with http://hg/hg/archive/rev/c36b1c72fc6e
(1) escaping http://hg/hg/archive/rev/c36b1c72fc6e for redirect
(1) redirect to http://hg/hg/archive/rev/c36b1c72fc6e [REDIRECT/302]
(5) RewriteCond URI (-U) check: path=/hg/repo1/rev/c36b1c72fc6e -> status=302
(4) RewriteCond: input='/hg/repo1/rev/c36b1c72fc6e' pattern='!-U' => not-matched
(1) pass through /hg/repo1/rev/c36b1c72fc6e
(2) init rewrite engine with requested uri /repo1/rev/c36b1c72fc6e
(3) applying pattern '^/hg/repo1/(.*)$' to uri '/repo1/rev/c36b1c72fc6e'
(1) pass through /repo1/rev/c36b1c72fc6e

URL を適切に変更しているように見えますが、適切にリダイレクトされず、理由がわかりません。何か案は?

Apache で Mercurial リポジトリを提供するために hgwebdir を使用しています。

4

1 に答える 1

1

それはあなたが求めた答えではありませんが、その理由が本当に hgwebdir ページがいっぱいにならないようにすることである場合、そしてそれが私たちのリポジトリに600以上の長い間行われたリポジトリがあることを私は知っています。

[web]
hidden=true

完了したレポ.hg/hgrcファイルで。これにより、それらはリストから除外されますが、それらへの URL は、リダイレクトの遅さや面倒なしに有効に保たれます。

hgrc の man ページから:

   hidden

          Whether to hide the repository in the hgwebdir  index.   Default
          is False.
于 2009-12-11T06:15:54.793 に答える