1

これは私が知っているよくある質問ですが、次のレベルに進みたいです。バンドルの使用方法は知っていますが、「hg ログ」を掘り下げて最後の変更を確認する必要があるのはちょっと退屈なので、自動化して、bash/awk でログを確認し、日付とメールで職場/自宅の変更を特定します (.hgrc、me@work、me@home に異なるメールがあります)。

私はすでにこの bash 関数を持っていますが、ベース リビジョンを手動で渡す必要があります。

hgb () {
    hg bundle --base $1 ~/changes-`date +%Y-%m-%d-%H-%M`.hg
}

だから私は次のようなものが欲しい:

mkwbundle #make work bundle for home

と:

mkhbundle #make home bundle for work

私はawk/sedを始めたばかりですが、奇跡を見てきました.Pythonでそれを行う前に、私はほとんど何でも頼りにするツールです。

アップデート:

水銀にとらわれない人々にとって、これは hg log がどのように見えるかです:

changeset:   28:f5200232460e
tag:         tip
user:        Manuel@home
date:        Tue Jan 15 23:39:57 2013 -0500
summary:     Adding DevTodo

changeset:   27:828dbba6830a
user:        Manuel@home
date:        Tue Jan 15 23:24:57 2013 -0500
summary:     login twig

changeset:   26:781477f86f6f
user:        Manuel@home
date:        Tue Jan 15 00:18:54 2013 -0500
summary:     UI mockup

changeset:   25:0c9365b200a8
user:        Manuel@home
date:        Mon Jan 14 23:50:22 2013 -0500
summary:     using twig blocks, remember reuse parent

changeset:   24:a1abfcfcefed
user:        Manuel@work
date:        Mon Jan 14 23:49:44 2013 -0500
summary:     smaller footer

changeset:   23:3cd12b7fb684
user:        Manuel@work
date:        Mon Jan 14 23:20:18 2013 -0500
summary:     test content width

バンドルを作成するために作業中にベース リビジョンを取得したいとします。自宅でリビジョン 24 で作業を開始し、4 つの変更を行ったとします。その後、28 になりました。ベース リビジョンとして 24 を取得してバンドルを作成したいとします。それから仕事でも同じです。

編集: 以下の @dhunter コメントごとに、スクリプトの予想される出力は次のようになります。

24
4

2 に答える 2

3

私の理解では、hgb() $1 の rev No# を取得したいということです。

それでは例を作ってみましょう。仕事で実行する場合hg log

**(some information were omitted)**

changeset: xxx
user:me@work

changeset: xxx
user:someoneelse@work.com

changeset: xxx
user:me@work

changeset: 777:234asdf2342
user:me@work

changeset: xxx-border-xxx
user:me@home

changeset: xxxx
user:me@home

それからあなたがしたいかもしれません777。これは、ヒントme@home->@workから、ユーザーをチェックし、上記の例から、またはme@work -> me@home上記の例のいずれかでユーザーが変更されたチェンジセットを見つけたことを意味しますchangeset xxx-border-xxx。次に、前の変更セットのリビジョンを取得します。そのリビジョンから、バンドルを作成し、自宅/職場のレポにインポートします。私はあなたを正しく理解したと思います。ただし、質問を明確にする必要があります。

とにかく....もちろん、awkで実行できます。上記の例を見てください(ブランチ、日付、要約は省略されています)

hg log| awk -vRS="" 'NR==1{p=$0~/me@work/?"me@work":"me@home";l=$2}NR>1 {if($0!~p){print l;exit}else l=$2}'

上記の例を使用する場合:

出力は次のとおりです。

777:234asdf2342

あなたの質問の例を試してみると、メール アドレスを変更する必要があり、awk-oneliner は次のようになります。

hg log| awk -vRS="" 'NR==1{p=$0~/Manuel@work/?"Manuel@work":"Manuel@home";l=$2}NR>1 {if($0!~p){print l;exit}else l=$2}'

出力は次のとおりです。

25:0c9365b200a8

私は hg をよく使用しますが、バンドルはしません。あなたが本当に24回転を得るつもりなら。あなたの --base については、これを見てください:

 awk -vRS="" 'NR==1{p=$0~/Manuel@work/?"Manuel@work":"Manuel@home";}NR>1{if($0!~p){print $2;exit}}'

これにより、次のことが得られます。

24:a1abfcfcefed

ノート

最後の unbundle 以降、変更セット ci がまったくない場合は、awk 行でバンドルを生成しないでください。最後のバンドルの生成を繰り返します。変更されたかどうかを知る必要がありますよね?

于 2013-01-17T14:45:02.550 に答える
2

hg bundle --base REVコマンドのタイプのリビジョン バージョン

使用: revsets、revsets エイリアス

口頭でのタスク: 最新の変更セットを見つけ、その後、別の作成者によって継続的に作成された変更セットを、求められている変更セットよりもヒントにします。

解決策:

反復 1

max(user('work'))変更セットを含むバンドルの場合、仕事に転送することを目的としています(最後の「仕事」の後はすべて宿題です)

max(user('home'))変更セットを含むバンドルの場合、自宅に転送することを目的としています(最新の「自宅」の後のすべては職場の仕事です)

反復 2

圧縮と美化: 私はタイピングが多すぎるのが面倒です。Bundleable() 関数名は ba() に短縮され、ホームおよびワーク リポジトリの Mercurial 構成ファイルの「revsetalias」セクションに追加されました

 [revsetalias]
 ba('$1') = max(user('$1'))

($1 の代わりに '$1' を使用するのは、パラメーター - シグナル文字列 - の前後に '' を手動で記述しないためです)

結果

hg bundle --base "ba(home)"またhg bundle --base "ba(work)"

ホーム|ワークは、バンドルを準備する必要がある目的地を定義します

于 2013-01-17T19:19:16.657 に答える