3 import sys
, math
, random
, qt
, os
, re
5 qconnect
= qt
.QObject
.connect
7 #class MyListBoxItem(qt.QListBoxItem):
8 # def __init__(self, listbox = None):
9 # qt.QListBoxItem.__init__(self, listbox)
10 # self.setSelectable(false)
14 class MainWidget(qt
.QMainWindow
):
15 def __init__(self
, parent
=None, name
=None):
16 qt
.QMainWindow
.__init
__(self
, parent
, name
)
21 fW
.setSelectionMode(qt
.QListBox
.Multi
)
23 text
= qt
.QTextEdit(l
)
24 text
.setTextFormat(qt
.QTextEdit
.PlainText
)
26 self
.setCentralWidget(l
)
27 self
.setCaption('Main Window')
29 self
.newSelLambda
= lambda i
: self
.newSelection(i
)
30 qconnect(fW
, qt
.SIGNAL("highlighted(int)"), self
.newSelLambda
)
32 ops
= qt
.QPopupMenu(self
)
33 ops
.insertItem("Commit", self
.commit
)
34 ops
.insertItem("Refresh", self
.refreshFiles
)
37 m
.insertItem("&Operations", ops
)
39 self
.diffNew
= qt
.QColor(0, 150, 0)
40 self
.diffRemove
= qt
.QColor(200, 0, 0)
41 self
.diffHead
= qt
.QColor(200, 0, 200)
42 self
.diffStd
= qt
.QColor(0, 0, 0)
48 def newSelection(self
, index
):
50 self
.files
[0].patch
= self
.text
.text()
53 self
.text
.setText(self
.files
[index
].patch
)
55 self
.setColorPatch(self
.files
[index
].patch
)
59 def setColorPatch(self
, patch
):
62 for l
in patch
.split('\n'):
68 if c
== '+': t
.setColor(self
.diffNew
)
69 elif c
== '-': t
.setColor(self
.diffRemove
)
70 elif c
== '@': t
.setColor(self
.diffHead
)
71 else: t
.setColor(self
.diffStd
)
76 self
.files
[0].patch
= self
.text
.text()
78 selFiles
= [x
for x
in range(1, len(self
.files
)) if self
.filesW
.isSelected(x
)]
79 print "selFiles: " + str(selFiles
) + "\n"
80 fileStr
= ' '.join([self
.files
[x
].name
for x
in selFiles
])
81 print "Files: " + fileStr
+ "\n"
82 commitMsg
= str(self
.files
[0].patch
)
83 print "Message: " + commitMsg
+ "\n"
84 fout
= os
.popen('citool-commit ' + fileStr
, 'w')
89 def setFiles(self
, files
):
92 f
.name
= "Commit message"
97 self
.filesW
.insertStrList([x
.name
for x
in self
.files
])
99 self
.filesW
.setCurrentItem(0)
100 self
.filesW
.item(0).setSelectable(False)
102 def refreshFiles(self
, ignored
=None):
110 fin
= os
.popen('git-diff-cache -M --cached HEAD', 'r')
111 r
= re
.compile(':([0-9]+) ([0-9]+) ([0-9a-f]{40}) ([0-9a-f]{40}) ([MCRNDUT][0-9]*)\t([^\t]+)(?:\t([^\t]+))?\n')
117 print "Unknown output from git-diff-cache!: " + l
+ "\n"
122 f
.change
= m
.group(5)
123 if f
.change
[0] == 'C' or f
.change
[0] == 'R':
124 f
.oldName
= m
.group(6)
125 f
.newName
= m
.group(7)
126 f
.name
= "Rename from " + f
.oldName
+ " to " + f
.newName
127 f
.patch
= getPatch(f
.name
, f
.newName
)
129 f
.patch
= getPatch(f
.name
)
134 def getPatch(file, otherFile
= None):
135 # FIXME Use the popen2 module instead
137 f
= file + ' ' + otherFile
140 fin
= os
.popen('git-diff-cache -p -M --cached HEAD ' + f
, 'r')
146 app
= qt
.QApplication(sys
.argv
)
148 app
.setMainWidget(mw
)
151 mw
.setGeometry(100, 100, 500, 600)
153 sys
.exit(app
.exec_loop())