我们正在尝试编写一个mercurial预提交钩子,它应该同时适用于命令行和TortoiseHg。
钩子的想法是连接到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插件不是一个完整的解决方案。