2

私たちのビルド スクリプトでは、テンプレート化されたhg logコマンドを使用して、特定のビルドの変更リストを取得します。これはうまく機能しますが、残念ながら、サブリポジトリの変更は含まれていません (10 個以上あります)。それらも含めたいのですが、そのようなコマンドはないようです。

次のようなスクリプトを書くことを考えています。

  1. 開始リビジョンで .hgsubstate ファイルを列挙します
  2. サブリポジトリとその開始リビジョンを見つけます
  3. hg log彼らのために走る
  4. 結果をマージして日付順に並べ替えます。

他にもっと簡単な方法はありますか?多分私が行方不明のコマンドですか?

4

1 に答える 1

0

それは明らかにしばらくの todo にあり、そうでなければ利用できないので、私は自分で書きましたsubtools.py:

from __future__ import print_function
import hglib
import os
import sys

def get_substate(client, rev=None):
    substate_filename = os.path.join(client.root(), '.hgsubstate')
    if os.path.isfile(substate_filename):
        lines = client.cat([substate_filename], rev).split('\n')
        return { key : value for (value,key) in [ line.split() for line in lines if line ]}
    else:
        return {}


def substate_diff(client, revA, revB):
    substate_a = get_substate(client, revA)
    substate_b = get_substate(client, revB)
    key_union = set(substate_b) | set(substate_a)

    diff = {}
    for key in key_union:
       diff[key] = (substate_a[key], substate_b[key])

    return diff

def recursive_log(path, revA, revB):
    logtree = { 'logs': [], 'subrepos': {}}

    try:
        client = hglib.open(path)
    except:
        return logtree

    if revA == revB:
        print("no changes on {}".format(client.root()))
        return logtree

    print("Checking {} between {} and {}...".format(client.root(), revA, revB))

    for key, revisions in substate_diff(client, revA, revB).iteritems():
        if revisions[0] and revisions[1]:
            logtree['subrepos'][key] = recursive_log(os.path.join(client.root(),key), revisions[0], revisions[1])
        elif revisions[0] and not revisions[1]:
            print("removed subrepo with path: %s"%key, file=sys.stderr)
        elif revisions[1] and not revisions[2]:
            print("added subrepo with path: %s"%key, file=sys.stderr)

    logtree['logs'] = client.log("%s:%s"%(revA,revB))
    return logtree

次のように使用します。

In [15]: log = subtools.recursive_log('./', '947', '951')
于 2017-04-16T03:39:39.300 に答える