【发布时间】:2013-09-17 11:00:59
【问题描述】:
我们正在尝试编写一个可变的预提交钩子,它应该适用于命令行和 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 插件不是一个完整的解决方案。
【问题讨论】:
标签: python user-interface mercurial hook tortoisehg