あまり表に出てこない機能なんでしょうが、 revsetsは mercurial の超便利機能の一つです。一言にいうと mercurial revsets はチェンジセットをクエリー・セレクトする為のDSL (ドメイン固有言語)です。 log 情報を探したり、diffデータを生成したりするのにすごく便利です。
Mercurial revsets の紹介
mercurial .hgrc include
僕は 僕のシェル環境設定ファイル をbitbucket で管理している。 新しいサーバーで作業する時にこのレポジトリからクローンして、ファイルを設定するけど 、ローカル環境のみの設定が必要な場合が多い。今まで、bashrc等のスクリプトの中でローカル設定ファイルがあれば、sourceして、適用したんですけど、 mercurial の hgrc はそういうのができなかった。 と思ったら、 mercurial 1.3 からできるらしい です。下のコードを hgrc に入れると include ができる。超便利 %include .hgrc.local ファイルの場所は include したファイルの場所からの相対パス でも、このファイルな存在しなければ、エラーが出るので、 `touch ~/.hgrc.local` を一回やらないとうるさい。
mercurialで、インメモリで、勝手チェンジセットをコミットする方法
mercurial はpythonで書かれて、わかりやすいAPIを用意しているので、触りたいと思って、インメモリでコミットをしようとするとどうすればいいかというのを調べてみた。 mercurialは、リポジトリオブジェクト(localrepository)があって、そのしたに、チェンジコンテキスト(changectx)がって、その下 に、ファイルコンテキスト(filectx)があると言う仕組みになる。触るのが意外と簡単です。 普段のmercurialはディスクにあるファイルの処理をするんですけども、インメモリの処理をするために、memctxと、memfilectx のインメモリチェンジコンテキストとファイルコンテキストが用意してあります。 勝手コミットをするとこうなります。 それで、hg update たたくと、新しいファイルができました。 $ hg [...]
mercurial でアクティブなブランチのみを表示する方法
merucurial の hg branchesっていうコマンドを打つと、inactiveブランチが普段に出てうるさいので、表示しないようにしてみた。これを .hgrc に追加した [alias] branches = branches -a 普通は、この表示になる ian@laptop:~/src/prj$ hg branches default 1662:1fa310d3052a hoge 1661:62d737e7146e hoge_inactive 1623:ba27ba59a257 (inactive) hoge_closed 670:[...]
svn リポジトリをmercurialに変換
最近、svn・gitのリポジトリをmercurialにして、bitbucketに載せるのが多い。難しいか面倒だろうと思う人がいるかもしれないけど、現実は hg convert というコマンドを使うとすごく簡単です。hg convert は mercurial convert extension のコマンドです。convert は標準にインストールされているはずなので、以下を .hgrc に追加すると、簡単に使えます。 [extensions] hgext.convert= convert でリポジトリを変換するのが簡単ですけど、http で実行するのがすごく遅いので、svn リポジトリを変換するなら、 svnsync を使ってロカールに落とすほうが早い。 $ svnadmin create foomirror $[...]
Mercurial MQ
最近 mercurial の mq エクステンションを試しに使ってる。mercurialのリビジョンをコミットする前に、変更を管理したい、もしくは、途中で他 の作業をやらないといけないので、今の変更をどっかに置かないといけない場合に便利なエクステンションです。 mq は標準に入っているので、インストールしなくてもいいだが、エクステンションを.hgrcで有効しないと。 [extensions] mq = それで、コマンドを巡回する。パッチキューを初期化する。 hg qinit 新しいパッチを作る。これは変更がない状態で実行しないといけないので、ちょっと面倒くさい。 hg qnew もし、qnewを忘れた場合、変更を置かないと。これは面倒くさい。もし、もっといい方法があれば、教え[...]
