svn propset について調べてみた(svn:external, svn:ignore, svn:executable)

By | 2008年11月16日

svn のリポジトリに外部リポジトリを追加する

Subversionのsvn:externalsというプロパティ を参考にして、大元のリポジトリに違うリポジトリを追加(シンボリックリンクみたいなイメージ)してみた。

svn:externals 自体は簡単ですぐにできた。
これできれば Project 単位でリポジトリ作成しておいて、
自分用のリポジトリにもこれで同期できるし、これ便利。

というわけで、さっそく試してみた。

svn propset svn:external 'Hoge http://svn.example.com/hoge' .
svn propset svn:external   '[checkout 後のフォルダ名] [リポジトリ URL]' [checkout する場所]

上記の場合だと、カレントディレクトリに http://svn.example.com/hoge を Hoge という名前で checkout する。(正確には、この段階では checkout されない。登録のみ)
次に svn up とすれば、 Hoge がcheckout してくる。

登録されているかどうかの確認は以下のコマンドで確認できる。

svn proplist -v [path]

削除したい場合は

svn propdel svn:externals [path]

で、できる。

対象ファイルを svn の管理対象外にする

svn propedit svn:ignore [path]
 
#環境変数で EDITOR を指定していない場合
EDITOR=vi svn propedit svn:ignore [path]

これで EDITOR が開いて改行区切りでファイルをして指定してやれば
書いた分だけ管理対象外にできる。
一個ずつコマンドを打つ必要がなく editor で書けるので楽。

他にもファイルで読み込むやり方もある。

svn propset svn:ignore -F [ignore file list] [path]

対象ファイルに実行権限を与える

svn propset svn:executable ON [file]

実行権限の削除

svn propdel svn:executable [file]

確認

svn proplist -v [file]
 
'file name' の属性:
  svn:executable : *

おまけ

改行コードにも指定できるみたい。

