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...
  • 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