我们正在尝试编写一个可变的预提交钩子,它应该与命令行和 TortoiseHg 一起使用。
钩子的想法是连接到 JIRA 并获取分配给开发人员的活动列表,并在列表中显示活动,开发人员可以从中选择一个。然后将 JIRA ID 和摘要放在提交注释中。
现在,我们已经弄清楚了大部分功能的基本部分,但是缺少一种显示列表的方法。我们尝试显示带有输入字段和按钮的基本 QtWidget(使用 PyQt4),并使用命令行窗口出现,我们可以输入文本并按下按钮打印文本(或使用 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 插件不是一个完整的解决方案。