svn propset svn:eol-style [native', 'LF', 'CR', 'CRLF'] [file]

rascut で swfobject.js が 404 NOTFOUND になる件

By | 2008年11月13日

最近あまりいじる機会がなかった rascut
ASDebuger をそろそろコミットしたかったので
そろそろしとかないとまずい。。。。
とプレッシャーがつのってきて、やることに。
その矢先に、たまに rascut をサーバーで起動すると swfobject.js が404になることがたまにあったんですけど
今までは何故か気づけば自然解決してました。
で、今回はいささかなおらないので調べてみたところ治りました。
現状、問題なく動いてます。

ちなみに参考にしたページはここ

/opt/local/lib/ruby/gems/1.8/gems/rascut-0.1.3/lib/rascut/httpd.rb(パスは各自の環境で変わります)
-        @path = env["PATH_INFO"] == '/' ? @root : F.join(@root, env['PATH_INFO'])
+        @path = env["PATH_INFO"].empty? || env["PATH_INFO"] == '/' ? @root : F.join(@root, env['PATH_INFO'])

これで問題なく動いた。すげー感謝。
JNさんが噂では rascut を perl で書き直し、バージョンアップさせた
その名も pascut を作ってたはずだったので、それに期待。
心待ちにしてま〜す。

にしてもrascut便利だな。
これがないと今頃 vi 使わずに Flex Builder とか使って開発してたんだろうな。

apache の mod_dav_svn と mod_ssl の設定

導入

必要なものをインストールしておく。

1
yum install httpd mod_dav_svn mod_ssl subversion

mod_dav_svn 設定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#必要なモジュールたち
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
 
#ロックファイルのための設定
<ifModule mod_dav_fs.c>
    DAVLockDB /var/lib/dav/lockdb
</ifModule>
 
#(1)
<location /svn/>
   DAV svn
   SVNListParentPath on
   SVNParentPath /repos/svn
 
    #Basic認証の設定
    AuthType Basic
    AuthName "Authorization Realm"
    AuthUserFile [htpasswd が保存されてるファイルを指定]
    Require valid-user
</location>
 
#(2)
<location /public>
    DAV svn
    SVNPath /repos/svn/public
</location>

(1) の方の設定は Indexes を使った時みたいにリポジトリをおっていける設定。
なのでリポジトリの追加の際は新しいディレクトリを掘るだけで大丈夫。
イメージ的にはこの設定をしとくだけで /repos/svn/ 以下にリポジトリを追加するだけで
webDAV でアクセスできる感じ。

(2) の方の設定は (1) の設定とは対象に疎結合なイメージ。
1つのリポジトリと1つの Location が結びついている感じ。
この設定の場合は複数のリポジトリを扱う場合がめんどくさい。
使いどことしては特別な設定がいる場合とか??
例えば Basic 認証のユーザをかえるとかとか。。。


これで読み込みやら色々な詳細設定ができる。

ま、これだけでできる。
昔まとめた記事もあるので参考程度に。。

subversionで管理
httpでチェックアウト

mod_ssl 設定

インストール後のデフォルトの設定のままでおれおれ証明書の設定がされています。
特にいじることなく https 通信ができました。

正直、https は証明書とかいたり色々めんどくさそうな気がしてたけど
そんなことはなく簡単に、ってか何もすることがなく使えた。

鍵や証明書は /etc/pki/ 以下にあります。
ちなみに fedora8 です。

virtual host を切ってる場合は ではなく にすることを忘れなく。

近況

By | 2008年10月3日

しばらく Xen をすることになりました。
それはそれで凄い楽しみ。

ま、それはいいとして今作ってるのが
Benchmark のライブラリ、 あとは ASDebuger。

ASDebuger は動くっちゃ動くから、さっさと公開したいけど、
未実装の機能がそれなりにあって、
インターフェイスすら決めてないのが何個か…. orz

それもさっさとしたいなー
だ・れ・かぁ・・・・・たすけて

actionscirpt3 で変数に格納された値を使って動的にインスタンスを生成

By | 2008年9月29日

以前からできないのかなと思っていて、
ちょっと調べたらできそうだったので調べてみた。

試した環境は Flex3 SDK です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getDefinitionByName;
 
    public class Hoge extends Sprite {
        public function Hoge() {
       var cls:Class = getDefinitionByName("flash.text.TextField") as Class;
            var t:TextField = new cls();
            t.text = "hoge";
            t.y = 100;
            addChild(t);
 
            var t2:TextField = new TextField();
            t2.text = "fuga";
            addChild(t2);
        }
    }
}

特に重要なのが8-9行目ですね。
これで動的にインスタンスを生成することができるみたいです。

getDefinitionByName便利ですね。
でもよく考えればできそうな気もせんでもないような。。。。
ま、できてなによりです。

参考資料
http://blog.isocchi.com/2007/12/flex-actionscript.html
http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=1241

——————————————————————————————–
追記: 2008/9/30 22:52

パフォーマンスがちょっと気になったのでベンチをとってみた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package {
 
    import flash.display.Sprite;
    import flash.utils.getTimer;
    import flash.utils.getDefinitionByName;
    import org.libspark.utils.Dumper;
 
    public class Generate extends Sprite{
 
        private static const ROUND:uint = 50000;
 
        public function Generate(){
            bench(generate_new, "new");
            bench(generate_class, "[new - class]");
        }
 
 
        private function generate_new():void{
            for (var i:int = 0; i < ROUND; i++){ new Sprite(); }
        }
 
        private function generate_class():void{
            for (var i:int = 0; i < ROUND; i++){
                var cls:Class = getDefinitionByName("flash.display.Sprite") as Class;
                new cls();
            }
        }
 
        private function bench(func:Function, tag:String):void{
            var start:uint = getTimer();
            func();
            trace((getTimer() - start) + "ms :" + tag);
        }
    }
}
[64bitの結果]
330ms :new
659ms :[new - class]
355ms :new
658ms :[new - class]
 
[32bitの結果]
1285ms :new
1172ms :[new - class]
1285ms :new
1211ms :[new - class]

会社でも試した結果、おそらく32bitだと[new – class]の方がはやかった。
なぜだーーーーーと思って、家の64bit環境で試したら上記のような結果。
まぁ。。。納得?

できねーしw