55 self.limitSpinBox.setValue(self.vcs.getPlugin().getPreferences("LogLimit")) |
55 self.limitSpinBox.setValue(self.vcs.getPlugin().getPreferences("LogLimit")) |
56 self.stopCheckBox.setChecked(self.vcs.getPlugin().getPreferences("StopLogOnCopy")) |
56 self.stopCheckBox.setChecked(self.vcs.getPlugin().getPreferences("StopLogOnCopy")) |
57 |
57 |
58 self.__messageRole = Qt.UserRole |
58 self.__messageRole = Qt.UserRole |
59 self.__changesRole = Qt.UserRole + 1 |
59 self.__changesRole = Qt.UserRole + 1 |
|
60 self.__parentsRole = Qt.UserRole + 2 |
60 |
61 |
61 self.process = QProcess() |
62 self.process = QProcess() |
62 self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), |
63 self.connect(self.process, SIGNAL('finished(int, QProcess::ExitStatus)'), |
63 self.__procFinished) |
64 self.__procFinished) |
64 self.connect(self.process, SIGNAL('readyReadStandardOutput()'), |
65 self.connect(self.process, SIGNAL('readyReadStandardOutput()'), |
120 self.filesTree.sortItems(1, |
121 self.filesTree.sortItems(1, |
121 self.filesTree.header().sortIndicatorOrder()) |
122 self.filesTree.header().sortIndicatorOrder()) |
122 self.filesTree.sortItems(sortColumn, |
123 self.filesTree.sortItems(sortColumn, |
123 self.filesTree.header().sortIndicatorOrder()) |
124 self.filesTree.header().sortIndicatorOrder()) |
124 |
125 |
125 def __generateLogItem(self, author, date, message, revision, changedPaths): |
126 def __generateLogItem(self, author, date, message, revision, changedPaths, parents): |
126 """ |
127 """ |
127 Private method to generate a log tree entry. |
128 Private method to generate a log tree entry. |
128 |
129 |
129 @param author author info (string) |
130 @param author author info (string) |
130 @param date date info (string) |
131 @param date date info (string) |
131 @param message text of the log message (list of strings) |
132 @param message text of the log message (list of strings) |
132 @param revision revision info (string) |
133 @param revision revision info (string) |
133 @param changedPaths list of dictionary objects containing |
134 @param changedPaths list of dictionary objects containing |
134 info about the changed files/directories |
135 info about the changed files/directories |
|
136 @param parents list of parent revisions (list of integers) |
135 @return reference to the generated item (QTreeWidgetItem) |
137 @return reference to the generated item (QTreeWidgetItem) |
136 """ |
138 """ |
137 msg = [] |
139 msg = [] |
138 for line in message: |
140 for line in message: |
139 msg.append(line.strip()) |
141 msg.append(line.strip()) |
146 " ".join(msg), |
148 " ".join(msg), |
147 ]) |
149 ]) |
148 |
150 |
149 itm.setData(0, self.__messageRole, message) |
151 itm.setData(0, self.__messageRole, message) |
150 itm.setData(0, self.__changesRole, changedPaths) |
152 itm.setData(0, self.__changesRole, changedPaths) |
|
153 itm.setData(0, self.__parentsRole, parents) |
151 |
154 |
152 itm.setTextAlignment(0, Qt.AlignLeft) |
155 itm.setTextAlignment(0, Qt.AlignLeft) |
153 itm.setTextAlignment(1, Qt.AlignLeft) |
156 itm.setTextAlignment(1, Qt.AlignLeft) |
154 itm.setTextAlignment(2, Qt.AlignLeft) |
157 itm.setTextAlignment(2, Qt.AlignLeft) |
155 itm.setTextAlignment(3, Qt.AlignLeft) |
158 itm.setTextAlignment(3, Qt.AlignLeft) |
213 if not self.stopCheckBox.isChecked(): |
216 if not self.stopCheckBox.isChecked(): |
214 args.append('--follow') |
217 args.append('--follow') |
215 args.append('--template') |
218 args.append('--template') |
216 args.append("change|{rev}:{node|short}\n" |
219 args.append("change|{rev}:{node|short}\n" |
217 "user|{author}\n" |
220 "user|{author}\n" |
|
221 "parents|{parents}\n" |
218 "date|{date|isodate}\n" |
222 "date|{date|isodate}\n" |
219 "description|{desc}\n" |
223 "description|{desc}\n" |
220 "file_adds|{file_adds}\n" |
224 "file_adds|{file_adds}\n" |
221 "files_mods|{file_mods}\n" |
225 "files_mods|{file_mods}\n" |
222 "file_dels|{file_dels}\n" |
226 "file_dels|{file_dels}\n" |
308 value = s |
312 value = s |
309 if key == "change": |
313 if key == "change": |
310 log["revision"] = value.strip() |
314 log["revision"] = value.strip() |
311 elif key == "user": |
315 elif key == "user": |
312 log["author"] = value.strip() |
316 log["author"] = value.strip() |
|
317 elif key == "parents": |
|
318 log["parents"] = [int(x) for x in value.strip().split()] |
313 elif key == "date": |
319 elif key == "date": |
314 log["date"] = " ".join(value.strip().split()[:2]) |
320 log["date"] = " ".join(value.strip().split()[:2]) |
315 elif key == "description": |
321 elif key == "description": |
316 log["message"].append(value.strip()) |
322 log["message"].append(value.strip()) |
317 elif key == "file_adds": |
323 elif key == "file_adds": |
339 if value.strip(): |
345 if value.strip(): |
340 log["message"].append(value.strip()) |
346 log["message"].append(value.strip()) |
341 else: |
347 else: |
342 if len(log) > 1: |
348 if len(log) > 1: |
343 self.__generateLogItem(log["author"], log["date"], |
349 self.__generateLogItem(log["author"], log["date"], |
344 log["message"], log["revision"], changedPaths) |
350 log["message"], log["revision"], changedPaths, |
|
351 log["parents"]) |
345 dt = QDate.fromString(log["date"], Qt.ISODate) |
352 dt = QDate.fromString(log["date"], Qt.ISODate) |
346 if not self.__maxDate.isValid() and not self.__minDate.isValid(): |
353 if not self.__maxDate.isValid() and not self.__minDate.isValid(): |
347 self.__maxDate = dt |
354 self.__maxDate = dt |
348 self.__minDate = dt |
355 self.__minDate = dt |
349 else: |
356 else: |