TortoiseSVN Logo

ログキャッシュとリポジトリ UUID

2008年8月17日に投稿

低速または非常に大きなリポジトリのログを取得するには、かなりの時間がかかる場合があります。 そしてもちろん、リポジトリに接続されている必要があります。 ネットワークがダウンしている場合や、ネットワークアクセスがない場所にいる場合、オンラインでないとログメッセージを表示できません。これは非常に迷惑です。

この問題を少なくとも部分的に解決するために、TortoiseSVN 1.5 は Subversion リポジトリからのログメッセージをキャッシュできます。 この機能は透過的に実装されているため、動作させるために何かをする必要はありません。 気づくかもしれないのは、リポジトリのすべてのログメッセージを表示した後、次回ログダイアログが大幅に高速になることです。

これをテストしたい場合は、TortoiseSVN リポジトリ のログを表示できます。 ログダイアログの「すべて表示」ボタンをクリックして、すべてのログメッセージを取得します。 すべてのメッセージを取得するのに時間がかかることに気付くでしょう。 その後、ログダイアログを閉じて同じ URL で再度開始すると、「すべて表示」ボタンをクリックすると、すべてのメッセージがログキャッシュから取得されます。

リポジトリに接続できない場合、ログダイアログには「オフラインで作業」を選択できるダイアログが表示されます。つまり、リポジトリに接続しようとせずに、キャッシュのみを使用します。
logoffline

ただし、1 つ問題があります。ログキャッシュは、すべてのリポジトリに異なる UUID が割り当てられていることに依存しています。
リポジトリの UUID は、ワーキングコピーがある場合、プロパティダイアログ(エクスプローラーのコンテキストメニュー「プロパティ」)で確認できます。
repouuid
ログキャッシュは、異なるログメッセージを持つ異なるリポジトリを区別するために UUID を必要とします。 ログキャッシュがリポジトリを区別するために URL のみを使用できない理由は、URL だけではその情報を提供しないためです。

たとえば、https://example.com/svn/trunk のような URL は、リポジトリが https://example.com/svn にあることを明確に示します。 なぜなら、「svn」はプロジェクト名ではないと想定できるからです。

しかし、https://example.com/svn/project/trunk のような URL は、「project」のリポジトリを指していることを意味する可能性がありますが、「svn」にリポジトリが 1 つしかなく、「project」がそのリポジトリ内のフォルダーにすぎないことを意味する可能性もあります。 したがって、2 つの URL https://example.com/svn/project/trunkhttps://example.com/svn/otherproject/trunk は、同じリポジトリまたは 2 つの異なるリポジトリを指している可能性があります。

そのため、ログキャッシュは、すべてのリポジトリでリポジトリ UUID が異なることに依存する必要があります。

さて、一部の人は、デフォルト(空)のリポジトリを単にコピーして新しいリポジトリを作成するという間違いを犯しました。 そうすることで、すべてのリポジトリが同じ UUID を持つことになります! はい、これは大きな間違いです。UUID と呼ばれるのには理由があります。「U」は「Unique」(ユニーク)の頭文字です。 これはログキャッシュを完全に混乱させ、クラッシュレポートダイアログが頻繁に表示されるようになります。
これを修正するには、すべてのリポジトリに一意の UUID を設定する必要があります。 公式の Subversion パッケージから svnadmin ツールを入手し、すべてのリポジトリで svnadmin setuuid REPOS_PATH を実行してください。

リポジトリに直接アクセスできない場合、または何らかの理由で UUID を変更できない場合は、TortoiseSVN 設定ダイアログでログキャッシュを無効にすることができます: logcachesettings

上記のスクリーンショットでは、「あいまいな URL を許可する」オプションに気付くかもしれません。 キャッシュが異なる UUID に依存していることを説明しましたが、なぜ URL にも依存するのでしょうか?
URL (つまり、単純な文字列) の比較は、リポジトリまたはワーキングコピーにリポジトリ UUID を問い合わせるよりもはるかに高速です。 したがって、キャッシュは可能な場合は URL も使用します。 たとえば、キャッシュが URL https://example.com/svn/project/trunk が特定のリポジトリを指していることを認識している場合、URL https://example.com/svn/project/trunk/subfolder も同じリポジトリを指していることを認識します。リポジトリ内にリポジトリを持つことはできないためです。

「あいまいな URL を許可する」オプションは、同じ URL が異なるリポジトリに使用される状況のためのものです。もちろん、そのような状況は非常にまれです。 私たちが問題に遭遇した状況の 1 つは、svnbrigde でした。 これは、SVN クライアントで Microsoft Team System リポジトリにアクセスできる優れたツールです。 しかし、このツールの古いバージョンでは、すべてのリポジトリが同じ URL で SVN クライアントからアクセスできるようになっていました。
svnbridge 開発者と問題を議論したところ、彼らはすぐに、異なる Team System リポジトリに対して異なる URL を提供するバージョンを用意してくれました。 そのため、最新バージョンの svnbridge では、その問題に遭遇することはないはずです。 しかし、何らかの理由で svnbridge のバージョンを更新できない場合は、「あいまいな URL を許可する」オプションを有効にする必要があります。