あらら、3週間近く書いてなかったか。
いろいろとやってはいるんだが、どれも着々と作業してるだけなのであんまり日記に書くことがない。
SIGGRAPH ASIAは今年は海外だからって遠慮してたんだが、海外つっても韓国なんぞは一番行きやすい範囲じゃねーかと思って今からいけるのかとかを検討してみた。検討してたら朝鮮半島が緊張状態になってしまった。今から韓国行くぜとか言える雰囲気じゃないのでさすがに断念だわ。
来年はどこなのかわからんけど、台湾とかなら行きやすいんだけどなー。
mingwでC++でRubyの拡張ライブラリを書くとC++のデバッグが上手くいかなくてやりづらかったんだけど、mingwの最新を入れたら(gcc 4.5.0、gdb 7.2)すごく上手くデバッグできるようになった。最適化かかってるのにinline関数をデバッグできるなんて!これでまだ頑張れる。
monotone 0.99.1のNEWSをやっと訳したよ。
2010年10月31日(日) 21時51分16秒(世界標準時)
0.99.1をリリース。
バグ修正
- x86_64でURLの解析が必要なnetsync動作を行なうと落ちていたのを
修正しました。
(monotone issue 100を閉じました)
- 自動化インターフェースバージョンを間違って12.1と表示していま
したが13.0が正しい番号でした。
2010年10月28日(木) 21時07分18秒(世界標準時)
0.99をリリース。
変更点
- データベースの構造が変更されました。リモートおよびローカルの
データベース全てについて'mtn db migrate'を行なってください。
- 普通のおよびautomate版のsync、push、pullが--dry-runオプション
を受けつけるようになりました。これは実際のデータ転送はしませ
んが、何が転送されるのかを出力するための通信だけ行ないます。
- チェンジログの編集書式が簡略化されました。ユーザーが入力する
テキスト欄がファイルの先頭に戻され、操作説明も削減しました。
コミットをキャンセルした場合でも編集したテキストは保存される
ようにもなりました。
- セレクタがさらに強力になり、リビジョン間の共通部分を計算する
セレクタ関数も導入されました。これにより'('、')'、';'といった
文字はその文字を意味させたい場合にクォートを要求します('/'と
同じです)。詳しくはドキュメントの3.2節を見てくさい。
(monotone buf #18302の修正)
- ネットワーク関係のコマンドにおけるSERVER [BRANCH]形式の呼び出
し文法は非推奨になりました。以前からあるURIでの形式を使うよう
にしてください。さらにfile://とssh://のURIでmtn://のURIと同じ
くincludeとexcludeのパターンを解釈するようになりました。
クエリ文字列内の'include='でのinclude指定および'exclude='での
exclude指定は削除されました。パターンはそれぞれ';'で区切り、
'-'が頭についてないパターンは全てincludeパターンとして扱われ
ます。以前'mtn://host/?include=foo,exclude=bar'のように指定し
ていたものは'mtn://host/?foo;-bar'のように指定するようにして
ください。
URIパーサがより標準に沿うようになり、schemeとhostが大文字小文
字の区別をしないようになりました。pathとquery部分も自動的に
URLデコードを行なうようになりました。
URLの解析についてはRFC 3986に沿うように進めてましたが、scheme
無しURLでのauthority部の解析について、標準ではそこをpathとし
て解析するように指示しています。たとえば次のようなurlの場合、
'code.monotone.ca/monotone'
普通だったら'code.monotone.ca/monotone'をpathとして解析すべき
です。しかし今の実装では'code.monotone.ca'をauthorityとして解
析し、'/monotone'だけをpathにします。これによりコマンドライン
で'mtn://'を毎度指定する必要がありません。ブラウザで'http://'
を毎度打つ必要がないのと同じです。Monotoneの標準のschemeおよび
プロトコルである'mtn'がデフォルトとして設定されたということで
す。
データベース変数の'default-server'、'known-server'、
'server-include'、'server-exclude'におけるサーバ指定部分におい
て、使用プロトコル、ユーザ名、ホスト、ポート、パスからなる完全
な(正規化された)URIを常に指定するようになりました。既にデータベ
ースにある新しいフォーマットに適合しないエントリはそのまま保持
され、勝手に変更はされません。
URI構文に関するもっと詳しい情報についてはドキュメントの5.3節を
見てください。
- 当然のこととして'clone'コマンドがmtn://形式のURIを受け付けるよ
うになりました。そのかわりブランチのパターンをそのまま指定する
のはできなくなりました。新設の--branchオプションで指定してくだ
さい。
既にあるワークスペース内での混乱を避けるためにcloneはワークスペ
ース内のオプションを探して読み込まなくなりました。つまりデータ
ベースを明示的に指定しなかった場合にはワークスペース内で使って
たデータベースでなく設定されたデフォルトデータベースを使うよう
になりました。
- netsyncでのデフォルトサーバ設定はデータ交換が成功した時のみ保存
されるようになりました。プログレスメッセージは不意に出力されて
'clone'や'automate remote'や'automate remote_stdio'の出力をぶち
壊す問題があったため取り除かれました。
- ブランチ名に以下の文字を含む名前は使えなくなりました。
?,;*%+{}[]!^
これらはmonotoneのURI構文やブランチパターン解決時のメタ文字とし
て使用されるためです。
さらに言うとダッシュ(-)で始まるブランチ名は使用すべきではありま
せん。上にあったようにURI構文でのexcludeパターンに使用されるた
めです。
これらの制限に反するようなブランチを作ろうとした場合は警告し、
より好ましい名前を示すようになっています。
- 'cert'コマンドは複数リビジョンに対して一度に操作できるようにな
りました。
- 'db kill_rev_locally'コマンドは'local kill_revision'に変更され、
'db kill_tag_locally'と'db kill_branch_certs_locally'はもっと柔
軟なコマンドである'local kill_certs'に置き換えられました。
- 'import'コマンドは--dry-runを指定しなかったときにルートにできる
記録ディレクトリ(bookkeeping)を保持しておくようになりました。こ
れはインポートしたディレクトリをそのままワークスペースとして使
えるようにするのと、ドキュメントにある基本的には"捻りの効いた
setupです"という記述により近い動作にするためです。
- Win32ネイティブ版で日付のパースができなかったため、'commit'にデ
フォルトで'--no-format-dates'オプションが付くようになりました。
このオプションは日付のローカライズ書式化をしないようにします。
- sync、push、pullの各automateコマンドは転送した各リビジョン、
cert、鍵についてbasic_ioフォーマットで出力するようになりました。
- セレクタにおいて文法的には正しいけど存在しえないリビジョンIDを
以降に渡さないようになりました。一番よくわかる場所は
'automate select'で、40文字の16進バイト文字列が来て文句を言う
ことがなくなりました。
- 'automate genkey'コマンドは'automate generate_key'へ名前が変わ
りました。
新機能
- オプションの上書きができるようになりました。コマンドラインで
'--no-unknown --unknown'のように指定できるようになり、元の設定に
戻すことができます。同じように'get_default_command_options'フッ
クで'--no-unknown'を指定しておいてコマンドラインで'--unknown'を
上書きすることもできます。
- 新しいグローバルオプション
--no-ignore-suspend-certs 前の--ignore-suspend-certsを取り消します
--use-default-key 前の--keyを取り消します
--allow-default-confdir 前の--no-default-confdirを取り消します
--allow-workspace 前の--no-workspaceを取り消します
--interactive 前の--non-interactiveを取り消します
--no-standard-rcfiles replaces --norc
--standard-rcfiles 前の--no-standard-rcfilesを取り消します
--no-builtin-rcfile replaces --nostd
--builtin-rcfile 前の--no-builtin-rcfileを取り消します
--clear-rcfiles 前の--rcfileを取り消します
--verbose [-v] 冗長な出力を増やします(--quietの反対)
- 非表示になったグローバルオプション
--roster-cache-performance-log
- 新しいコマンドオプション
add
--no-recursive 前の--recursiveを取り消します
--respect-ignore 前の--no-respect-ignoreを取り消します
--no-unknown 前の--unknownを取り消します
bisect *, checkout, pivot_root, pluck, update, automate update
--no-move-conflicting-paths 前の--move-conflicting-pathsを取り消します
diff
--without-header 前の--with-headerを取り消します
--show-encloser 前の--no-show-encloserを取り消します
disapprove, suspend
--no-update 前の--updateを取り消します
drop
--no-recursive 前の--recursiveを取り消します
explicit_merge, merge, merge_into_dir propagate
--no-resolve-conflicts 前の--resolve-conflictsを取り消します
--no-update 前の--updateを取り消します
log
--no-brief 前の--briefを取り消します
--no-diffs 前の--diffsを取り消します
--clear-from 前の--fromを取り消します
--files 前の--no-filesを取り消します
--graph 前の--no-graphを取り消します
--merges 前の--no-mergesを取り消します
--clear-to 前の--toを取り消します
import
--no-dry-run 前の--dry-runを取り消します
--respect-ignore 前の--no-respect-ignoreを取り消します
mkdir
--respect-ignore 前の--no-respect-ignoreを取り消します
serve
--no-pid-file 前の--pid-fileを取り消します
sync, pull, push, automate remote_stdio, automate remote
automate pull, automate push, automate sync
--no-set-default 前の--set-defaultを取り消します
sync, pull, push, automate pull, automate push, automate sync
--dry-run 送受信されるものの表示だけを行ないます
automate inventory
--corresponding-renames 前の--no-corresponding-renamesを取り消します
--ignored 前の--no-ignoredを取り消します
--unchanged 前の--no-unchangedを取り消します
--unknown 前の--no-unknownを取り消します
automate content_diff
--without-header 前の--with-headerを取り消します
automate show_conflicts
--no-ignore-suspend-certs 前の--ignore-suspend-certsを取り消します
automate log
--clear-from 前の--fromを取り消します
--merges 前の--no-mergesを取り消します
--clear-to 前の--toを取り消します
- 非表示になったコマンドオプション
(いくつかのコマンドで) --no-prefix
serve --stdio --no-transport-auth
(全てのnetsync、remoteコマンドで) --min-netsync-version --max-netsync-version
- 非推奨になったオプション
--norc --no-standard-rcfilesを使ってください
--nostd --no-builtin-rcfileを使ってください
--reallyquiet --quiet --quietを使ってください
--debug --verboseを使ってください
- コマンドラインの打ち込み支援としてオプション名の一部を与えると
補完しようとするようになりました。補完候補が複数あった場合は全
ての候補とそれらの短い説明を表示します。
補完には単純な前方一致と略語一致の二種類があります。'--update'
のような一語のオプションは数文字打ち込めばあとはかぶらないので
簡単に前方一致で補完できます。この例だと'--up'だけで一致します。
'--ignore-suspend-certs'のような複数の単語からなるオプションは
一語用の補完だと衝突しまくりですが、略語一致だと'--isc'となり上
手く補完できます。
- 'disapprove'コマンドはリビジョン一つだけでなく、リビジョンの範
囲も受け付けるようになりました。
- monotoneの全てのグローバルオプションと指定したコマンドオプショ
ンを普通のtroffフォーマットで出力する'manpage'コマンドを追加し
ました。このコマンドを対話的に使用した場合nroffとlessがあればそ
れらを自動的に使用して表示します。'get_man_page_formatter_command'
フックを上書きすればデフォルトコマンドを変更できます。
'manpage'コマンドはmtn(1)の静的版を作るのにも使われ、他のmonotone
のドキュメントといっしょにインストールされます。
- 新しく'k:'セレクタが追加されました。これは指定したキーで署名さ
れたcertが一つ以上あるリビジョンを取得します。
- 新しいautomateコマンド'log'が追加されました。これは通常の'log'
と同じような動作をしますが、リビジョンIDも出力する点だけが異な
っています。
- 'checkout'に通常版と同じ動作をするautomate版が追加されました。
- Monotoneがファイルサイズの情報も記録するようになりました(上記
のデータベース構造変更はこれによるものです)。
ファイルサイズはautomationインターフェースを通して'get_file_size'
にファイルを指定するか、拡張マニフェスト(後述)の一部としてのみ
取得できます。ユーザインターフェースで見られるのは後日になりま
す。
- 新しいautomateコマンド'get_extended_manifest_of'が追加されまし
た。これはファイルサイズや拡張されたマーク情報を含む豪華版マニ
フェストフォーマットを出力します。これにより特定のノードが変更
されたり移動されたことを簡単に判別することができます。
- 新しいautomateコマンド、'put_public_key'、'get_public_key'、
'drop_public_key'が追加されました。(monotone bug #30345へ対応)
バグ修正
- 'mv'コマンドで移動元が自分自身または自分の子として移動されよう
とした時は警告を出すようになりました。(monotone bug #29484の修
正)
- 'mv'コマンドが次のような操作をちゃんと扱うようになりました。
('foo'はディレクトリ)
$ mv foo bar
$ mtn mv --bookkeep-only foo bar
- 一つを除いて全てのブランチが凍結されているリビジョンにおいてブ
ランチを選択させることが無くなりました。(monotone bug #29843の
修正)
- annotateコマンドが空や信用されてないdate cert値を出力しようとし
て失敗していたのを修正しました。(monotone bug #30150の修正)
- コミットメッセージ中にキャンセルのヒントをよく探すようになり、
それがどこにもみつからない場合のみ中止するようになりました。
(monotone bug #30215の修正)
- importコマンドで--dry-runをつけてる時は_MTN/optionsに書き込めな
いことの警告を出さないようになりました。(monotone bug #30225の
修正)
- 'automate remote'と'automate remote_stdio'が認証無しの転送方法
(file://やssh://での転送)でもnetsyncの匿名通信と同様に使えるよ
うになりました。(monotone bug #30237の修正)
- ファイルセットを制限して扱っている時に暗黙的に含まれるものが無
いことを警告しないようになりました。(monotone bug #30291の修正)
- 'passphrase'と'dropkey'コマンドが古い形式のキーファイル(ファイ
ル名にハッシュ部分がない)になっている秘密鍵を正しく扱うようにな
りました。
また、秘密鍵を消す時にはそのファイルに消す鍵以外に本当に他に何
も書かれていないことをしっかり確認するようになりました。
(monotone bug #30376の修正)
- 公開鍵や秘密鍵が存在しえない鍵IDを指していても回復不能なエラー
を出さないようになりました。
(monotone bug #30462の修正)
- ワイルドカード展開において波カッコペアが空のパターンを含む
"{,.foo}"、"{.foo,}"、"{.foo,,.bar}"のような場合でも正しく空の
パターンに展開されるようになりました。たとえばブランチパターン
"net.venge.monotone{,.*}"
は、期待通り"net.venge.monotone"と"net.venge.monotone.*"に展開
されるようになりました。(monotone bug #30655の修正)
- 0.48でパス指定をした'mtn log'で指定したパスが変更されていなくて
も親が変更されているリビジョンを表示するようになってしまってい
たのを修正しました。
- 'mtn trusted'が無駄にリビジョン一つを受け取っていたのをやめまし
た。そのかわり渡されたリビジョンが現在のデータベースに本当に存
在するかを検証します。
- 'mtn read'(と'mtn automate read_packets'も)が公開鍵と秘密鍵デー
タを通せるかもっとテストするようになり、不正なデータをみつけた
時には中止するようになりました。
- 'mtn conflicts store'をワークスペース外で実行した時に適切なエラー
メッセージを表示するようになりました。(monotone bug #30473の修
正)
- schemeの無いURIやauthorityが//で始まっていないURIを正しく解析で
きなかったのを修正しました。(monotone issue 94の修正)
長かったのでところどころ訳が怪しいよ。