Subversionのpre-revprop-changeフックに関するエラー
エラー
エラーの内容は、こちら。
SVN: 'Set revision author' operation finished with error: svn: リポジトリが、リビジョン属性を変更できるようにはなっていません。 管理者に pre-revprop-change フックを作成するよう頼んでください svn: リポジトリが、リビジョン属性を変更できるようにはなっていません。 管理者に pre-revprop-change フックを作成するよう頼んでください
このエラーは、Eclipse用プラグインSubversiveを利用してレポジトリへのコミットを行ったときに発生したものです。とりあえず、「pre-revprop-change」ファイルが無いことが問題なので、次のようにして作成しました。
pre-revprop-changeファイルを作成する
作成と言っても、デフォルトファイルpre-revprop-change.tmplがhooksディレクトリにあるので、レポジトリのディレクトリに移動して、
cp hooks/pre-revprop-change.tmpl hooks/pre-revprop-change
のようにコピーするだけです。簡単ですね。
エラー再び
とりあえず、pre-revprop-changeファイルを作成することには成功しましたが、コミット時にまたもやエラーが。
SVN: 'Set revision author' operation finished with error: svn: 'pre-revprop-change' フックが次のようなエラーを出力して失敗しました: Changing revision properties other than svn:log is prohibited svn: 'pre-revprop-change' フックが次のようなエラーを出力して失敗しました: Changing revision properties other than svn:log is prohibited
今度は、少しエラーの内容が異なります。ここで気がついたのですが、実はコミット時に、Subversionで簡単に使えるとある機能を使っていました。それが原因でした。
その機能とは、コミットするユーザ名(Author)を変更(設定)する機能ですこれは、Subclipseでは(おそらく)できない機能ですやりかたは簡単で、レポジトリの設定(レポジトリプロパティ)の「Advanced>Override author name with represented below:」に、Authorとして登録したい名前を入力するだけです。たとえば、SVN+SSHを利用しているときは、SSHのログインユーザ名でコミットしてしまいますが、この設定を利用することで好きな名前に変更できます。
さて、これがどうエラーと関係しているかというと、エラー冒頭の「Set revision author」と関係しています。つまり、authorを変更(設定)するときにエラーが発生しているのです。もう少し細かく言うと、実は、pre-revprop-changeファイル内の設定で、authorの書き換えを禁止しているのが問題なのです。そこで、先ほど作成したデフォルトのpre-revprop-changeファイルの
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
の次の行に
if [ "$PROPNAME" = "svn:author" ]; then exit 0; fi
を追加してauthorの書き換えを許可してあげます。これで、Authorを変更(= svn:authorを変更)出来るようになりました。
成果
もう一度コミットしてみると、正しく終了します。そして、Historyでコミットしたファイルを見てみると、たしかにAuthorの欄が設定した名前になっています。めでたしめでたし。
Subversive便利
Authorを手軽に設定できることも便利ですが、そのほかにもSubclipseより便利なところがたくさんありました。細かいところですが、たとえばプロキシサーバを簡単にレポジトリごとに設定できるところや、SVNやSSHの接続ポートを簡単に設定できるところです。Subclipseユーザの型は、是非一度Subversiveを使ってみてくださいただ、SubclipseとSubversiveを一つのeclipseに同時にインストールするのはやめた方がいいです
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
実用 Subversion 第2版
入門Subversion―Windows/Linux対応
SSHトンネルを介したリモートデスクトップがものすごく遅い時
PuTTYのSSHトンネルでリモートデスクトップをしたら遅すぎた
PuTTYのSSHトンネル機能を使ってlocalhostのポートからリモートデスクトップで接続したいWindows Vista PCのリモートデスクトップ用ポート(3389)までトンネルを作成し、リモートデスクトップ接続を試みました。
ところが、こうして接続したリモートデスクトップは、ログイン自体はできるものの、あまりに遅すぎて使い物になりませんでした。さらに、putty.exeのCPU使用率が40-50%(デュアルコアCPU使用)となり、非常に高く、全体的なPCの動作速度も著しく低下しました。
True Remoteを使ってみても遅かった
これはきっとリモートデスクトップの効率が悪いせいだということにして、軽量高速とはてなで盛り上がったTrue Remoteを使ってみることに。
True Remoteでは、まずリモート接続される側(サーバ側)のWindows PC上でTrue Remoteを起動させておきます。このときにポート番号も指定するので、そこで指定したポート番号に向かってSSHトンネルを作ります。
そして、リモート接続する側(クライアント側)のWindows PC上でTrue Remoteを起動し、接続を試みました。
すると、確かにパスワードによるTrue Remote自体に備わっている認証は正しく完了したようなのですが、何も表示されない。さて、これはどうしたものかと。
True RemoteをSSHポートフォワーディングを使って利用したという報告はWeb上で見つかるので、なにか私が間違っているのだろうと思いました。そこで、とりあえずTrue Remoteのことを考えるのではなく、PuTTYの設定をいろいろいじってみることにしました。
リモートデスクトップとTrue Remoteが遅かった理由
そして、いろいろ試してみた結果、PuTTYの設定のセッション>ログにあるセッションのログを「なし」に設定することで解決しました。以前、問題解決のためにログをとる設定にしたままセッションが保存されており、こんかいそのセッションをコピーして利用していたのでこのような設定になっていました。
つまり、PuTTYがログをとるのに大忙しでCPU使用率が増加するだけでなく、SSHの通信自体のスループットが大きく低下していたというのが原因でした。
高速化→解決
以上の設定のおかげで、リモートデスクトップとTrue Remoteはどちらも使用に耐えるスピードで動作するようになりました。まだ外出先からの接続速度を試してみてはいないのですが、楽しみです。
結論
PuTTYのログ機能は性能を大きく損なう可能性があるので要チェックです。気をつけましょう。
Subversiveを使ってみた
Subversive
Eclipse用SubversionプラグインといえばSubclipseだと思うのですが、それも次第にSubversiveに変わっていくんだと思います。きっと。ということで、Subversiveをインストールしてみました。
というか、Subclipseでレポジトリごとに異なるポートを使いたいのに、いくら設定してもまるで-pオプションを反映してくれないので嫌気がさし、Subversiveをインストールしただけです。
感想
使ってみての感想は、なんだか設定項目が多いってことと、SVNレポジトリViewでディレクトリを開くときにあまり時間がかからないってこと。ただ、なんだか何が必要な設定項目だか今現在よく分かってないので、ちゃんと実験してみてメモろうかと思います。ちなみに、現在はsvn+sshでの接続です。
Subclipseのsvn+ssh利用時のポート番号について
なんかSubclipseでsvn+sshを利用するとき、ポート番号を指定しても意味がないというか反映されていないようなので報告メモ
Subclipseでポート番号を指定してみる
Subclipseでsvn+sshを利用するときに、ポート番号(port)を
svn+ssh://username@hostname:port/repos/myreposのようにして、ポート番号の指定をしてみました。ただ、そのポート番号の様子がおかしい。
ポート番号にどんな番号を指定しても、常にSSHのデフォルトである22番ポートを使っているような気がしてきたので、Wiresharkで調べてみると、確かにどんな番号を指定しても22番ポートを利用しています。なので、
svn+ssh://username@hostname:10000000000/repos/myreposなんていう無茶な設定から
svn+ssh://username@hostname:99/repos/myreposなんていう微妙な設定まで、どう設定しようと22番ポートを利用しているようなのです。
Subclipseのソースコードをちょっと読んでみた
Subclipse自体のソースコードをチェックしてみたところ、URLのパース自体はちゃんとやっているみたい。ただ、それ以上どのタイミングでポート番号を指定して利用しているかがちょとすぐには見つからないのではっきりしません。すいません。
ポート指定方法はあるけれど
Subclipseの設定ファイルを利用して、ポート番号を指定することは確かにできるみたいなのですが、レポジトリごとの設定ができない模様。不便すぎる。
まさか
実は上記のポート番号の指定方法が間違っているのかもしれないんですけど、とりあえず、適当に入力しても何のエラーにもならないのは問題かと。とりあえず、もうちょっと調べてみようかな。
svn+ssh://の後に続くパスについて
svn+sshをやると言ってから、ずっとsshを使わずにローカルでsubversionを利用していたので進展なしでした。ついにEclipseからSubclipse経由でsvn+sshを利用できるようになったので、記念にメモ。svn+sshの導入方法自体についてはまた今度書こうかと思いますこれで割と安全に、たとえば外出先から家のsubversionサーバに接続できるようになるわけです
svn+ssh://???
svn+ssh://の後には、sshログインユーザ名@ホスト名(IPアドレス)/レポジトリパスと続きます。たとえば、
svn+ssh://username@192.168.1.1/svn/reposとなります。ここで、メモしておきたいポイントは、「ホスト名の後に続くパスは、SSHで接続するサーバのフルパス」ということです。
つまり、ルートディレクトリからちゃんと書けということみたいです。上の例では、ルートディレクトリ(/)にsvnディレクトリがあり、svnディレクトリの中にreposレポジトリがあることになります。
svn+ssh結構手間取った;