3

Mercurial Python API を特定の範囲内にある変更セットのみで使用したいのですが、docsを読んでも方法がわかりません。

私のコードは次のようになります。

from mercurial import ui, hg
import datetime

repo = hg.repository(ui.ui(), 'path_to_repo' )

start_date = datetime.datetime( 1997,  01, 01 )
end_date   = datetime.datetime( 2000,  12, 31 )

# Print every changesetid in required range
for changesetid in repo:
    #print repo[changesetid]
    changeset = repo.changectx( changesetid )
    date = changeset.date()[0]
    if ( date > start_date and date < end_date):
        # Do stuff...
        pass

そして、私が得る出力は次のとおりです。

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    if ( date > start_date and date < end_date):
TypeError: can't compare datetime.datetime to float

出力日付の例は次のとおりです。

  • 645630248.0
  • 887802818.0

'hg help days'も見たことがありますが、ここから日/月/年の日付を Mercurial の内部表現に変換する方法がわかりません。

締め切り日を、changectx.date() によって返される日付値と比較するのに適した数値形式に変換するにはどうすればよいですか?


PS この些細な例については、 hg コマンドを直接使用してこれを行うより良い方法があることを知っています...サンプルコードに含めていないのは、「実行」ポイントで追加したい複雑な手順です!

4

2 に答える 2

1

python_internal_date()最終的に機能するようになり、機能を以下のヘルパー関数に入れました。

from mercurial import ui, hg
import datetime, time

repo = hg.repository(ui.ui(), 'path_to_repo' )

def python_internal_date( year, month, day ):
    # From http://stackoverflow.com/a/7852891/104370
    start_date = datetime.datetime( year,  month, day )
    return time.mktime( start_date.timetuple() )

start_date = python_internal_date( 1997, 01, 01 )
end_date   = python_internal_date( 2000, 12, 31 )

# Print every changesetid in required range
for changesetid in repo:
    #print repo[changesetid]
    changeset = repo.changectx( changesetid )
    date = changeset.date()[0]
    if ( date > start_date and date < end_date):
        # Do stuff...
        pass
于 2014-02-14T16:38:48.627 に答える