1296 |
1296 |
1297 self.__resizeColumnsLog() |
1297 self.__resizeColumnsLog() |
1298 |
1298 |
1299 if self.__started: |
1299 if self.__started: |
1300 if self.__selectedRevisions: |
1300 if self.__selectedRevisions: |
1301 self.logTree.setCurrentItem(self.logTree.findItems( |
1301 foundItems = self.logTree.findItems( |
1302 self.__selectedRevisions[0], Qt.MatchExactly, |
1302 self.__selectedRevisions[0], Qt.MatchExactly, |
1303 self.RevisionColumn)[0]) |
1303 self.RevisionColumn) |
|
1304 if foundItems: |
|
1305 self.logTree.setCurrentItem(foundItems[0]) |
|
1306 else: |
|
1307 self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) |
1304 else: |
1308 else: |
1305 self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) |
1309 self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) |
1306 self.__started = False |
1310 self.__started = False |
1307 |
1311 |
1308 if self.commandMode in ("incoming", "outgoing"): |
1312 if self.commandMode in ("incoming", "outgoing"): |
1441 """ |
1445 """ |
1442 Private slot to update the status of the tool menu actions and |
1446 Private slot to update the status of the tool menu actions and |
1443 the tool menu button. |
1447 the tool menu button. |
1444 """ |
1448 """ |
1445 if self.initialCommandMode == "log" and self.projectMode: |
1449 if self.initialCommandMode == "log" and self.projectMode: |
1446 if self.__phaseAct is not None: |
1450 # do the phase action |
1447 # step 1: count entries with changeable phases |
1451 # step 1: count entries with changeable phases |
1448 secret = 0 |
1452 secret = 0 |
1449 draft = 0 |
1453 draft = 0 |
1450 public = 0 |
1454 public = 0 |
1451 for itm in self.logTree.selectedItems(): |
1455 for itm in self.logTree.selectedItems(): |
1452 phase = itm.text(self.PhaseColumn) |
1456 phase = itm.text(self.PhaseColumn) |
1453 if phase == self.phases["draft"]: |
1457 if phase == self.phases["draft"]: |
1454 draft += 1 |
1458 draft += 1 |
1455 elif phase == self.phases["secret"]: |
1459 elif phase == self.phases["secret"]: |
1456 secret += 1 |
1460 secret += 1 |
1457 else: |
|
1458 public += 1 |
|
1459 |
|
1460 # step 2: set the status of the phase action |
|
1461 if public == 0 and \ |
|
1462 ((secret > 0 and draft == 0) or |
|
1463 (secret == 0 and draft > 0)): |
|
1464 self.__phaseAct.setEnabled(True) |
|
1465 else: |
1461 else: |
1466 self.__phaseAct.setEnabled(False) |
1462 public += 1 |
1467 |
1463 |
1468 if self.__graftAct is not None: |
1464 # step 2: set the status of the phase action |
1469 # step 1: count selected entries not belonging to the |
1465 if public == 0 and \ |
1470 # current branch |
1466 ((secret > 0 and draft == 0) or |
1471 otherBranches = 0 |
1467 (secret == 0 and draft > 0)): |
1472 for itm in self.logTree.selectedItems(): |
1468 self.__phaseAct.setEnabled(True) |
1473 branch = itm.text(self.BranchColumn) |
1469 else: |
1474 if branch != self.__projectBranch: |
1470 self.__phaseAct.setEnabled(False) |
1475 otherBranches += 1 |
1471 |
1476 |
1472 # do the graft action |
1477 # step 2: set the status of the graft action |
1473 # step 1: count selected entries not belonging to the |
1478 self.__graftAct.setEnabled(otherBranches > 0) |
1474 # current branch |
|
1475 otherBranches = 0 |
|
1476 for itm in self.logTree.selectedItems(): |
|
1477 branch = itm.text(self.BranchColumn) |
|
1478 if branch != self.__projectBranch: |
|
1479 otherBranches += 1 |
|
1480 |
|
1481 # step 2: set the status of the graft action |
|
1482 self.__graftAct.setEnabled(otherBranches > 0) |
1479 |
1483 |
1480 selectedItemsCount = len(self.logTree.selectedItems()) |
1484 selectedItemsCount = len(self.logTree.selectedItems()) |
1481 self.__mergeAct.setEnabled(selectedItemsCount == 1) |
1485 self.__mergeAct.setEnabled(selectedItemsCount == 1) |
1482 self.__tagAct.setEnabled(selectedItemsCount == 1) |
1486 self.__tagAct.setEnabled(selectedItemsCount == 1) |
1483 self.__switchAct.setEnabled(selectedItemsCount == 1) |
1487 self.__switchAct.setEnabled(selectedItemsCount == 1) |
1484 self.__bookmarkAct.setEnabled(selectedItemsCount == 1) |
1488 self.__bookmarkAct.setEnabled(selectedItemsCount == 1) |
1485 self.__bookmarkMoveAct.setEnabled(selectedItemsCount == 1) |
1489 self.__bookmarkMoveAct.setEnabled(selectedItemsCount == 1) |
1486 |
1490 |
|
1491 self.__pullAct.setText(self.tr("Pull Changes")) |
|
1492 self.__fetchAct.setText(self.tr("Fetch Changes")) |
1487 if self.vcs.canPull(): |
1493 if self.vcs.canPull(): |
1488 self.__pullAct.setEnabled(True) |
1494 self.__pullAct.setEnabled(True) |
1489 self.__lfPullAct.setEnabled( |
1495 self.__lfPullAct.setEnabled( |
1490 self.vcs.isExtensionActive("largefiles") and |
1496 self.vcs.isExtensionActive("largefiles") and |
1491 selectedItemsCount > 0) |
1497 selectedItemsCount > 0) |
1516 self.vcs.isExtensionActive("gpg") and |
1522 self.vcs.isExtensionActive("gpg") and |
1517 selectedItemsCount > 0) |
1523 selectedItemsCount > 0) |
1518 self.__gpgVerifyAct.setEnabled( |
1524 self.__gpgVerifyAct.setEnabled( |
1519 self.vcs.isExtensionActive("gpg") and |
1525 self.vcs.isExtensionActive("gpg") and |
1520 selectedItemsCount == 1) |
1526 selectedItemsCount == 1) |
|
1527 |
|
1528 self.actionsButton.setEnabled(True) |
|
1529 elif self.initialCommandMode == "incoming" and self.projectMode: |
|
1530 for act in [self.__phaseAct, self.__graftAct, self.__mergeAct, |
|
1531 self.__tagAct, self.__switchAct, self.__bookmarkAct, |
|
1532 self.__bookmarkMoveAct, self.__pushAct, |
|
1533 self.__pushAllAct, self.__stripAct, self.__bundleAct, |
|
1534 self.__gpgSignAct, self.__gpgVerifyAct]: |
|
1535 act.setEnabled(False) |
|
1536 |
|
1537 self.__pullAct.setText(self.tr("Pull Selected Changes")) |
|
1538 self.__fetchAct.setText(self.tr("Fetch Selected Changes")) |
|
1539 if self.vcs.canPull(): |
|
1540 # step 1: determine number of selected draft changesets |
|
1541 # i.e. those that can be pulled |
|
1542 selectedDraftItemsCount = 0 |
|
1543 for itm in self.logTree.selectedItems(): |
|
1544 phase = itm.text(self.PhaseColumn) |
|
1545 if phase == self.phases["draft"]: |
|
1546 selectedDraftItemsCount += 1 |
|
1547 self.__pullAct.setEnabled(selectedDraftItemsCount > 0) |
|
1548 self.__lfPullAct.setEnabled( |
|
1549 self.vcs.isExtensionActive("largefiles") and |
|
1550 selectedItemsCount > 0) |
|
1551 self.__fetchAct.setEnabled( |
|
1552 self.vcs.isExtensionActive("fetch") and |
|
1553 selectedDraftItemsCount > 0) |
|
1554 else: |
|
1555 self.__pullAct.setEnabled(False) |
|
1556 self.__lfPullAct.setEnabled(False) |
|
1557 self.__fetchAct.setEnabled(False) |
1521 |
1558 |
1522 self.actionsButton.setEnabled(True) |
1559 self.actionsButton.setEnabled(True) |
1523 else: |
1560 else: |
1524 self.actionsButton.setEnabled(False) |
1561 self.actionsButton.setEnabled(False) |
1525 # TODO: add code to enable menu in incoming / outgoing mode as well |
1562 # TODO: add code to enable menu in incoming / outgoing mode as well |
2108 @pyqtSlot() |
2145 @pyqtSlot() |
2109 def __fetchActTriggered(self): |
2146 def __fetchActTriggered(self): |
2110 """ |
2147 """ |
2111 Private slot to fetch changes from a remote repository. |
2148 Private slot to fetch changes from a remote repository. |
2112 """ |
2149 """ |
2113 shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch( |
2150 shouldReopen = False |
2114 self.repodir) |
2151 refresh = False |
|
2152 |
|
2153 if self.initialCommandMode == "log": |
|
2154 shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch( |
|
2155 self.repodir) |
|
2156 refresh = True |
|
2157 elif self.initialCommandMode == "incoming": |
|
2158 revs = [] |
|
2159 for itm in self.logTree.selectedItems(): |
|
2160 rev = itm.text(self.RevisionColumn).split(":")[1].strip() |
|
2161 phase = itm.text(self.PhaseColumn).strip() |
|
2162 if rev and phase == self.phases["draft"]: |
|
2163 revs.append(rev) |
|
2164 if revs: |
|
2165 shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch( |
|
2166 self.repodir, ) |
|
2167 refresh = True |
2115 if shouldReopen: |
2168 if shouldReopen: |
2116 res = E5MessageBox.yesNo( |
2169 res = E5MessageBox.yesNo( |
2117 None, |
2170 None, |
2118 self.tr("Fetch Changes"), |
2171 self.tr("Fetch Changes"), |
2119 self.tr( |
2172 self.tr( |
2121 yesDefault=True) |
2174 yesDefault=True) |
2122 if res: |
2175 if res: |
2123 e5App().getObject("Project").reopenProject() |
2176 e5App().getObject("Project").reopenProject() |
2124 return |
2177 return |
2125 |
2178 |
2126 self.on_refreshButton_clicked() |
2179 if refresh: |
|
2180 self.on_refreshButton_clicked() |
2127 |
2181 |
2128 @pyqtSlot() |
2182 @pyqtSlot() |
2129 def __pullActTriggered(self): |
2183 def __pullActTriggered(self): |
2130 """ |
2184 """ |
2131 Private slot to pull changes from a remote repository. |
2185 Private slot to pull changes from a remote repository. |
2132 """ |
2186 """ |
2133 shouldReopen = self.vcs.hgPull(self.repodir) |
2187 shouldReopen = False |
|
2188 refresh = False |
|
2189 |
|
2190 if self.initialCommandMode == "log": |
|
2191 shouldReopen = self.vcs.hgPull(self.repodir) |
|
2192 refresh = True |
|
2193 elif self.initialCommandMode == "incoming": |
|
2194 revs = [] |
|
2195 for itm in self.logTree.selectedItems(): |
|
2196 rev = itm.text(self.RevisionColumn).split(":")[1].strip() |
|
2197 phase = itm.text(self.PhaseColumn).strip() |
|
2198 if rev and phase == self.phases["draft"]: |
|
2199 revs.append(rev) |
|
2200 if revs: |
|
2201 shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs) |
|
2202 refresh = True |
|
2203 |
2134 if shouldReopen: |
2204 if shouldReopen: |
2135 res = E5MessageBox.yesNo( |
2205 res = E5MessageBox.yesNo( |
2136 None, |
2206 None, |
2137 self.tr("Pull Changes"), |
2207 self.tr("Pull Changes"), |
2138 self.tr( |
2208 self.tr( |