さっきのsvkpath.plの修正版
File::HomeDir
と Path::Class
を使わずに愚直にかいてみたがあまり体感変わらず、ためしに YAML
を YAML::Syck
にしてみたら激早くなった。
#!/usr/bin/env perl
use strict;
use warnings;
use YAML::Syck;
my $path = $ARGV[0] or die;
my $config = YAML::Syck::LoadFile( $ENV{HOME} . '/.svk/config' );
my $hash = $config->{checkout}{hash};
my @path = split '/', $path;
my $svkinfo;
do {
$svkinfo = $hash->{ join '/', @path }
} while !$svkinfo and pop @path;
exit unless $svkinfo;
if (my ($trunk, $branch) = $svkinfo->{depotpath} =~ m!(?:/(trunk)|/(branches/[^/]+))$!) {
print '(' . ($trunk || $branch) . ')';
}
こんな感じ。
このくらいの体感速度なら割と普通に使えそう。
zsh の PROMPT に svk の trunk|branches/... を表示してみるテスト
毎回svk infoしてどこにいるか確かめるのが面倒になったので、
PROMPT='%(?..exit %?)
%{[33m%}%~%{[m%} %{[91m%}`perl /home/typester/dev/scratch/svkpath.pl $(pwd)`%{[m%}
%{[38m%}%(!.#.$)%{[m%}%{m%} '
PROMPTをこんなにして
#!/usr/bin/env perl
use strict;
use warnings;
use YAML;
use File::HomeDir;
use Path::Class qw/file dir/;
my $path = $ARGV[0] or die;
my $config = YAML::LoadFile( file(File::HomeDir->my_home, '.svk', 'config') );
my $hash = $config->{checkout}{hash};
$path = dir($path);
my $svkinfo;
do {
$svkinfo = $hash->{"$path"}
} while !$svkinfo and $path ne ($path = $path->parent);
exit unless $svkinfo;
if (my ($trunk, $branch) = $svkinfo->{depotpath} =~ m!(?:/(trunk)|/(branches/[^/]+))$!) {
print '(' . ($trunk || $branch) . ')';
}
とかしてみた。
これで
こんな感じになるわけだけども、毎回perl呼んでるので重い。
軽くできないかなー。
perlでやるなら裏でデーモン化してそこ呼ぶようにするのがいいのか。でもそこまでがんばる必要があるのかどうか。
svk のローカル repos を追加する方法
svk depot foo /path/to/repos
で、/path/to/repos
にあるレポジトリを foo という名前の depot として割り当てることができる。(repos がなかったら作るか聞かれるのであらかじめ作っておく必要はない)
使うときは、//
の代わりに /foo/
を使用するだけ。
ローカルrepos作業場所
//tmp
とかでやってたけど、miyagawaさんは //scratch
とか言う話。かっけ。
ネーミングセンs
svk重い
svkが重いのがちょっと耐えられなくなってきた。
checkoutに数分かかるプロジェクトもあるように。
svk co
-> その間にLDR未読消化 -> 未読消化完了 -> あれまだco中だよ、とか。
まぁプロジェクト全体を新規でcoするのは遅くても許そう。ただ svk st
でさえ時間かかるのはかなりストレスになる。
うーむ。
今、svkのりビジョンは17453で容量は
$ du -sh ~/.svk/
687M /home/typester/.svk/
という感じ。
重いのはcolinuxだからってこともあるだろうけどなぁ。
svkでためしに作ってみる
なんかふと思いついたプログラムとかためしに作ってみるときとかに、svkのローカルreposを使うとイイよという話。
$ svk mkdir //tmp/myapp -m 'created myapp directory'; svk co //tmp/myapp
とかして作業ディレクトリ作成。いろいろ作業作業コミットコミットしたのち、使えるなーと思ったら本reposにマージ。
$ svk sm -b XXX //tmp/myapp //mirror/myrepos/path
-b XXX
には最初にディレクトリ作ったときのリビジョン番号を指定してあげればOK。svk cpとかでブランチきったわけじゃないからこっちでベースポイント指定してあげないとsmergeできないの(多分
こないだつくったXSendFileとかはこんな感じで作った。そのときのログはこんな感じ。
一括でマージされてしまうのがイヤなら -I
つければsvkでciしたのと同じものがそれぞれ本reposにciされる。
rXXXX@hostname みたいなsvkのログがうざければ --verbatim
すればいい。
あと -C
で実際にマージはせずにチェックだけ出来る。
svkサイコウ。
とかいうvoxの下書きメモ。
SVK のローカルコピーを複数の場所に checkout して作業してるとなんかおかしくなるなぁ。
pull するとコンフリクトまくったり。そこで push ろうとするとやばげな感じ。-C したらなんか G マークいっぱい出たのでローカルコピー作り直したんだけど。
svk blackbox
Catalyst の本レポジトリが壊れた。
原因は svk の暴走。
svk 便利だけど、まだよくわかんないこといっぱい。よく知らないまま使ってるのはきけんだなぁ。むーん。