Archive for 2009/10/8

そもそもなぜ1つのワークで2つのリポジトリにアクセスしたくなったかといえば、
パブリックに公開されているオープンソースなどに対して、独自の変更を加えたくなったからである。

そうなると、独自の変更を管理しながら、オープンソースなどのオリジナルの変更を取り込まなければならない。

そこで思いついたのが、独自の変更の管理がCVSで、オープンソースなどの管理がSubversionというわけである。

初めてバージョン管理(CVS)でソースを管理し始めたのが2000年頃だから、約10年もたってしまったが、その間にいろいろなバージョン管理が普及してきた。
そのおかげで、このような同時に2つのバージョン管理のもとでソースを変更するということができるようになった。

さて、再度やりたいことをまとめると・・・

1)Subversionのリポジトリには変更を加えない。つまりコミットはしない。
2)Subversionのワークでは変更をするが、この変更を管理したい。
3)Subversionのリポジトリ上で何か変更があったら、それを取り込みたい。

ということで、変更の管理をローカルのCVSで管理しようというわけだ。
仮に手元で変更しても、Subversionのマージ機能でできるだけ、最新についていこうというわけだ。
また、もし、マージ不可能になれば、実装方法を変えるか、最新についていかない(いけない)ということだ。

また、この仕組みは別の用途でも使える。
手元のリポジトリ(CVS)で細かい変更を管理し、ある程度まとまった管理を(Subversion)で管理する。という手法だ。
開発をしていると自分が何をしているのかのメモのためでも、1日の終わりにコミットしておきたいなと思うときがある。
それは、プログラムがコンパイルを通らないような状況のときもあるが、ソース管理のやり直し、取り消しなどの機能があると非常に便利で、コミットしておきたくなる。しかし、これが全体に悪影響を及ぼすのでできなかったのが、可能になる。

また、Subversionでは変更管理をするための周辺ツールなども揃っており、これらと連携するためにもある程度、機能単位でまとまってコミットできるとそれらのツールも使いやすいし、後で管理もしやすい。バグ番号などで管理しているならば、それらの単位でコミットできれば、まとまりとして管理できるので後でパッチなどもバグ毎に作りやすい。

この場合には
1)機能として説明できないほど小さいレベルや、1つのファイルでは修正が完了しないような変更はCVSにコミット
2)バグ番号、機能番号としてまとまったレベルまで変更がたまってきたら、それらを一括してSubversionにコミット

ということで、いろいろと応用ができる使い方ができる。
(ただし、csvとsvnで微妙にコマンドが違うので、自分が多少混乱する。)

では、そのための手順は、

1)Subversion のワークを作成

svn co svn://foo/..........

2)このワークをそのまま、cvsにインポートする。
ただし、Subversionの管理ディレクトリはいらないので、cvsignoreなどを使い .svnは無視するようにする。

cvs import .......

3)2で作ったリポジトリのワークを作るためにチェックアウトする。

cvs co [リポジトリ名]

4)3で取り出したソースを、1に上書きする。
SubversionもCVSも単純にディレクトリ直下の既定のディレクトリで管理しているので、これらがあればそれぞれのワークとして機能する。
(tar などを使ってご自由に上書きしてください。)

以上で、完了です。
(かなり、SubversionもCVSも使い方は省略しています。)

あとは、Subversionの変更を取り込むには、svn updateで、CSVの変更を取り込むには同じディレクトリ上で、cvs updateと打てばいいので結構楽です。これ。
また、個人的にはCVSのタグ付の機能がSubversionにはないので、これをCVSのほうで補完できます。

Flexでは、ダイアログをPopUpManagerを使って作成することができる。
また、作成時に画面の中央にダイアログを表示したい場合には

private function createDialog():void{
  var popup:IFlexDisplayObject = PopupManager.createPoopup([親画面],[Dialogのクラス],true);
  PopupManager.centerPopup(popup);
}

のようにすればよい。
ここで、[Dialogのクラス]は、通常MXMLのようなものをさすと思う。

でも、小さい画面で開いていたが、ダイアログが見えないので画面を最大にしたとしても、
このままではダイアログは中央には移動しない。

ここで、親画面のリサイズとともにダイアログも中央の移動してほしい場合には
画面の更新とともに、以下のようなメソッド(関数)を作成しておき実行する。


private function updateEnd():void{
  if(_curPopup){
    PopUpManager.centerPopUp(_curPopup);
  }
}

ここで、_curPopupは先の作成時の処理を

private var _curPopup:IFlexDisplayObject = null;
private function createDialog():void{
  _curPopup = PopupManager.createPoopup([親画面],[Dialogのクラス],true);
  PopupManager.centerPopup(_curPopup);
}

のように変えておけばよい。

また、画面の更新時の処理はMXMLであれば、

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
	updateComplete="updateEnd()" >

のように、updateCompleteのプロパティ(イベント)を使うのが楽だ。
ちなみに、このイベントは正確にはmx.events.FlexEvent.UPDATE_COMPLETEになるので、AS内であればこのイベントで処理をする。

RSS
Add to Google

カスタム検索
ソフトウェア&ライブラリ


ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2009年10月
« 9月   11月 »
 1234
567891011
12131415161718
19202122232425
262728293031  
アーカイブ
にほんブログ村 IT技術ブログへ