hg out
の不満点Git より Mercurial のほうが好きだけど、 Git のほうが勝っていると
感じる点は、この git status
の出力。
% git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
この出力を見れば、 push する必要があるかどうか一目瞭然で素晴らしい。 しかもこれ、今まで何を push したかローカルリポジトリが覚えているらしく、 origin/master にアクセスせずにこの出力を返してくれる。
Mercurial で同じ事をするには hg out
を使うんだけど、これは
行き先のリポジトリにアクセスしているっぽいので非常にまたされる。
確かにそのほうが正確な結果が分かるかもしれないけど、てっとり
早く答えが知りたいときもあるじゃん!! という訳で書いた。
tkf / hgcachedoutgoing / overview — Bitbucket
から
cout.py
をダウンロードして、
[extensions]
cout = /path/to/cout.py
を ~/.hgrc
に追加すると使えるはず。
適当なリポジトリに行って
hg cout
と打つと、 push しなければいけない change set があるかどうか教えてくれる。
デフォルトの path がどこかのリモートマシーンの場合、一度目はそこにアクセス
するので遅いけど、二度目からはキャッシュを使うので、一瞬で結果が出るはず。
hg push
する度にキャッシュを更新する hook を勝手に加える仕様なので、
一人で使うようのリポジトリとかだとほぼ hg out
の代わりに使えるんじゃないで
しょうか。
初めての Mercurial 拡張なのと、リポジトリを見れば分かるけどテストが 皆無なのでバグが結構あるはず。
参考:
以下のコードを適当な名前で保存して Mercurial リポジトリ内で実行すると、 Mercurial をハックするのに必要なモジュールをインポートしつつ、 Mercurial リポジトリのインスタンス(コマンド関数に与えられる引数) もロードしてくれた状態で ipython が始まるのですこぶる便利。
Mercurialに限らず、スクリプトから ipython を実行するのっていろいろと応用 ききそう。
import IPython
def get_ns(path='.'):
import mercurial.hg as hg
import mercurial.ui
ui = mercurial.ui.ui()
repo = hg.repository(ui, path=path)
return {
'hg': hg,
'ui': ui,
'repo': repo,
}
embedshell = IPython.Shell.IPShellEmbed()
embedshell(local_ns=get_ns())
参考: How to embed an IPython shell in your application | Oh Brave New World!