33 "cyan", "olive", "magenta", "darkred", "darkmagenta", |
33 "cyan", "olive", "magenta", "darkred", "darkmagenta", |
34 "darkcyan", "gray", "yellow"] |
34 "darkcyan", "gray", "yellow"] |
35 COLORS = [str(QColor(x).name()) for x in COLORNAMES] |
35 COLORS = [str(QColor(x).name()) for x in COLORNAMES] |
36 |
36 |
37 |
37 |
38 # TODO: add push and pull actions |
|
39 class HgLogBrowserDialog(QWidget, Ui_HgLogBrowserDialog): |
38 class HgLogBrowserDialog(QWidget, Ui_HgLogBrowserDialog): |
40 """ |
39 """ |
41 Class implementing a dialog to browse the log history. |
40 Class implementing a dialog to browse the log history. |
42 """ |
41 """ |
43 IconColumn = 0 |
42 IconColumn = 0 |
156 'A': self.tr('Added'), |
155 'A': self.tr('Added'), |
157 'D': self.tr('Deleted'), |
156 'D': self.tr('Deleted'), |
158 'M': self.tr('Modified'), |
157 'M': self.tr('Modified'), |
159 } |
158 } |
160 |
159 |
|
160 self.phases = { |
|
161 'draft': self.tr("Draft"), |
|
162 'public': self.tr("Public"), |
|
163 'secret': self.tr("Secret"), |
|
164 } |
|
165 |
161 self.__dotRadius = 8 |
166 self.__dotRadius = 8 |
162 self.__rowHeight = 20 |
167 self.__rowHeight = 20 |
163 |
168 |
164 self.logTree.setIconSize( |
169 self.logTree.setIconSize( |
165 QSize(100 * self.__rowHeight, self.__rowHeight)) |
170 QSize(100 * self.__rowHeight, self.__rowHeight)) |
167 self.logTree.headerItem().setText( |
172 self.logTree.headerItem().setText( |
168 self.BookmarksColumn, self.tr("Bookmarks")) |
173 self.BookmarksColumn, self.tr("Bookmarks")) |
169 if self.vcs.version < (2, 1): |
174 if self.vcs.version < (2, 1): |
170 self.logTree.setColumnHidden(self.PhaseColumn, True) |
175 self.logTree.setColumnHidden(self.PhaseColumn, True) |
171 |
176 |
|
177 self.__initActionsMenu() |
|
178 |
|
179 def __initActionsMenu(self): |
|
180 """ |
|
181 Private method to initialize the actions menu. |
|
182 """ |
172 self.__actionsMenu = QMenu() |
183 self.__actionsMenu = QMenu() |
173 if self.vcs.version >= (2, 0): |
184 if self.vcs.version >= (2, 0): |
174 self.__graftAct = self.__actionsMenu.addAction( |
185 self.__graftAct = self.__actionsMenu.addAction( |
175 self.tr("Copy Changesets"), self.__graftActTriggered) |
186 self.tr("Copy Changesets"), self.__graftActTriggered) |
176 self.__graftAct.setToolTip(self.tr( |
187 self.__graftAct.setToolTip(self.tr( |
197 self.__switchAct = self.__actionsMenu.addAction( |
208 self.__switchAct = self.__actionsMenu.addAction( |
198 self.tr("Switch"), self.__switchActTriggered) |
209 self.tr("Switch"), self.__switchActTriggered) |
199 self.__switchAct.setToolTip(self.tr( |
210 self.__switchAct.setToolTip(self.tr( |
200 "Switch the working directory to the selected revision")) |
211 "Switch the working directory to the selected revision")) |
201 |
212 |
|
213 self.__actionsMenu.addSeparator() |
|
214 |
|
215 self.__pullAct = self.__actionsMenu.addAction( |
|
216 self.tr("Pull Changes"), self.__pullActTriggered) |
|
217 self.__pullAct.setToolTip(self.tr( |
|
218 "Pull changes from a remote repository")) |
202 if self.vcs.version >= (2, 0): |
219 if self.vcs.version >= (2, 0): |
203 self.__lfPullAct = self.__actionsMenu.addAction( |
220 self.__lfPullAct = self.__actionsMenu.addAction( |
204 self.tr("Pull Large Files"), self.__lfPullActTriggered) |
221 self.tr("Pull Large Files"), self.__lfPullActTriggered) |
205 self.__lfPullAct.setToolTip(self.tr( |
222 self.__lfPullAct.setToolTip(self.tr( |
206 "Pull large files for selected revisions")) |
223 "Pull large files for selected revisions")) |
207 else: |
224 else: |
208 self.__lfPullAct = None |
225 self.__lfPullAct = None |
|
226 |
|
227 self.__actionsMenu.addSeparator() |
|
228 |
|
229 self.__pushAct = self.__actionsMenu.addAction( |
|
230 self.tr("Push Selected Changes"), self.__pushActTriggered) |
|
231 self.__pushAct.setToolTip(self.tr( |
|
232 "Push changes of the selected changeset and its ancestors" |
|
233 " to a remote repository")) |
|
234 self.__pushAllAct = self.__actionsMenu.addAction( |
|
235 self.tr("Push All Changes"), self.__pushAllActTriggered) |
|
236 self.__pushAllAct.setToolTip(self.tr( |
|
237 "Push all changes to a remote repository")) |
209 |
238 |
210 self.actionsButton.setIcon( |
239 self.actionsButton.setIcon( |
211 UI.PixmapCache.getIcon("actionsToolButton.png")) |
240 UI.PixmapCache.getIcon("actionsToolButton.png")) |
212 self.actionsButton.setMenu(self.__actionsMenu) |
241 self.actionsButton.setMenu(self.__actionsMenu) |
213 |
242 |
649 else: |
678 else: |
650 closedStr = "" |
679 closedStr = "" |
651 msgtxt = msg[0] |
680 msgtxt = msg[0] |
652 if len(msgtxt) > 30: |
681 if len(msgtxt) > 30: |
653 msgtxt = "{0}...".format(msgtxt[:30]) |
682 msgtxt = "{0}...".format(msgtxt[:30]) |
|
683 if phase in self.phases: |
|
684 phaseStr = self.phases[phase] |
|
685 else: |
|
686 phaseStr = phase |
654 columnLabels = [ |
687 columnLabels = [ |
655 "", |
688 "", |
656 branches[0] + closedStr, |
689 branches[0] + closedStr, |
657 "{0:>7}:{1}".format(rev, node), |
690 "{0:>7}:{1}".format(rev, node), |
658 phase, |
691 phaseStr, |
659 author, |
692 author, |
660 date, |
693 date, |
661 msgtxt, |
694 msgtxt, |
662 ", ".join(tags), |
695 ", ".join(tags), |
663 ] |
696 ] |
1226 if self.vcs.isExtensionActive("largefiles"): |
1259 if self.vcs.isExtensionActive("largefiles"): |
1227 self.__lfPullAct.setEnabled(bool( |
1260 self.__lfPullAct.setEnabled(bool( |
1228 self.logTree.selectedItems())) |
1261 self.logTree.selectedItems())) |
1229 else: |
1262 else: |
1230 self.__lfPullAct.setEnabled(False) |
1263 self.__lfPullAct.setEnabled(False) |
|
1264 |
|
1265 self.__pushAct.setEnabled( |
|
1266 len(self.logTree.selectedItems()) == 1 and |
|
1267 self.logTree.selectedItems()[0].text(self.PhaseColumn) == |
|
1268 self.phases["draft"]) |
1231 |
1269 |
1232 self.actionsButton.setEnabled(True) |
1270 self.actionsButton.setEnabled(True) |
1233 else: |
1271 else: |
1234 self.actionsButton.setEnabled(False) |
1272 self.actionsButton.setEnabled(False) |
1235 |
1273 |
1606 |
1644 |
1607 if not revs: |
1645 if not revs: |
1608 self.__phaseAct.setEnabled(False) |
1646 self.__phaseAct.setEnabled(False) |
1609 return |
1647 return |
1610 |
1648 |
1611 if currentPhase == "draft": |
1649 if currentPhase == self.phases["draft"]: |
1612 newPhase = "secret" |
1650 newPhase = self.phases["secret"] |
1613 data = (revs, "s", True) |
1651 data = (revs, "s", True) |
1614 else: |
1652 else: |
1615 newPhase = "draft" |
1653 newPhase = self.phases["draft"] |
1616 data = (revs, "d", False) |
1654 data = (revs, "d", False) |
1617 res = self.vcs.hgPhase(self.repodir, data) |
1655 res = self.vcs.hgPhase(self.repodir, data) |
1618 if res: |
1656 if res: |
1619 for itm in self.logTree.selectedItems(): |
1657 for itm in self.logTree.selectedItems(): |
1620 itm.setText(self.PhaseColumn, newPhase) |
1658 itm.setText(self.PhaseColumn, newPhase) |
1695 revs.append(rev) |
1734 revs.append(rev) |
1696 |
1735 |
1697 if revs: |
1736 if revs: |
1698 self.vcs.getExtensionObject("largefiles").hgLfPull( |
1737 self.vcs.getExtensionObject("largefiles").hgLfPull( |
1699 self.repodir, revisions=revs) |
1738 self.repodir, revisions=revs) |
|
1739 |
|
1740 @pyqtSlot() |
|
1741 def __pullActTriggered(self): |
|
1742 """ |
|
1743 Private slot to pull changes from a remote repository. |
|
1744 """ |
|
1745 res = self.vcs.hgPull(self.repodir) |
|
1746 if res: |
|
1747 self.on_refreshButton_clicked() |
|
1748 |
|
1749 @pyqtSlot() |
|
1750 def __pushActTriggered(self): |
|
1751 """ |
|
1752 Private slot to push changes to a remote repository up to a selected |
|
1753 changeset. |
|
1754 """ |
|
1755 itm = self.logTree.selectedItems()[0] |
|
1756 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] |
|
1757 if rev: |
|
1758 self.vcs.hgPush(self.repodir, rev=rev) |
|
1759 |
|
1760 @pyqtSlot() |
|
1761 def __pushAllActTriggered(self): |
|
1762 """ |
|
1763 Private slot to push all changes to a remote repository. |
|
1764 """ |
|
1765 self.vcs.hgPush(self.repodir) |
1700 |
1766 |
1701 def __actionMode(self): |
1767 def __actionMode(self): |
1702 """ |
1768 """ |
1703 Private method to get the selected action mode. |
1769 Private method to get the selected action mode. |
1704 |
1770 |