1

「犬を殺さないようにコードをハックする (TODO: 代わりに子猫を追いかけないように、これを適切に修正する)」のようなコミット メッセージに応答して、trac チケットを作成する (更新しない) 方法を探しています。

Trac システムが "TODO" キーワードに反応し、コミット メッセージの内容、所有者がコミッターに設定され、開始コミットが既に参照されているチケットを作成するようにします。

SO を検索しているときに、基本的に自分のソリューションを展開する方法を示す、1 つのコミットでトラック チケットをオープンおよびクローズすることを見つけました。事前に作成されたものが利用できない場合、私はこれを行います。それで - ありますか?

4

2 に答える 2

6

Python の公式 Trac パッケージを参照することをお勧めします: http://pypi.python.org/pypi/Trac/0.11.4および docs http://www.edgewall.org/docs/tags-trac-0.11.7 /epydoc/trac-module.html

これは、Python スクリプトから Trac でチケットを作成するために使用するもので、使い方はかなり簡単だと思います。この python スクリプトは、VCS のポスト コミット フックとして実行できます。

プロジェクト設定を使用して trac 環境を起動し、新しいチケットを作成して保存できます。おそらくあなたにはもう少し多くのことがありますが、これはあなたに良いアイデアを与えるはずです:

from trac.env import Environment
from trac.ticket import Ticket

env = Environment(projectSettings, create=0)
tkt = Ticket(env)
tkt['summary'] = 'first line of commit message'
tkt['description'] = 'full commit message'
tkt.save_changes(commitAuthor, '')
于 2012-05-18T08:30:08.183 に答える
4

言うまでもなく、現在の Trac の安定版は 0.12.3 ですが、もちろん開発は現在のバージョンで行う必要があります。(あなたは質問で教えてくれませんでした。)

あなたの質問には、 Trac コアのCommitTicketUpdaterの上にさまざまな機能を実装する方法に関するヒントがあります。組み込みアクションとして update と close があるため、次のように変更する必要があります (現在の Tracに基づく):trunk

  • 変更セットを参照して新しいチケットを作成するコマンドの追加オプションcommands_create、スペース区切りのリストとして作成します
  • クラス全体の変数を代入の前後self.commentの両方に追加するchangeset_addedchangeset_modifiedcomment
  • cmd_create( untested )のようなモジュールを追加します

    def cmd_create(self, ticket, changeset, perm):
        if not self.check_perms or 'TICKET_CREATE' in perm:
            # Commit messages in general is used for a ticket comment.
            # New tickets require summary and we'll want description too,
            # because comment is ignored on ticket creation.
            # So we need to do message processing here beforehand.
            ticket['comment'] = None
            ticket['description'] = self.comment
            ticket['owner'] = changeset.author
            ticket['status'] = 'new'
            ticket['summary'] = ' '.join(['TODO from', str(changeset.rev)])
            ticket.insert()
    
  • 正規表現がデフォルトの関数とチケットのペアだけでなく、単項「TODO:」にも一致するように変更ticket_commandします (申し訳ありませんが、これをすぐに機能させることはできません)。

  • private モジュール_parse_messageを拡張して、前に別のケースを含めるif func:

       if cmd.startswith('TODO'):
           tickets.update({None : ['create']})
           continue
    
  • _update_tickets新しいチケットにコメントを追加する必要がないため、条件付きでコメントを保存するように変更してください)

       if ticket['comment']:
           ticket.save_changes(changeset.author, comment, date, db)
    

このアプローチを試してみたい場合は、必要に応じて質問してください。

于 2012-05-19T14:33:16.930 に答える