彷徨えるフジワラ

年がら年中さまよってます

Cygwin 併用時の CVS からの hg convert

Windows 上で CVS リポジトリから hg convert する場合、特に Cygwin 環境と併用しているようなケースでは、改行コード周りで色々混乱する可能性があります。

以下、CVS リポジトリから hg convert する際に、あらかじめ確認しておくべき事柄を列挙しておきます。

※ CVSNT の cvs コマンド併用時の hg convert における障害情報あり

hg convert 時に実行される cvs コマンドの確認

Cygwin 固有のパス設定が自動的に適用される可能性があるため、Cygwin の対話的シェル上での which cvscvs --version 等で特定される cvs コマンドは、hg convert 時に使用される cvs コマンドとは異なる場合があります。

そのため、hg convert で実行される cvs コマンドの確認は、以下の様に hg コマンド経由で行った方が良いでしょう。

$ hg --config alias.cvsversion='!cvs --version' cvsversion
続きを読む

2014 年を振り返る&2015 年の抱負

単に年間12回ある月末の1つではありますが、縁起物なので、今年一年を振り返ってみたりします。

Mercurial 関連活動

Mercurial 本体への貢献

2014年の一年間で Mercurial 本体に採用されたコミットは、総数280件(うち翻訳関係が16件)という成果でした。

2013年の成果が総数111件(うち翻訳関係が9件)で、年頭の目標が「コミット数ベースでは、月10件平均で総数120件」でしたから、今年は例年の成果&年頭目標に対して、大幅に上回る貢献ができました。しかも、コミット数ベースでの単純な順位付けなら、Pierre-Yves に次ぐ二位です!

(※ コミット数集計から「マージ実施リビジョン」を除外しました)

続きを読む

Mercurial に関するコミュニティ由来の成果(2014年版)

本エントリは、2014年の一年間に、ML/twitter/勉強会といったコミュニティから上がった情報/要望の中で:

  • Mercurial 本体に取り込まれた修正の契機になったもの
  • Mercurial 本体に取り込まれてはいないものの、何らかの成果に結びついたもの
  • 『今後の作業のネタ』(= バックログ)として認識されているもの

上記に該当するものを、情報提供への感謝の意味も込めて、列挙したものです。
『気になった点に関して、情報提供をする』だけでも、十分開発に貢献できる事の証拠とも言えます。
今後も、Mercurial に関して疑問/質問/要望等があれば、お気軽に情報をお寄せください > 利用者の皆様

情報をお寄せ頂く手段に関しては、"Mercurial で困った時に" をお読みください。
また、抽出が大変だったので本エントリでは列挙しませんでしたが、メッセージ翻訳に関する不具合報告/要望等も随時反映しておりますので、こちらに関してもお気軽にお知らせください&お知らせ頂いた皆様、ありがとうございました!

なお、以前のものは、以下から参照できます。

本体に取り込まれた修正(changed by 藤原)

以下に列挙するものは、コミュニティからの情報を元に私が提案した修正のうち、Mercurial 本体に取り込まれたものです。
なお、私の手による修正履歴一覧から、記憶を頼りに目視で抽出したものなので、『俺の情報を元にパッチ作成しておいて手柄を独り占めかよ!?』的なものに心当たりがある方は、お気軽に情報をお寄せください(笑)。

続きを読む

TokyoMercurial No.10

昨年末は、色々バタバタしてしまい、年が明けてからエントリを書いてます…… orz

TokyoMercurial No.10 に参加してきました。

運営の id:troter 氏ならびに参加者の皆様、お疲れ様でした。

作業目標&消化状況

今回の TokyoMercurial の個人的な目標は、以下の2件です。

  • 3.2.2 向けのメッセージ翻訳の実施
  • 積み残している TODO リストの消化

前者に関しては、更新された翻訳対象メッセージが少ないこともあって、比較的簡単に翻訳&反映は完了。

続きを読む

OpenSolaris 勉強会 2014.08

日本OpenSolarisユーザーグループ主催の Tokyo OpenSolaris 勉強会 2014.08 に参加してきました。

Solaris Internals 枠は、第11章「Kernel Memory」を読了することができました。

メモリアロケータの強力なデバッグ支援機能をガッチリ理解したので、どんなクラッシュダンプが来ても平気です(笑)。

Solaris Internals 枠は、次回から第12章 "Hardware Address Translation" に取り掛かります。

なお、今回は飛び入りでテープドライブな話も。

テンプレート関数 revset() の利用

上記ツイートを契機としたやり取りの過程で、Mercurial 3.0 からテンプレート定義中で revset() が使えるようになったのを、すっかり失念していたことに気付きました……orz

このまま放置すると、また忘れてしまいそうなので、何か実際的な処理で使って、しっかり記憶しておきたいところです。

何か良い題材はないかと考えたところ、先日公開したrevsets に関するエントリで例示している以下の処理が、まさに revset()ユースケースにピッタリなことを思い出しました。

BRANCH=foo

hg log -r "roots(branch($BRANCH))" --template "{rev}\n" |
while read root
do
    hg log -r "heads(descendantsin($root, branch($BRANCH)))" \
           --template "$root {rev}\n"
done |
while read start end
do
    hg diff -r "p1($start)" -r "$end"
done

なお、while ループ内での revsets 問い合わせが非常に複雑なので、簡略化のため以下の様なエイリアス descendantsin の定義を仮定しています。

[revsetalias]
descendantsin($1, $2) = (($1)::) and ($2) and not (((($1)::) and not ($2))::)

但し、エントリ執筆時点の最新版である Mercurial 3.1 では、revsetalias によるエイリアス定義は revset() の中で使用できません…… orz なので、例としてはエイリアス定義を使っていますが、実際の利用ではエイリアス定義を使わないようにしてください

(※ 2014-08-28 追記) 修正が取り込まれましたので、2014-11 にリリースされる 3.2 からは、revset() 中でもエイリアスが使えるようになります。

元の処理では、hg log を二段重ねにしていますが、テンプレート関数 revset を使うことで、これらを単一の hg log に集約することができます。

続きを読む

OpenSolaris 勉強会 2014.07

日本OpenSolarisユーザーグループ主催の Tokyo OpenSolaris 勉強会 2014.07 に参加してきました。

今回は、いつもの Solaris Internals 枠に加えて、「OpenSolarisを移植しよう 〜DEC Alphaの場合〜」と題して、林さんによる DEC Alpha プロセッサへの OpenSolaris 移植の状況報告がありました。

移植の裏話もさることながら、OpenSolaris におけるアドレス境界違反周りの対応に関する情報が、個人的には一番衝撃的な話でしたが、ソースコードの確認とか、実環境での検証とかがあるため、詳細は追って別エントリとして公開しようと思います。

っていうか、詳細を書こうと思っていたら、参加報告エントリの公開が、丸々一ヶ月程遅れてしまったので、とりあえず後回しにするだけなのですが……

Solaris Internals 枠は順調に進んでいて、この調子なら 2014.08 で "Chapter 11: Kernel Memory" は読了できそうな感じですね。

Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture

Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture