2010-12-09 nvdajp の開発メモから bazaar と launchpad.net の操作に関する情報をまとめました。
launchpad.net におけるブランチ一覧
since 2011-12-11
lp:~nvdajp はユーザーではなく nvdajp という名前のチームのリポジトリである。
nishimotz がいま作業している nvdajp プロジェクトは本家のリポジトリからブランチしている。
残念ながら lp:~nvdajp のデフォルトプロジェクト(mainブランチ)と本家 nvda プロジェクトのブランチの先祖が違うらしく、オーナー権限をいただいたもののうまく push できなかった。
そこで jpmain というブランチ名で push する。
作業するフォルダは lp:~nishimotz/nvdajp/main としてブランチされたフォルダ:
C:\work\nvda\jpmain>bzr push lp:~nvdajp/nvdajp/jpmain Using default stacking branch /+branch-id/348625 at lp-81649488:///~nvdajp/nvdajp Created new stacked branch referring to /+branch-id/348625.
この作業の結果 https://code.launchpad.net/~nvdajp/ には lp:~nvdajp/nvdajp/jpmain が表示されるようになった。
なお lp:~nvdajp/nvdajp/MiscellaneousDependencies は問題なく nishimotz のリポジトリから push できた。
2011-12-14 追記 lp:nvdajp が lp:~nvdajp/nvdajp/jpmain を指すように設定した。
2012-05-03 追記 lp:nvdajp を「NVDA 日本語チーム」の開発ブランチとして運用することにした。
アルファリリースに向けた準備
http://bazaar.launchpad.net/~nvdajp/nvdajp/main/files
自分のブランチを作ってみる
$ bzr launchpad-login nishimotz $ bzr branch lp:nvdajp $ cd nvdajp/ $ bzr pull $ bzr info Standalone tree (format: 2a) Location: branch root: . Related branches: push branch: bzr+ssh://bazaar.launchpad.net/~nvdajp/nvdajp/main/ parent branch: bzr+ssh://bazaar.launchpad.net/~nvdajp/nvdajp/main/ $ bzr push lp:~nishimotz/nvdajp/development
この状態で
を見ると
ができている。
$ cd .. $ mkdir lp-nishimotz $ cd lp-nishimotz
# うまく行かない例 $ bzr branch lp:~nishimotz:/nvdajp/development bzr: ERROR: Invalid url supplied to transport: "lp:~nishimotz:/nvdajp/developmen t": No such person or team: nishimotz%3A
# うまくいった例 $ bzr branch bzr+ssh://bazaar.launchpad.net/~nishimotz/nvdajp/development
やや時間がかかるが終了
$ ls development
日本語IME対応の差分ファイルを取り込んで bzr add / bzr commit する。
$ bzr commit -m "Japanese Input Method Editor support" Committing to: /cygdrive/c/work/nvdajp/lp-nishimotz/development/ modified source/TSF.py modified source/core.py modified source/keyboardHandler.py added source/nvdajp_dic.py added source/nvdajp_keyEvents.py modified source/rcomplib.dll modified source/config/__init__.py Committed revision 3503. $ bzr push lp:~nishimotz/nvdajp/development Pushed up to revision 3503.
次から bzr push のデフォルトを変えたいときは
bzr push リポジトリ --remember
launchpad.net サイトでプロジェクトを作る。
ブランチを nvdajpime にする。プロジェクトは指定しないと +junk になるらしい。
https://code.launchpad.net/~nishimotz/+junk/nvdajpime
ローカルで bzr init / bzr add / bzr commit する。
# うまく行かない例 $ bzr push lp:~nishimotz/+junk/nvdajpime bzr: ERROR: Target directory lp:~nishimotz/+junk/nvdajpime already exists, but d oes not have a valid .bzr directory. Supply --use-existing-dir to push there any way.
# うまくいった例 $ bzr push lp:~nishimotz/+junk/nvdajpime --use-existing-dir Created new branch.
2010.2 : Code : NVDA Japanese
MiscellaneousDependencies : Code : NVDA Japanese
C:\work\nvdajp\lp\devinstaller\nvda\nvda>bzr info Standalone tree (format: 2a) Location: branch root: . Related branches: push branch: bzr+ssh://bazaar.launchpad.net/~nishimotz/nvdajp/with_jtalk/ parent branch: http://bazaar.launchpad.net/~nvdajp/nvdajp/main/ C:\work\nvdajp\lp\devinstaller\nvda\nvda>bzr merge Merging from remembered parent location http://bazaar.launchpad.net/~nvdajp/nvdajp/main/ Nothing to do. C:\work\nvdajp\lp\devinstaller\nvda\nvda>bzr merge lp:nvdajp/2010.2 // omitted Text conflict in source/config/__init__.py Text conflict in source/gui/__init__.py Text conflict in source/gui/settingsDialogs.py Conflict adding file source/locale/ja/LC_MESSAGES/nvda.po. Moved existing fileto source/locale/ja/LC_MESSAGES/nvda.po.moved. Conflict adding file source/nvdajp_dic.py. Moved existing file to source/nvdajp_dic.py.moved. Conflict adding file source/nvdajp_ime.py. Moved existing file to source/nvdajp_ime.py.moved. Conflict adding file source/nvdajp_keyEvents.py. Moved existing file to source/nvdajp_keyEvents.py.moved. Conflict adding file source/synthDrivers/_jtalk.py. Moved existing file to source/synthDrivers/_jtalk.py.moved. Conflict adding file source/synthDrivers/jtalk.py. Moved existing file to source/synthDrivers/jtalk.py.moved. 9 conflicts encountered.
いきなりやったら conflict した。。
もとのファイルは moved にリネームされた模様。
以下、nvdadepend の上流からの pull をする。jtalk の dll とバイナリデータはこちらに移っていることを確認できる。
C:\work\nvdajp\lp\devinstaller\nvda\nvdadepend>bzr info Standalone tree (format: 2a) Location: branch root: . Related branches: parent branch: http://bazaar.launchpad.net/~nvdajp/nvdajp/MiscellaneousDependencies/ C:\work\nvdajp\lp\devinstaller\nvda\nvdadepend>bzr pull Using saved parent location: http://bazaar.launchpad.net/~nvdajp/nvdajp/MiscellaneousDependencies/
Python を入れ直す
buildout はやりなおさない。
nvdajp/2010.2 をマージして python generate.py して python nvda.pyw できることを確認。
bzr conflicts で怒られるものを修正して bzr resolve FILENAME しておく。
>bzr commit -m "merge lp:nvdajp/2010.2" >bzr info Standalone tree (format: 2a) Location: branch root: C:/work/nvdajp/lp/devinstaller/nvda/nvda Related branches: push branch: bzr+ssh://bazaar.launchpad.net/~nishimotz/nvdajp/with_jtalk/ parent branch: http://bazaar.launchpad.net/~nvdajp/nvdajp/main/ submit branch: bzr+ssh://bazaar.launchpad.net/%2Bbranch/nvdajp/2010.2/ >bzr push Using saved push location: bzr+ssh://bazaar.launchpad.net/~nishimotz/nvdajp/with_jtalk/ Pushed up to revision 3530.
https://code.launchpad.net/~nvdajp/nvdajp/2010.2
> cd C:\work\nvdajp\lp\devinstaller\nvda\nvda > bzr merge lp:nvdajp/2010.2
衝突していると言われる。
conflicts: Text conflict in installer/nvda.nsi Text conflict in source/versionInfo.py
確認したところバージョン番号の文字列のみ。
手作業で新しい情報に直す。(「<<<<」「====」「>>>>」などの目印を頼りに)
<<<<<<< TREE もとのソースコード ======= マージされたソースコード >>>>>>> MERGE-SOURCE
問題なければ衝突が解消したことを bzr に教えてあげるために bzr resolve コマンドを使う。
> bzr resolve installer\nvda.nsi > bzr resolve source\versionInfo.py
bzr status すると pending merge がある。 bzr status -v するとたくさん出てくる。
念のため、やり直す。
> bzr revert > bzr merge --pull lp:nvdajp/2010.2
同じだ。こういうものなのか。。
評判の良くなかった zjtalk.py を消す。
> cd C:\work\nvdajp\lp\devinstaller\nvda\nvda\source > bzr rm synthDrivers\zjtalk.py deleted source/synthDrivers/zjtalk.py
開発環境のメンテナンス。
C:\work\nvdajp\lp\devinstaller\nvda\nvda\source>python nvda.pyw Can't read data file: 'synthDrivers/espeak-data\intonations' Failed to load espeak-data
怒られていた。気づいたら本当に intonations というファイルがない。 devinstaller に頼れなくなったので自力で頑張る。
> cd C:\work\nvdajp\lp > bzr branch lp:~nvdajp/nvdajp/MiscellaneousDependencies
C:\work\nvdajp\lp\MiscellaneousDependencies\source\synthDrivers
の中の espeak-data フォルダを
C:\work\nvdajp\lp\devinstaller\nvda\nvda\source\synthDrivers
に上書きする。
C:\work\nvdajp\lp\devinstaller\nvda\nvda\source>python nvda.pyw Wrong version of espeak-data 0x14361 (expects 0x14400) at synthDrivers/espeak-data
起動するようになったが、espeak がエラーを出している。
追記 (2010-11-08) bzr pull したら
All changes applied successfully. Now on revision 19.
となり、espeak-data が新しくなった。エラーが出なくなった。
since 2010-12-27
目標:本家の更新を効率的に取り込みたい。
本家の "Shared Repository" AccessingAndRunningSourceCode に従ってみる:
cd c:\work bzr init-repo nvda cd nvda bzr branch http://bzr.nvaccess.org/nvda/main
dir すると main がある。
cd c:\work\nvda\main bzr pull
何も差分はないが、エラーにはならない。本家のリビジョンはこの時点で 3993 である。
nvdajp_jtalk という名前で、これの branch を作ってみる:
cd c:\work\nvda bzr branch main nvdajp_jtalk
改めて launchpad のドキュメント を読んでみる。
ちなみに c:\work\nvda ディレクトリで bzr push しようとすると「ここはbranchじゃなくてrepositoryだから実行できない」と怒られる。
プロジェクト名を nvda にして、ブランチ nvdajp_jtalk を push してみよう:
C:\work\nvda\nvdajp_jtalk>bzr commit -m "silence driver works" Committing to: C:/work/nvda/nvdajp_jtalk/ modified source/synthDrivers/silence.py Committed revision 3994. C:\work\nvda\nvdajp_jtalk>bzr push lp:~nishimotz/nvda/nvdajp_jtalk Using default stacking branch /~nvda-core-dev/nvda/main at lp-70167504:///~nishimotz/nvda Created new stacked branch referring to /~nvda-core-dev/nvda/main.
なんと ~nvda-core-dev/nvda/main と関連付けされてしまった。
https://code.launchpad.net/~nishimotz/nvda/nvdajp_jtalk
じゃあ調子にのって jtalk エンジン一式 add して push しよう:
http://bazaar.launchpad.net/~nishimotz/nvda/nvdajp_jtalk/revision/3995
できた。。
どうなってるのか念のため確認:
https://code.launchpad.net/~nvda-core-dev/nvda/main
bzr.nvaccess.org から自動的にミラーする設定らしい。自分が push したブランチの本家は bzr.nvaccess.org だったので関連付けがうまくいったのだろう。。
TODO: 本家のリビジョンが上がったときに、簡単にマージできるかどうか確認したい。
追記:miscdep っぽいものを作った:
追記:ブランチ名を変えました 2011-01-16
cd c:\work\nvda bzr branch nvdajp_jtalk nvdajp_work cd nvdajp_work
C:\work\nvda\nvdajp_work>bzr merge c:\work\nvdajp\with_jtalk\nvda +N readme_nvdajp.txt +N source/locale/ja/LC_MESSAGES/nvda.po +N source/locale/ja/LC_MESSAGES/nvda.po.moved +N source/nvdajp_dic.py +N source/nvdajp_dic.py.moved +N source/nvdajp_ime.py +N source/nvdajp_ime.py.moved +N source/nvdajp_keyEvents.py +N source/nvdajp_keyEvents.py.moved +N source/nvdajpime.dll +N source/synthDrivers/_jtalk_core.py +N source/synthDrivers/_nvdajp_eng_dic.py +N source/synthDrivers/_nvdajp_jtalk.py +N source/synthDrivers/jtalk/ +N source/synthDrivers/jtalk/bep-eng.dic +N source/synthDrivers/jtalk/dic/ +N source/synthDrivers/jtalk/dic/COPYING +N source/synthDrivers/jtalk/dic/char.bin +N source/synthDrivers/jtalk/dic/dicrc +N source/synthDrivers/jtalk/dic/left-id.def +N source/synthDrivers/jtalk/dic/matrix.bin +N source/synthDrivers/jtalk/dic/pos-id.def +N source/synthDrivers/jtalk/dic/rewrite.def +N source/synthDrivers/jtalk/dic/right-id.def +N source/synthDrivers/jtalk/dic/sys.dic +N source/synthDrivers/jtalk/dic/unk.dic +N source/synthDrivers/jtalk/eng_dic_maker.py +N source/synthDrivers/jtalk/libmecab.dll +N source/synthDrivers/jtalk/libopenjtalk.dll +N source/synthDrivers/jtalk/mecabrc +N source/synthDrivers/jtalk/mei_normal/ +N source/synthDrivers/jtalk/mei_normal/COPYRIGHT.txt +N source/synthDrivers/jtalk/mei_normal/README.txt +N source/synthDrivers/jtalk/mei_normal/dur.pdf +N source/synthDrivers/jtalk/mei_normal/gv-lf0.pdf +N source/synthDrivers/jtalk/mei_normal/gv-mgc.pdf +N source/synthDrivers/jtalk/mei_normal/gv-switch.inf +N source/synthDrivers/jtalk/mei_normal/lf0.pdf +N source/synthDrivers/jtalk/mei_normal/lf0.win1 +N source/synthDrivers/jtalk/mei_normal/lf0.win2 +N source/synthDrivers/jtalk/mei_normal/lf0.win3 +N source/synthDrivers/jtalk/mei_normal/lpf.pdf +N source/synthDrivers/jtalk/mei_normal/lpf.win1 +N source/synthDrivers/jtalk/mei_normal/mgc.pdf +N source/synthDrivers/jtalk/mei_normal/mgc.win1 +N source/synthDrivers/jtalk/mei_normal/mgc.win2 +N source/synthDrivers/jtalk/mei_normal/mgc.win3 +N source/synthDrivers/jtalk/mei_normal/pdr.pdf +N source/synthDrivers/jtalk/mei_normal/tree-dur.inf +N source/synthDrivers/jtalk/mei_normal/tree-gv-lf0.inf +N source/synthDrivers/jtalk/mei_normal/tree-gv-mgc.inf +N source/synthDrivers/jtalk/mei_normal/tree-lf0.inf +N source/synthDrivers/jtalk/mei_normal/tree-lpf.inf +N source/synthDrivers/jtalk/mei_normal/tree-mgc.inf +N source/synthDrivers/jtalk/mei_normal/tree-pdr.inf +N source/synthDrivers/jtalk/voice/ +N source/synthDrivers/jtalk/voice/COPYING +N source/synthDrivers/jtalk/voice/INSTALL +N source/synthDrivers/jtalk/voice/README +N source/synthDrivers/jtalk/voice/dur.pdf +N source/synthDrivers/jtalk/voice/gv-lf0.pdf +N source/synthDrivers/jtalk/voice/gv-mgc.pdf +N source/synthDrivers/jtalk/voice/gv-switch.inf +N source/synthDrivers/jtalk/voice/lf0.pdf +N source/synthDrivers/jtalk/voice/lf0.win1 +N source/synthDrivers/jtalk/voice/lf0.win2 +N source/synthDrivers/jtalk/voice/lf0.win3 +N source/synthDrivers/jtalk/voice/mgc.pdf +N source/synthDrivers/jtalk/voice/mgc.win1 +N source/synthDrivers/jtalk/voice/mgc.win2 +N source/synthDrivers/jtalk/voice/mgc.win3 +N source/synthDrivers/jtalk/voice/tree-dur.inf +N source/synthDrivers/jtalk/voice/tree-gv-lf0.inf +N source/synthDrivers/jtalk/voice/tree-gv-mgc.inf +N source/synthDrivers/jtalk/voice/tree-lf0.inf +N source/synthDrivers/jtalk/voice/tree-mgc.inf +N source/synthDrivers/nvdajp_jtalk.py +N user_docs/ja/readme.txt M installer/nvda.nsi * nvdaHelper/remote/inProcess.cpp M source/IAccessibleHandler.py M source/JABHandler.py M source/api.py M source/appModuleHandler.py M source/aria.py M source/baseObject.py M source/characterSymbols.py M* source/config/__init__.py M* source/core.py M source/cursorManager.py M source/globalVars.py M source/gui/__init__.py M source/gui/settingsDialogs.py M source/keyLabels.py M* source/keyboardHandler.py -D source/locale/ja/LC_MESSAGES/nvda.po M source/mouseHandler.py M source/nvda_service.py M source/nvwave.py M source/queueHandler.py M source/sayAllHandler.py M source/scriptHandler.py M source/setup.py M source/shellapi.py M source/shlobj.py M source/speech.py M source/speechDictHandler.py M source/speechViewer.py M source/synthDriverHandler.py R source/synthDrivers/_jtalk_core.py => source/synthDrivers/_jtalk_core.py.moved R source/synthDrivers/_nvdajp_jtalk.py => source/synthDrivers/_nvdajp_jtalk.py.moved R source/synthDrivers/jtalk/ => source/synthDrivers/jtalk.moved/ R source/synthDrivers/nvdajp_jtalk.py => source/synthDrivers/nvdajp_jtalk.py.moved M source/tones.py M source/ui.py M source/versionInfo.py M source/winConsoleHandler.py M source/winInputHook.py M source/winKernel.py M source/winUser.py Text conflict in installer/nvda.nsi Text conflict in source/core.py Text conflict in source/keyLabels.py Text conflict in source/keyboardHandler.py Text conflict in source/speech.py Text conflict in source/synthDriverHandler.py Conflict adding file source/synthDrivers/_jtalk_core.py. Moved existing file to source/synthDrivers/_jtalk_core.py.moved. Conflict adding file source/synthDrivers/_nvdajp_jtalk.py. Moved existing file to source/synthDrivers/_nvdajp_jtalk.py.moved. Conflict adding file source/synthDrivers/jtalk. Moved existing file to source/synthDrivers/jtalk.moved. Conflict adding file source/synthDrivers/nvdajp_jtalk.py. Moved existing file to source/synthDrivers/nvdajp_jtalk.py.moved. Text conflict in source/winConsoleHandler.py 11 conflicts encountered. C:\work\nvda\nvdajp_work>
まあ衝突が起きるのはしょうがないので、一つずつ作業する。
installer/nvda.nsi から順番に、エディタで修正して、bzr resolve (ファイル名) する。
nvdajpの方を生かすかどうかは内容を見て判断。
例えば source/core.py は
<<<<<<< TREE log.error("Error cleaning up treeInterceptors",exc_info=True) log.debug("Terminating global plugin handler") globalPluginHandler.terminate() ======= log.error("Error cleaning up virtualBuffers",exc_info=True) >>>>>>> MERGE-SOURCE
なので、これは TREE かなあ。などと。
bzr status すれば「あと何が衝突しているか」わかる。
since 2010-12-29
C:\work\nvda>bzr branch lp:nvdajp nvdajp_main
できた。
C:\work\nvda>cd nvdajp_main C:\work\nvda\nvdajp_main>bzr info Repository tree (format: 2a) Location: shared repository: C:/work/nvda repository branch: . Related branches: parent branch: bzr+ssh://bazaar.launchpad.net/%2Bbranch/nvdajp/
ちゃんと shared repo のメンバーとして扱われているらしい。
こっちはどうか: https://code.launchpad.net/~nvdajp/nvdajp/2010.2
C:\work\nvda>bzr branch lp:nvdajp/2010.2 nvdajp_2010_2
できた。
特定のリビジョンを呼び出すには?
C:\work\nvda>bzr branch lp:nvdajp/2010.2 nvdajp_2010_2_r3876 -r 3876 Branched 3876 revision(s).
launchpad.net のリポジトリ lp:~k-tsuzi/nvdajp/main を k_tsuzi というディレクトリ名を指定して取り出す:
C:\work\nvda>bzr branch lp:~k-tsuzi/nvdajp/main k_tsuzi
修正して自分のレポジトリに push する:
C:\work\nvda\k_tsuzi>bzr push lp:~nishimotz/nvdajp/main Using default stacking branch /~nvdajp/nvdajp/main at lp-86694864:///~nishimotz/nvdajp Created new stacked branch referring to /~nvdajp/nvdajp/main.
これを nvdajp_main というディレクトリでやるべきだったか。。
since 2011-04-08
C:\work\nvda\releases_2011.1 にnvdajpのブランチがあるとする:
> cd C:\work\nvda > bzr branch http://bzr.nvaccess.org/nvda/main nvaccess_main Branched 4158 revision(s). > cd nvaccess_main > bzr merge ..\releases_2011.1 (omitted) M installer/nvda.nsi M nvdaHelper/archBuild_sconscript M source/config/__init__.py M source/core.py M source/gui/__init__.py M source/gui/settingsDialogs.py M source/keyboardHandler.py M source/locale/ja/LC_MESSAGES/nvda.po M source/setup.py M source/speech.py M user_docs/ja/userGuide.t2t All changes applied successfully.