Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ClearCaseに別れを告げるために

タグ: ClearCase Subversion

cc2svn 1.0.2
http://code.google.com/p/cc2svn/

ClearCaseで管理されているファイルを、更新履歴やラベル、ブランチ含めてSubversionのダンプファイルに書き出すツール。
使用言語はPython。どのバージョンのPythonを対象に書かれているのか明記されていないが、少なくとも2.6.5では動き、2.3.4では動かないらしい。
試しにPython 1.4で実行してみたが、当然のごとくエラーを返され動作しなかった。

% python
Python 1.4 (Feb 16 1998)  [GCC 2.7.2.3]
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> ^D
% ./cc2svn.py
  File "cc2svn.py", line 216
    yield f.read(lastblock)
          ^
SyntaxError: invalid syntax

というわけでPython 2.7をインストール。
./cc2svn.py -helpくらいは動作することを確認したところで、設定ファイルconfig.pyの編集を開始。

CLEARTOOL = "/usr/atria/bin/cleartool"

cleartoolのパス。

CC_VOB_DIR = "/vobs/MY_VOB_DIR/path/to/root"

Subversionに変更履歴を引き継ぐルートディレクトリ。
ビューの指定も含めて "/view/my_view_tag/vobs/MY_VOB_DIR/path/to/root" と書いても良いが、その場合はcleartool catcscleartool setcsが正しく動作するよう、カレントディレクトリをmy_view_tag以下にする必要がある。

CACHE_DIR = "/var/tmp/cc2svn_cache"

キャッシュ作成先。

PUT_CCLINKS_TO_BRANCH = "main"

シンボリックリンクがどうのこうの。
ClearCaseでシンボリックリンクを使っていないのでよくわからない。

SVN_AUTOPROPS_FILE = THIS_FILE_DIR + "/config.autoprops"

~/.subversion/configのauto-propsと同じ。

CC_LABELS_FILE = THIS_FILE_DIR + "/labels.txt"

Subversionに引き継ぐラベル一覧ファイル。
この行をコメントアウトすると、ルートディレクトリに付けられた全てのラベルを引き継ぐことができる。

CC_BRANCHES_FILE = THIS_FILE_DIR + "/branches.txt"

Subversionに引き継ぐブランチ一覧ファイル。
CC_LABELS_FILE同様、コメントアウトすると全てのブランチを引き継げる。

CHECK_ZEROSIZE_CACHEFILE = True

サイズ0のファイルをキャッシュ内に見つけた時、ClearCaseから再度落としてくるか。

SVN_CREATE_BRANCHES_TAGS_DIRS = False

svndump.txtで/tagsと/branchesの作成も行うか。
Falseにした場合、リポジトリにsvndump.txtをsvnadmin loadする前に/tagsと/branchesを作っておく必要がある。

SVN_DUMP_FILE = "svndump.txt"

生成するSVNダンプファイルの名前。

HISTORY_FILE = "cchistory.txt"

生成するClearCase履歴ファイルの名前。

設定が完了したら./cc2svn.py -runで変換開始。

% ./cc2svn.py -run
2010/09/05 17:58:21: INFO: Loading CC history to /home/idlysphere/cc2svn/cchistory.txt
2010/09/05 17:59:11: INFO: Loading svn auto properties from /home/idlysphere/cc2svn/config.autoprops
2010/09/05 17:59:11: INFO: Processing ClearCase history, creating svn dump /home/idlysphere/cc2svn/svndump.txt
2010/09/05 17:59:12: ERROR: 'ascii' codec can't decode byte 0xbf in position 0: ordinal not in range(128)

ふむ……
ClearCaseの履歴をcchistory.txtに書き出したのち、EUCのコメントをASCIIコーデックでデコードしようとしてエラーになったようだ。
cchistory.txtは一度作られれば次回以降それを使いまわせるので、ひとまず自前で文字コードをEUCからUTF-8に変換し、cc2svn.pyでは素のまま扱うようにする。

197c197
<     return codecs.utf_8_encode(text)[0]
---
>     return text

再び実行開始。

2010/09/05 18:57:34: INFO: Processing ClearCase history, creating svn dump /home/idlysphere/cc2svn/svndump.txt
2010/09/05 19:17:12: INFO: Checking labels
2010/09/05 19:17:12: INFO: Checking LABEL1
2010/09/05 19:17:12: ERROR: Command failed: /usr/atria/bin/cleartool setcs /var/tmp/cc2svn_cache/label_config_spec_tmp_cc2svnpy
Command has non-empty error stream:
cleartool: Error: Operation stat, .: ファイルもディレクトリもありません。
cleartool: Warning: New config spec makes current working dir invisible.

「警告: 新しいconfig specは現在の作業ディレクトリを見えなくします」、か。
どれどれ……

% cleartool catcs
element * LABEL1

なるほど。config specを「LABEL1」だけにされては、上位ディレクトリpathやtoに「LABEL1」ラベルを付けていない /vobs/MY_VOB_DIR/path/to/root は見えなくなってしまう。
となると、多少大雑把ではあるが、ディレクトリについては全て可視にすることで対応してしまうのがいいか。

811c811
<                 file.write("element * " + label + "\n")
---
>                 file.write("element * " + label + "\n" + "element -directory * /main/LATEST\n")

三度実行。

2010/09/05 19:29:01: INFO: Processing ClearCase history, creating svn dump /home/idlysphere/cc2svn/svndump.txt
2010/09/05 19:49:17: INFO: Checking labels
2010/09/05 19:49:17: INFO: Checking LABEL1
2010/09/05 19:49:19: INFO: Checking LABEL2
……(略)……
2010/09/05 19:51:14: INFO: Completed

終わった\(^o^)/
こうして8083行のcchistory.txtから書きだされたsvndump.txtは、リビジョン数8033、サイズ約37MB(7z圧縮して約800KB)。それをsvnadmin loadしたSubversionリポジトリのサイズは、svnadmin packして100MB。
うーん……アトミックコミットではないから仕方ないとはいえ、変更量の割には巨大なリポジトリになってしまった。

ちなみに、試しにこのリポジトリをBazaarの2aリポジトリに変換してみたところ、obsolete_packsを除いたリポジトリのサイズは2MB程度に収まった。groupcompressの効果だろうか、Subversionと比べて大分小さい。
ただし、残念なことにこの流れ(ClearCase→Subversion→Bazaar)ではラベル(タグ)の引き継ぎがうまくいかない。cc2svnによって作成されたタグは「任意のリビジョンの別名」の体裁を取っていないため、

% bzr tags
LABEL1   ?
LABEL2   ?

このようにタグとリビジョンが紐付かなくなってしまう。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/253-44bc9bf9
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。