TortoiseHg钩与GUI

时间:2013-09-17 11:01:00

标签: python user-interface mercurial hook tortoisehg

我们正在尝试编写一个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插件不是一个完整的解决方案。

1 个答案:

答案 0 :(得分:0)

这项任务通常会在Tortoise产品中以不同方式处理,因为它们已经有一个已定义的问题跟踪器插件界面。这定义为here

从用户的角度来看,他们在提交窗口中获得一个新按钮,向他们提供可供选择的问题列表。然后,将相应的文本添加到提交消息中。

Jira有两个乌龟问题跟踪器插件:12

我知道他们说他们是TortoiseSvn插件,但他们也应该为TortoiseHg工作 - 我们使用TurtleMine没有问题。