コマンドラインと TortoiseHg の両方で動作する Mercurial pre-commit フックを作成しようとしています。
フックのアイデアは、JIRA に接続して、開発者に割り当てられたアクティビティのリストを取得し、開発者がアクティビティを選択できるリストにアクティビティを表示することです。JIRA ID と概要がコミット コメントに追加されます。
これで、ほとんどの機能の基本的な部分がわかりましたが、リストを表示する方法がありません。入力フィールドとボタン (PyQt4 を使用) を備えた基本的な QtWidget を表示しようとしました。ウィンドウが表示されるコマンド ラインを使用して、テキストを入力し、ボタンを押してテキストを印刷します (または ui.status で送信します)。 )。
TortoiseHg (バージョン 2.7.1) ではうまく動作しません。フックが起動し、ウィンドウが開きますが、制御が適切に渡されていないように見えます。新しいウィンドウの入力フィールドはアクティブになりません。テキストを入力しても表示されませんが、ボタンをクリックすると内容が ui.status に出力されます。さらに問題なのは、TortoiseHg がグラフィックスの更新を停止することです。そのため、ウィンドウを閉じると、TortoiseHg ウィンドウに空白のスポットができ、THG は入力に応答しません。プロセス エクスプローラーを使用して停止する必要があります。
TortoiseHg で操作できるウィンドウを開くフックの書き方に関するヒントはありますか?
フックの定義:
pre-commit = python:e:\repos\SCM-TOOLS\hg-hooks\user.py:hook
Python コード:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class AppForm(QMainWindow):
def __init__(self, ui, parent=None):
QMainWindow.__init__(self, parent)
self.u = ui
self.create_main_frame()
def create_main_frame(self):
page = QWidget()
self.button = QPushButton('Test', page)
self.edit1 = QLineEdit()
vbox1 = QVBoxLayout()
vbox1.addWidget(self.edit1)
vbox1.addWidget(self.button)
page.setLayout(vbox1)
self.setCentralWidget(page)
self.connect(self.button, SIGNAL("clicked()"), self.clicked)
def clicked(self):
self.u.status (str(self.edit1.text()))
def hook(ui, repo, **kwargs):
app = QApplication(sys.argv)
form = AppForm(ui)
form.show()
app.exec_()
sys.exit(1)
編集: TortoiseHg およびコマンドラインからのこの動作に加えて、Eclipse および IntelliJ でも動作する必要があるため、提案された TortoiseHg プラグインは完全なソリューションではありません。