62 |
62 |
63 self.__urlRole = Qt.UserRole |
63 self.__urlRole = Qt.UserRole |
64 self.__ignoreExpand = False |
64 self.__ignoreExpand = False |
65 self.intercept = False |
65 self.intercept = False |
66 |
66 |
67 self.__rx_dir = \ |
67 self.__rx_dir = QRegExp( |
68 QRegExp(r"""\s*([0-9]+)\s+(\w+)\s+((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)\s*""") |
68 r"""\s*([0-9]+)\s+(\w+)\s+""" |
69 self.__rx_file = \ |
69 r"""((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)\s*""") |
70 QRegExp(r"""\s*([0-9]+)\s+(\w+)\s+([0-9]+)\s((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)\s*""") |
70 self.__rx_file = QRegExp( |
|
71 r"""\s*([0-9]+)\s+(\w+)\s+([0-9]+)\s""" |
|
72 r"""((?:\w+\s+\d+|[0-9.]+\s+\w+)\s+[0-9:]+)\s+(.+)\s*""") |
71 |
73 |
72 def closeEvent(self, e): |
74 def closeEvent(self, e): |
73 """ |
75 """ |
74 Private slot implementing a close event handler. |
76 Private slot implementing a close event handler. |
75 |
77 |
96 """ |
98 """ |
97 self.repoTree.header().resizeSections(QHeaderView.ResizeToContents) |
99 self.repoTree.header().resizeSections(QHeaderView.ResizeToContents) |
98 self.repoTree.header().setStretchLastSection(True) |
100 self.repoTree.header().setStretchLastSection(True) |
99 |
101 |
100 def __generateItem(self, repopath, revision, author, size, date, |
102 def __generateItem(self, repopath, revision, author, size, date, |
101 nodekind, url): |
103 nodekind, url): |
102 """ |
104 """ |
103 Private method to generate a tree item in the repository tree. |
105 Private method to generate a tree item in the repository tree. |
104 |
106 |
105 @param parent parent of the item to be created (QTreeWidget or QTreeWidgetItem) |
|
106 @param repopath path of the item (string) |
107 @param repopath path of the item (string) |
107 @param revision revision info (string) |
108 @param revision revision info (string) |
108 @param author author info (string) |
109 @param author author info (string) |
109 @param size size info (string) |
110 @param size size info (string) |
110 @param date date info (string) |
111 @param date date info (string) |
168 procStarted = process.waitForStarted(5000) |
169 procStarted = process.waitForStarted(5000) |
169 if procStarted: |
170 if procStarted: |
170 finished = process.waitForFinished(30000) |
171 finished = process.waitForFinished(30000) |
171 if finished: |
172 if finished: |
172 if process.exitCode() == 0: |
173 if process.exitCode() == 0: |
173 output = str(process.readAllStandardOutput(), ioEncoding, 'replace') |
174 output = str(process.readAllStandardOutput(), ioEncoding, |
|
175 'replace') |
174 for line in output.splitlines(): |
176 for line in output.splitlines(): |
175 line = line.strip() |
177 line = line.strip() |
176 if line.startswith('<root>'): |
178 if line.startswith('<root>'): |
177 repoRoot = line.replace('<root>', '').replace('</root>', '') |
179 repoRoot = line.replace('<root>', '')\ |
|
180 .replace('</root>', '') |
178 break |
181 break |
179 else: |
182 else: |
180 error = str(process.readAllStandardError(), |
183 error = str(process.readAllStandardError(), |
181 Preferences.getSystem("IOEncoding"), |
184 Preferences.getSystem("IOEncoding"), |
182 'replace') |
185 'replace') |
214 repoRoot = self.__repoRoot(url) |
217 repoRoot = self.__repoRoot(url) |
215 if repoRoot is None: |
218 if repoRoot is None: |
216 self.__finish() |
219 self.__finish() |
217 return |
220 return |
218 self.__ignoreExpand = True |
221 self.__ignoreExpand = True |
219 itm = self.__generateItem(repoRoot, "", "", "", "", "dir", repoRoot) |
222 itm = self.__generateItem( |
|
223 repoRoot, "", "", "", "", "dir", repoRoot) |
220 itm.setExpanded(True) |
224 itm.setExpanded(True) |
221 self.parentItem = itm |
225 self.parentItem = itm |
222 urlPart = repoRoot |
226 urlPart = repoRoot |
223 for element in url.replace(repoRoot, "").split("/"): |
227 for element in url.replace(repoRoot, "").split("/"): |
224 if element: |
228 if element: |
225 urlPart = "{0}/{1}".format(urlPart, element) |
229 urlPart = "{0}/{1}".format(urlPart, element) |
226 itm = self.__generateItem(element, "", "", "", "", "dir", urlPart) |
230 itm = self.__generateItem( |
|
231 element, "", "", "", "", "dir", urlPart) |
227 itm.setExpanded(True) |
232 itm.setExpanded(True) |
228 self.parentItem = itm |
233 self.parentItem = itm |
229 itm.setExpanded(False) |
234 itm.setExpanded(False) |
230 self.__ignoreExpand = False |
235 self.__ignoreExpand = False |
231 self.__finish() |
236 self.__finish() |
348 else: |
353 else: |
349 return "" |
354 return "" |
350 |
355 |
351 def __finish(self): |
356 def __finish(self): |
352 """ |
357 """ |
353 Private slot called when the process finished or the user pressed the button. |
358 Private slot called when the process finished or the user pressed the |
|
359 button. |
354 """ |
360 """ |
355 if self.process is not None and \ |
361 if self.process is not None and \ |
356 self.process.state() != QProcess.NotRunning: |
362 self.process.state() != QProcess.NotRunning: |
357 self.process.terminate() |
363 self.process.terminate() |
358 QTimer.singleShot(2000, self.process.kill) |
364 QTimer.singleShot(2000, self.process.kill) |
405 name = self.__rx_file.cap(5).strip() |
411 name = self.__rx_file.cap(5).strip() |
406 nodekind = "file" |
412 nodekind = "file" |
407 else: |
413 else: |
408 continue |
414 continue |
409 url = "{0}/{1}".format(self.repoUrl, name) |
415 url = "{0}/{1}".format(self.repoUrl, name) |
410 self.__generateItem(name, revision, author, size, date, nodekind, url) |
416 self.__generateItem( |
|
417 name, revision, author, size, date, nodekind, url) |
411 |
418 |
412 def __readStderr(self): |
419 def __readStderr(self): |
413 """ |
420 """ |
414 Private slot to handle the readyReadStandardError signal. |
421 Private slot to handle the readyReadStandardError signal. |
415 |
422 |