592 |
592 |
593 self.__revs = nextRevs |
593 self.__revs = nextRevs |
594 return col, color, edges |
594 return col, color, edges |
595 |
595 |
596 def __generateIcon(self, column, color, bottomedges, topedges, dotColor, |
596 def __generateIcon(self, column, color, bottomedges, topedges, dotColor, |
597 currentRev, closed, isDraft): |
597 currentRev, closed, isPushableDraft): |
598 """ |
598 """ |
599 Private method to generate an icon containing the revision tree for the |
599 Private method to generate an icon containing the revision tree for the |
600 given data. |
600 given data. |
601 |
601 |
602 @param column column index of the revision |
602 @param column column index of the revision |
690 QPoint(dot_x + offset, dot_y), |
691 QPoint(dot_x + offset, dot_y), |
691 QPoint(dot_x, dot_y + 2 * offset), |
692 QPoint(dot_x, dot_y + 2 * offset), |
692 QPoint(dot_x + 2 * offset, dot_y + 2 * offset) |
693 QPoint(dot_x + 2 * offset, dot_y + 2 * offset) |
693 ) |
694 ) |
694 else: |
695 else: |
695 if isDraft: |
696 if isPushableDraft: |
696 # 'draft' phase: draw an up arrow like outgoing |
697 # 'draft' phase: draw an up arrow like outgoing, |
|
698 # if it can be pushed |
697 offset = radius // 2 |
699 offset = radius // 2 |
698 painter.drawConvexPolygon( |
700 painter.drawConvexPolygon( |
699 QPoint(dot_x + offset, dot_y), |
701 QPoint(dot_x + offset, dot_y), |
700 QPoint(dot_x, dot_y + 2 * offset), |
702 QPoint(dot_x, dot_y + 2 * offset), |
701 QPoint(dot_x + 2 * offset, dot_y + 2 * offset) |
703 QPoint(dot_x + 2 * offset, dot_y + 2 * offset) |
857 |
859 |
858 return res |
860 return res |
859 |
861 |
860 def __generateLogItem(self, author, date, message, revision, changedPaths, |
862 def __generateLogItem(self, author, date, message, revision, changedPaths, |
861 parents, branches, tags, phase, bookmarks, |
863 parents, branches, tags, phase, bookmarks, |
862 latestTag): |
864 latestTag, canPush=False): |
863 """ |
865 """ |
864 Private method to generate a log tree entry. |
866 Private method to generate a log tree entry. |
865 |
867 |
866 @param author author info (string) |
868 @param author author info |
867 @param date date info (string) |
869 @type str |
868 @param message text of the log message (list of strings) |
870 @param date date info |
869 @param revision revision info (string) |
871 @type str |
|
872 @param message text of the log message |
|
873 @type list of str |
|
874 @param revision revision info |
|
875 @type str |
870 @param changedPaths list of dictionary objects containing |
876 @param changedPaths list of dictionary objects containing |
871 info about the changed files/directories |
877 info about the changed files/directories |
872 @param parents list of parent revisions (list of integers) |
878 @type dict |
873 @param branches list of branches (list of strings) |
879 @param parents list of parent revisions |
874 @param tags list of tags (string) |
880 @type list of int |
875 @param phase phase of the entry (string) |
881 @param branches list of branches |
876 @param bookmarks list of bookmarks (string) |
882 @type list of str |
|
883 @param tags list of tags |
|
884 @type str |
|
885 @param phase phase of the entry |
|
886 @type str |
|
887 @param bookmarks list of bookmarks |
|
888 @type str |
877 @param latestTag the latest tag(s) reachable from the changeset |
889 @param latestTag the latest tag(s) reachable from the changeset |
878 (list of strings) |
890 @type list of str |
879 @return reference to the generated item (QTreeWidgetItem) |
891 @param canPush flag indicating that changesets can be pushed |
|
892 @type bool |
|
893 @return reference to the generated item |
|
894 @rtype QTreeWidgetItem |
880 """ |
895 """ |
881 logMessageColumnWidth = self.vcs.getPlugin().getPreferences( |
896 logMessageColumnWidth = self.vcs.getPlugin().getPreferences( |
882 "LogMessageColumnWidth") |
897 "LogMessageColumnWidth") |
883 msgtxt = "" |
898 msgtxt = "" |
884 for line in message: |
899 for line in message: |
943 |
958 |
944 icon = self.__generateIcon(column, color, edges, topedges, |
959 icon = self.__generateIcon(column, color, edges, topedges, |
945 QColor(self.__branchColor(branches[0])), |
960 QColor(self.__branchColor(branches[0])), |
946 rev in self.__projectWorkingDirParents, |
961 rev in self.__projectWorkingDirParents, |
947 rev in self.__closedBranchesRevs, |
962 rev in self.__closedBranchesRevs, |
948 phase == "draft") |
963 phase == "draft" and canPush) |
949 itm.setIcon(0, icon) |
964 itm.setIcon(0, icon) |
950 |
965 |
951 try: |
966 try: |
952 self.__lastRev = int(revision.split(":")[0]) |
967 self.__lastRev = int(revision.split(":")[0]) |
953 except ValueError: |
968 except ValueError: |
958 def __getLogEntries(self, startRev=None, noEntries=0): |
973 def __getLogEntries(self, startRev=None, noEntries=0): |
959 """ |
974 """ |
960 Private method to retrieve log entries from the repository. |
975 Private method to retrieve log entries from the repository. |
961 |
976 |
962 @param startRev revision number to start from (integer, string) |
977 @param startRev revision number to start from (integer, string) |
963 @keyparam noEntries number of entries to get (0 = default) (int) |
978 @param noEntries number of entries to get (0 = default) (int) |
964 """ |
979 """ |
965 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) |
980 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) |
966 self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) |
981 self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) |
967 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) |
982 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) |
968 QApplication.processEvents() |
983 QApplication.processEvents() |
989 if startRev is not None: |
1004 if startRev is not None: |
990 args.append('--rev') |
1005 args.append('--rev') |
991 args.append('{0}:0'.format(startRev)) |
1006 args.append('{0}:0'.format(startRev)) |
992 if ( |
1007 if ( |
993 not self.projectMode and |
1008 not self.projectMode and |
994 not self.fname == "." and |
|
995 not self.stopCheckBox.isChecked() |
1009 not self.stopCheckBox.isChecked() |
996 ): |
1010 ): |
997 args.append('--follow') |
1011 args.append('--follow') |
998 if self.commandMode == "log": |
1012 if self.commandMode == "log": |
999 args.append('--copies') |
1013 args.append('--copies') |
1048 ): |
1062 ): |
1049 # no incoming changesets, just switch to log mode |
1063 # no incoming changesets, just switch to log mode |
1050 self.commandMode = "log" |
1064 self.commandMode = "log" |
1051 self.__finish() |
1065 self.__finish() |
1052 |
1066 |
1053 def start(self, fn, bundle=None, isFile=False, noEntries=0): |
1067 def start(self, name=None, bundle=None, isFile=False, noEntries=0): |
1054 """ |
1068 """ |
1055 Public slot to start the hg log command. |
1069 Public slot to start the hg log command. |
1056 |
1070 |
1057 @param fn filename to show the log for (string) |
1071 @param name file/directory name to show the log for |
1058 @keyparam bundle name of a bundle file (string) |
1072 @type str |
1059 @keyparam isFile flag indicating log for a file is to be shown |
1073 @param bundle name of a bundle file |
1060 (boolean) |
1074 @type str |
1061 @keyparam noEntries number of entries to get (0 = default) (int) |
1075 @param isFile flag indicating log for a file is to be shown |
|
1076 @type bool |
|
1077 @param noEntries number of entries to get (0 = default) |
|
1078 @type int |
1062 """ |
1079 """ |
1063 self.__bundle = bundle |
1080 self.__bundle = bundle |
1064 self.__isFile = isFile |
1081 self.__isFile = isFile |
1065 |
1082 |
1066 if self.initialCommandMode == "full_log": |
1083 if self.initialCommandMode == "full_log": |
1077 self.errors.clear() |
1094 self.errors.clear() |
1078 QApplication.processEvents() |
1095 QApplication.processEvents() |
1079 |
1096 |
1080 self.__initData() |
1097 self.__initData() |
1081 |
1098 |
1082 self.__filename = fn |
1099 self.__filename = name |
1083 self.dname, self.fname = self.vcs.splitPath(fn) |
1100 |
1084 |
1101 self.projectMode = name is None |
1085 # find the root of the repo |
1102 self.stopCheckBox.setDisabled(self.projectMode) |
1086 self.repodir = self.dname |
|
1087 while not os.path.isdir(os.path.join(self.repodir, self.vcs.adminDir)): |
|
1088 self.repodir = os.path.dirname(self.repodir) |
|
1089 if os.path.splitdrive(self.repodir)[1] == os.sep: |
|
1090 return |
|
1091 |
|
1092 self.projectMode = (self.fname == "." and self.dname == self.repodir) |
|
1093 self.stopCheckBox.setDisabled(self.projectMode or self.fname == ".") |
|
1094 self.activateWindow() |
1103 self.activateWindow() |
1095 self.raise_() |
1104 self.raise_() |
1096 |
1105 |
1097 self.logTree.clear() |
1106 self.logTree.clear() |
1098 self.__started = True |
1107 self.__started = True |
1224 if len(log) > 1: |
1234 if len(log) > 1: |
1225 self.__generateLogItem( |
1235 self.__generateLogItem( |
1226 log["author"], log["date"], |
1236 log["author"], log["date"], |
1227 log["message"], log["revision"], changedPaths, |
1237 log["message"], log["revision"], changedPaths, |
1228 log["parents"], log["branches"], log["tags"], |
1238 log["parents"], log["branches"], log["tags"], |
1229 log["phase"], log["bookmarks"], log["latesttag"]) |
1239 log["phase"], log["bookmarks"], log["latesttag"], |
|
1240 canPush=canPush) |
1230 dt = QDate.fromString(log["date"], Qt.ISODate) |
1241 dt = QDate.fromString(log["date"], Qt.ISODate) |
1231 if ( |
1242 if ( |
1232 not self.__maxDate.isValid() and |
1243 not self.__maxDate.isValid() and |
1233 not self.__minDate.isValid() |
1244 not self.__minDate.isValid() |
1234 ): |
1245 ): |
1959 newPhase = self.phases["secret"] |
1970 newPhase = self.phases["secret"] |
1960 data = (revs, "s", True) |
1971 data = (revs, "s", True) |
1961 else: |
1972 else: |
1962 newPhase = self.phases["draft"] |
1973 newPhase = self.phases["draft"] |
1963 data = (revs, "d", False) |
1974 data = (revs, "d", False) |
1964 res = self.vcs.hgPhase(self.repodir, data) |
1975 res = self.vcs.hgPhase(data) |
1965 if res: |
1976 if res: |
1966 for itm in self.logTree.selectedItems(): |
1977 for itm in self.logTree.selectedItems(): |
1967 itm.setText(self.PhaseColumn, newPhase) |
1978 itm.setText(self.PhaseColumn, newPhase) |
1968 |
1979 |
1969 @pyqtSlot() |
1980 @pyqtSlot() |
1979 if branch != self.__projectBranch: |
1990 if branch != self.__projectBranch: |
1980 revs.append( |
1991 revs.append( |
1981 itm.text(self.RevisionColumn).strip().split(":", 1)[0]) |
1992 itm.text(self.RevisionColumn).strip().split(":", 1)[0]) |
1982 |
1993 |
1983 if revs: |
1994 if revs: |
1984 shouldReopen = self.vcs.hgGraft(self.repodir, revs) |
1995 shouldReopen = self.vcs.hgGraft(revs) |
1985 if shouldReopen: |
1996 if shouldReopen: |
1986 res = E5MessageBox.yesNo( |
1997 res = E5MessageBox.yesNo( |
1987 None, |
1998 None, |
1988 self.tr("Copy Changesets"), |
1999 self.tr("Copy Changesets"), |
1989 self.tr( |
2000 self.tr( |
2003 if len([itm for itm in self.logTree.selectedItems() |
2014 if len([itm for itm in self.logTree.selectedItems() |
2004 if not itm.data(0, self.__incomingRole)]) == 1: |
2015 if not itm.data(0, self.__incomingRole)]) == 1: |
2005 itm = self.logTree.selectedItems()[0] |
2016 itm = self.logTree.selectedItems()[0] |
2006 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] |
2017 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] |
2007 tag = itm.text(self.TagsColumn).strip().split(", ", 1)[0] |
2018 tag = itm.text(self.TagsColumn).strip().split(", ", 1)[0] |
2008 res = self.vcs.vcsTag(self.repodir, revision=rev, tagName=tag) |
2019 res = self.vcs.vcsTag(revision=rev, tagName=tag) |
2009 if res: |
2020 if res: |
2010 self.on_refreshButton_clicked() |
2021 self.on_refreshButton_clicked() |
2011 |
2022 |
2012 @pyqtSlot() |
2023 @pyqtSlot() |
2013 def __closeHeadsActTriggered(self): |
2024 def __closeHeadsActTriggered(self): |
2020 if not itm.data(0, self.__incomingRole)] |
2031 if not itm.data(0, self.__incomingRole)] |
2021 revs = [rev for rev in revs if rev in self.__headRevisions] |
2032 revs = [rev for rev in revs if rev in self.__headRevisions] |
2022 if revs: |
2033 if revs: |
2023 closeheadExtension = self.vcs.getExtensionObject("closehead") |
2034 closeheadExtension = self.vcs.getExtensionObject("closehead") |
2024 if closeheadExtension is not None: |
2035 if closeheadExtension is not None: |
2025 closeheadExtension.hgCloseheads( |
2036 closeheadExtension.hgCloseheads(revisions=revs) |
2026 self.repodir, revisions=revs) |
|
2027 |
2037 |
2028 self.on_refreshButton_clicked() |
2038 self.on_refreshButton_clicked() |
2029 |
2039 |
2030 @pyqtSlot() |
2040 @pyqtSlot() |
2031 def __switchActTriggered(self): |
2041 def __switchActTriggered(self): |
2084 self.tr('Enter bookmark name for changeset "{0}":').format( |
2094 self.tr('Enter bookmark name for changeset "{0}":').format( |
2085 changeset), |
2095 changeset), |
2086 QLineEdit.Normal) |
2096 QLineEdit.Normal) |
2087 if ok and bool(bookmark): |
2097 if ok and bool(bookmark): |
2088 self.vcs.hgBookmarkDefine( |
2098 self.vcs.hgBookmarkDefine( |
2089 self.repodir, revision="rev({0})".format(rev), |
2099 revision="rev({0})".format(rev), |
2090 bookmark=bookmark) |
2100 bookmark=bookmark) |
2091 self.on_refreshButton_clicked() |
2101 self.on_refreshButton_clicked() |
2092 |
2102 |
2093 @pyqtSlot() |
2103 @pyqtSlot() |
2094 def __bookmarkMoveActTriggered(self): |
2104 def __bookmarkMoveActTriggered(self): |
2099 if not itm.data(0, self.__incomingRole)]) == 1: |
2109 if not itm.data(0, self.__incomingRole)]) == 1: |
2100 itm = self.logTree.selectedItems()[0] |
2110 itm = self.logTree.selectedItems()[0] |
2101 rev, changeset = ( |
2111 rev, changeset = ( |
2102 itm.text(self.RevisionColumn).strip().split(":", 1) |
2112 itm.text(self.RevisionColumn).strip().split(":", 1) |
2103 ) |
2113 ) |
2104 bookmarksList = self.vcs.hgGetBookmarksList(self.repodir) |
2114 bookmarksList = self.vcs.hgGetBookmarksList() |
2105 bookmark, ok = QInputDialog.getItem( |
2115 bookmark, ok = QInputDialog.getItem( |
2106 self, |
2116 self, |
2107 self.tr("Move Bookmark"), |
2117 self.tr("Move Bookmark"), |
2108 self.tr('Select the bookmark to be moved to changeset' |
2118 self.tr('Select the bookmark to be moved to changeset' |
2109 ' "{0}":').format(changeset), |
2119 ' "{0}":').format(changeset), |
2110 [""] + bookmarksList, |
2120 [""] + bookmarksList, |
2111 0, False) |
2121 0, False) |
2112 if ok and bool(bookmark): |
2122 if ok and bool(bookmark): |
2113 self.vcs.hgBookmarkMove( |
2123 self.vcs.hgBookmarkMove( |
2114 self.repodir, revision="rev({0})".format(rev), |
2124 revision="rev({0})".format(rev), |
2115 bookmark=bookmark) |
2125 bookmark=bookmark) |
2116 self.on_refreshButton_clicked() |
2126 self.on_refreshButton_clicked() |
2117 |
2127 |
2118 @pyqtSlot() |
2128 @pyqtSlot() |
2119 def __lfPullActTriggered(self): |
2129 def __lfPullActTriggered(self): |
2126 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] |
2136 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] |
2127 if rev: |
2137 if rev: |
2128 revs.append(rev) |
2138 revs.append(rev) |
2129 |
2139 |
2130 if revs: |
2140 if revs: |
2131 self.vcs.getExtensionObject("largefiles").hgLfPull( |
2141 self.vcs.getExtensionObject("largefiles").hgLfPull(revisions=revs) |
2132 self.repodir, revisions=revs) |
|
2133 |
2142 |
2134 @pyqtSlot() |
2143 @pyqtSlot() |
2135 def __pullActTriggered(self): |
2144 def __pullActTriggered(self): |
2136 """ |
2145 """ |
2137 Private slot to pull changes from a remote repository. |
2146 Private slot to pull changes from a remote repository. |
2145 for itm in [item for item in self.logTree.selectedItems() |
2154 for itm in [item for item in self.logTree.selectedItems() |
2146 if item.data(0, self.__incomingRole)]: |
2155 if item.data(0, self.__incomingRole)]: |
2147 rev = itm.text(self.RevisionColumn).split(":")[1].strip() |
2156 rev = itm.text(self.RevisionColumn).split(":")[1].strip() |
2148 if rev: |
2157 if rev: |
2149 revs.append(rev) |
2158 revs.append(rev) |
2150 shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs) |
2159 shouldReopen = self.vcs.hgPull(revisions=revs) |
2151 refresh = True |
2160 refresh = True |
2152 if self.initialCommandMode == "incoming": |
2161 if self.initialCommandMode == "incoming": |
2153 addNext = True |
2162 addNext = True |
2154 |
2163 |
2155 if shouldReopen: |
2164 if shouldReopen: |
2174 """ |
2183 """ |
2175 itm = self.logTree.selectedItems()[0] |
2184 itm = self.logTree.selectedItems()[0] |
2176 if not itm.data(0, self.__incomingRole): |
2185 if not itm.data(0, self.__incomingRole): |
2177 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] |
2186 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] |
2178 if rev: |
2187 if rev: |
2179 self.vcs.hgPush(self.repodir, rev=rev) |
2188 self.vcs.hgPush(rev=rev) |
2180 self.on_refreshButton_clicked( |
2189 self.on_refreshButton_clicked( |
2181 addNext=self.initialCommandMode == "outgoing") |
2190 addNext=self.initialCommandMode == "outgoing") |
2182 |
2191 |
2183 @pyqtSlot() |
2192 @pyqtSlot() |
2184 def __pushAllActTriggered(self): |
2193 def __pushAllActTriggered(self): |
2185 """ |
2194 """ |
2186 Private slot to push all changes to a remote repository. |
2195 Private slot to push all changes to a remote repository. |
2187 """ |
2196 """ |
2188 self.vcs.hgPush(self.repodir) |
2197 self.vcs.hgPush() |
2189 self.on_refreshButton_clicked() |
2198 self.on_refreshButton_clicked() |
2190 |
2199 |
2191 @pyqtSlot() |
2200 @pyqtSlot() |
2192 def __stripActTriggered(self): |
2201 def __stripActTriggered(self): |
2193 """ |
2202 """ |
2195 """ |
2204 """ |
2196 itm = self.logTree.selectedItems()[0] |
2205 itm = self.logTree.selectedItems()[0] |
2197 if not itm.data(0, self.__incomingRole): |
2206 if not itm.data(0, self.__incomingRole): |
2198 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[1] |
2207 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[1] |
2199 shouldReopen = self.vcs.getExtensionObject("strip").hgStrip( |
2208 shouldReopen = self.vcs.getExtensionObject("strip").hgStrip( |
2200 self.repodir, rev=rev) |
2209 rev=rev) |
2201 if shouldReopen: |
2210 if shouldReopen: |
2202 res = E5MessageBox.yesNo( |
2211 res = E5MessageBox.yesNo( |
2203 None, |
2212 None, |
2204 self.tr("Strip Changesets"), |
2213 self.tr("Strip Changesets"), |
2205 self.tr( |
2214 self.tr( |
2219 """ |
2228 """ |
2220 itm = self.logTree.selectedItems()[0] |
2229 itm = self.logTree.selectedItems()[0] |
2221 if not itm.data(0, self.__incomingRole): |
2230 if not itm.data(0, self.__incomingRole): |
2222 rev = "rev({0})".format( |
2231 rev = "rev({0})".format( |
2223 itm.text(self.RevisionColumn).strip().split(":", 1)[0]) |
2232 itm.text(self.RevisionColumn).strip().split(":", 1)[0]) |
2224 self.vcs.vcsMerge(self.repodir, rev=rev) |
2233 self.vcs.vcsMerge("", rev=rev) |
2225 |
2234 |
2226 @pyqtSlot() |
2235 @pyqtSlot() |
2227 def __bundleActTriggered(self): |
2236 def __bundleActTriggered(self): |
2228 """ |
2237 """ |
2229 Private slot to create a changegroup file. |
2238 Private slot to create a changegroup file. |
2278 "revs": revs, |
2287 "revs": revs, |
2279 "base": "", |
2288 "base": "", |
2280 "all": False, |
2289 "all": False, |
2281 } |
2290 } |
2282 |
2291 |
2283 self.vcs.hgBundle(self.repodir, bundleData=bundleData) |
2292 self.vcs.hgBundle(bundleData=bundleData) |
2284 |
2293 |
2285 @pyqtSlot() |
2294 @pyqtSlot() |
2286 def __unbundleActTriggered(self): |
2295 def __unbundleActTriggered(self): |
2287 """ |
2296 """ |
2288 Private slot to apply the currently previewed bundle file. |
2297 Private slot to apply the currently previewed bundle file. |
2289 """ |
2298 """ |
2290 if self.initialCommandMode == "incoming" and bool(self.__bundle): |
2299 if self.initialCommandMode == "incoming" and bool(self.__bundle): |
2291 shouldReopen = self.vcs.hgUnbundle(self.repodir, |
2300 shouldReopen = self.vcs.hgUnbundle(files=[self.__bundle]) |
2292 files=[self.__bundle]) |
|
2293 if shouldReopen: |
2301 if shouldReopen: |
2294 res = E5MessageBox.yesNo( |
2302 res = E5MessageBox.yesNo( |
2295 None, |
2303 None, |
2296 self.tr("Apply Changegroup"), |
2304 self.tr("Apply Changegroup"), |
2297 self.tr("""The project should be reread. Do this now?"""), |
2305 self.tr("""The project should be reread. Do this now?"""), |
2298 yesDefault=True) |
2306 yesDefault=True) |
2299 if res: |
2307 if res: |
2300 e5App().getObject("Project").reopenProject() |
2308 e5App().getObject("Project").reopenProject() |
2301 return |
2309 return |
2302 |
2310 |
2303 self.vcs.vcsLogBrowser(self.repodir) |
2311 self.vcs.vcsLogBrowser() |
2304 self.close() |
2312 self.close() |
2305 |
2313 |
2306 @pyqtSlot() |
2314 @pyqtSlot() |
2307 def __gpgSignActTriggered(self): |
2315 def __gpgSignActTriggered(self): |
2308 """ |
2316 """ |
2314 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip() |
2322 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip() |
2315 if rev: |
2323 if rev: |
2316 revs.append(rev) |
2324 revs.append(rev) |
2317 |
2325 |
2318 if revs: |
2326 if revs: |
2319 self.vcs.getExtensionObject("gpg").hgGpgSign( |
2327 self.vcs.getExtensionObject("gpg").hgGpgSign(revisions=revs) |
2320 self.repodir, revisions=revs) |
|
2321 |
2328 |
2322 @pyqtSlot() |
2329 @pyqtSlot() |
2323 def __gpgVerifyActTriggered(self): |
2330 def __gpgVerifyActTriggered(self): |
2324 """ |
2331 """ |
2325 Private slot to verify the signatures of a selected revisions. |
2332 Private slot to verify the signatures of a selected revisions. |
2327 itm = self.logTree.selectedItems()[0] |
2334 itm = self.logTree.selectedItems()[0] |
2328 if not itm.data(0, self.__incomingRole): |
2335 if not itm.data(0, self.__incomingRole): |
2329 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip() |
2336 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip() |
2330 if rev: |
2337 if rev: |
2331 self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures( |
2338 self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures( |
2332 self.repodir, rev=rev) |
2339 rev=rev) |
2333 |
2340 |
2334 def __selectAllActTriggered(self, select=True): |
2341 def __selectAllActTriggered(self, select=True): |
2335 """ |
2342 """ |
2336 Private method to select or unselect all log entries. |
2343 Private method to select or unselect all log entries. |
2337 |
2344 |
2683 Private slot to handle selection of a side-by-side link. |
2690 Private slot to handle selection of a side-by-side link. |
2684 |
2691 |
2685 @param link text of the selected link |
2692 @param link text of the selected link |
2686 @type str |
2693 @type str |
2687 """ |
2694 """ |
2688 if ":" in link: |
2695 if ":" in link and self.__filename is not None: |
2689 scheme, path = link.split(":", 1) |
2696 scheme, path = link.split(":", 1) |
2690 if scheme == "sbsdiff" and "_" in path: |
2697 if scheme == "sbsdiff" and "_" in path: |
2691 rev1, rev2 = path.split("_", 1) |
2698 rev1, rev2 = path.split("_", 1) |
2692 self.vcs.hgSbsDiff(self.__filename, revisions=(rev1, rev2)) |
2699 self.vcs.hgSbsDiff(self.__filename, revisions=(rev1, rev2)) |