Ian Lewis
Ian Lewis is a web developer living in Tokyo Japan. His current interests are in Django, python, alternative databases and rapid web application development. About Me...
  • mercurial .hgrc include

    僕は 僕のシェル環境設定ファイル をbitbucket で管理している。 新しいサーバーで作業する時にこのレポジトリからクローンして、ファイルを設定するけど、ローカル環境のみの設定が必要な場合が多い。今まで、bashrc等のスクリプトの中でローカル設定ファイルがあれば、sourceして、適用したんですけど、 mercurial の hgrc はそういうのができなかった。

    と思ったら、 mercurial 1.3 からできるらしい です。下のコードを hgrc に入れると include ができる。超便利

    %include .hgrc.local
    

    ファイルの場所は include したファイルの場所からの相対パス

    でも、このファイルな存在しなければ、エラーが出るので、 touch ~/.hgrc.local を一回やらないとうるさい。

    Send feedback   このエントリーを含むはてなブックマーク はてなブックマーク - mercurial .hgrc include
  • mercurialで、インメモリで、勝手チェンジセットをコミットする方法

    mercurial はpythonで書かれて、わかりやすいAPIを用意しているので、触りたいと思って、インメモリでコミットをしようとするとどうすればいいかというのを調べてみた。

    mercurialは、リポジトリオブジェクト(localrepository)があって、そのしたに、チェンジコンテキスト(changectx)がって、その下に、ファイルコンテキスト(filectx)があると言う仕組みになる。触るのが意外と簡単です。

    普段のmercurialはディスクにあるファイルの処理をするんですけども、インメモリの処理をするために、memctxと、memfilectx のインメモリチェンジコンテキストとファイルコンテキストが用意してあります。

    勝手コミットをするとこうなります。

    それで、hg update たたくと、新しいファイルができました。

    $ hg update
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved

    ファイルの更新は同じく新しいファイルの内容を渡せば、勝手にdiffしてくれます。

    Send feedback   このエントリーを含むはてなブックマーク はてなブックマーク - mercurialで、インメモリで、勝手チェンジセットをコミットする方法
  • 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:1c3134ca4a95 (closed)
    

    修正後に、hg branchesを叩くと、綺麗にでる。

    ian@laptop:~/src/prj$ hg branches
    default                     1662:1fa310d3052a
    hoge                        1661:62d737e7146e
    
    Send feedback   このエントリーを含むはてなブックマーク はてなブックマーク - mercurial でアクティブなブランチのみを表示する方法
  • 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
    $ echo '#!/bin/sh' > foomirror/hooks/pre-revprop-change   # make insecure dummy hook
    $ chmod +x foomirror/hooks/pre-revprop-change
    $ svnsync init --username svnsync file://`pwd`/foomirror https://foo.svn.sourceforge.net/svnroot/foo
    Copied properties for revision 0.
    $ svnsync sync file://`pwd`/foomirror
    Committed revision 1.
    Copied properties for revision 1.
    Committed revision 2.
    Copied properties for revision 2.
    ...
    

    ローカルのsvn リポジトリが出来上がったら、それに対して、hg convert を実行することができる。これはまさに早い。

    $ hg convert foomirror   # convert directly from repo mirror to foomirror-hg
    ...
    
    Send feedback   このエントリーを含むはてなブックマーク はてなブックマーク - svn リポジトリをmercurialに変換
  • Mercurial MQ

    最近 mercurial の mq エクステンションを試しに使ってる。mercurialのリビジョンをコミットする前に、変更を管理したい、もしくは、途中で他の作業をやらないといけないので、今の変更をどっかに置かないといけない場合に便利なエクステンションです。

    mq は標準に入っているので、インストールしなくてもいいだが、エクステンションを.hgrcで有効しないと。

    [extensions]
    mq =
    

    それで、コマンドを巡回する。パッチキューを初期化する。

    hg qinit
    

    新しいパッチを作る。これは変更がない状態で実行しないといけないので、ちょっと面倒くさい。

    hg qnew
    

    もし、qnewを忘れた場合、変更を置かないと。これは面倒くさい。もし、もっといい方法があれば、教えてください。たまに、windows のeol と unix の eol が両方 my.diff に入ってしまって、patch がちゃんと適用することが出来ない場合がある。ご注意

    hg diff -U > my.diff
    hg revert --all
    hg qnew mypatch
    patch -p1 < my.diff
    

    Update: -f で現在の変更を含めて新しいパッチを作れる。上の処理を下のコマンドで同じことができる。

    hg qnew -f mypatch
    

    ここで、変更を行って、patch を更新するコマンドはqrefresh. これを実行するのと、hg statusを実行すると何もでない。パッチの内容も hg view で見れる。

    hg qrefresh
    

    コミットするときの、コミットメッセージは分かりにくいだが、 qrefresh で指定する。

    hg qrefresh -e
    

    一回指定すれば、コミットするときに、書いたメッセージを使う。

    パッチを置かないといけない場合は、qpop を使う。

    hg qpop mypatch
    

    もしくは、

    hg qpop -a
    

    パッチをまた適用する qpush

    hg qpush mypatch
    

    もしくは、

    hg qpush -a
    

    パッチをリポジトリにコミットする場合は、qfinish

    hg qfinish mypatch
    

    もしくは、全てをコミット

    hg qfinish qbase:qtip
    
    Send feedback   このエントリーを含むはてなブックマーク はてなブックマーク - Mercurial MQ