eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

changeset 7970
c4ee8a81584c
parent 7923
91e843545d9a
child 7971
ff2971513d6d
equal deleted inserted replaced
7969:62eff8b34a8d 7970:c4ee8a81584c
989 if startRev is not None: 989 if startRev is not None:
990 args.append('--rev') 990 args.append('--rev')
991 args.append('{0}:0'.format(startRev)) 991 args.append('{0}:0'.format(startRev))
992 if ( 992 if (
993 not self.projectMode and 993 not self.projectMode and
994 not self.fname == "." and
995 not self.stopCheckBox.isChecked() 994 not self.stopCheckBox.isChecked()
996 ): 995 ):
997 args.append('--follow') 996 args.append('--follow')
998 if self.commandMode == "log": 997 if self.commandMode == "log":
999 args.append('--copies') 998 args.append('--copies')
1048 ): 1047 ):
1049 # no incoming changesets, just switch to log mode 1048 # no incoming changesets, just switch to log mode
1050 self.commandMode = "log" 1049 self.commandMode = "log"
1051 self.__finish() 1050 self.__finish()
1052 1051
1053 def start(self, fn, bundle=None, isFile=False, noEntries=0): 1052 def start(self, name=None, bundle=None, isFile=False, noEntries=0):
1054 """ 1053 """
1055 Public slot to start the hg log command. 1054 Public slot to start the hg log command.
1056 1055
1057 @param fn filename to show the log for (string) 1056 @param name file/directory name to show the log for
1058 @param bundle name of a bundle file (string) 1057 @type str
1058 @param bundle name of a bundle file
1059 @type str
1059 @param isFile flag indicating log for a file is to be shown 1060 @param isFile flag indicating log for a file is to be shown
1060 (boolean) 1061 @type bool
1061 @param noEntries number of entries to get (0 = default) (int) 1062 @param noEntries number of entries to get (0 = default)
1063 @type int
1062 """ 1064 """
1063 self.__bundle = bundle 1065 self.__bundle = bundle
1064 self.__isFile = isFile 1066 self.__isFile = isFile
1065 1067
1066 if self.initialCommandMode == "full_log": 1068 if self.initialCommandMode == "full_log":
1077 self.errors.clear() 1079 self.errors.clear()
1078 QApplication.processEvents() 1080 QApplication.processEvents()
1079 1081
1080 self.__initData() 1082 self.__initData()
1081 1083
1082 self.__filename = fn 1084 self.__filename = name
1083 self.dname, self.fname = self.vcs.splitPath(fn) 1085
1084 1086 self.projectMode = name is None
1085 # find the root of the repo 1087 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() 1088 self.activateWindow()
1095 self.raise_() 1089 self.raise_()
1096 1090
1097 self.logTree.clear() 1091 self.logTree.clear()
1098 self.__started = True 1092 self.__started = True
1959 newPhase = self.phases["secret"] 1953 newPhase = self.phases["secret"]
1960 data = (revs, "s", True) 1954 data = (revs, "s", True)
1961 else: 1955 else:
1962 newPhase = self.phases["draft"] 1956 newPhase = self.phases["draft"]
1963 data = (revs, "d", False) 1957 data = (revs, "d", False)
1964 res = self.vcs.hgPhase(self.repodir, data) 1958 res = self.vcs.hgPhase(data)
1965 if res: 1959 if res:
1966 for itm in self.logTree.selectedItems(): 1960 for itm in self.logTree.selectedItems():
1967 itm.setText(self.PhaseColumn, newPhase) 1961 itm.setText(self.PhaseColumn, newPhase)
1968 1962
1969 @pyqtSlot() 1963 @pyqtSlot()
1979 if branch != self.__projectBranch: 1973 if branch != self.__projectBranch:
1980 revs.append( 1974 revs.append(
1981 itm.text(self.RevisionColumn).strip().split(":", 1)[0]) 1975 itm.text(self.RevisionColumn).strip().split(":", 1)[0])
1982 1976
1983 if revs: 1977 if revs:
1984 shouldReopen = self.vcs.hgGraft(self.repodir, revs) 1978 shouldReopen = self.vcs.hgGraft(revs)
1985 if shouldReopen: 1979 if shouldReopen:
1986 res = E5MessageBox.yesNo( 1980 res = E5MessageBox.yesNo(
1987 None, 1981 None,
1988 self.tr("Copy Changesets"), 1982 self.tr("Copy Changesets"),
1989 self.tr( 1983 self.tr(
2003 if len([itm for itm in self.logTree.selectedItems() 1997 if len([itm for itm in self.logTree.selectedItems()
2004 if not itm.data(0, self.__incomingRole)]) == 1: 1998 if not itm.data(0, self.__incomingRole)]) == 1:
2005 itm = self.logTree.selectedItems()[0] 1999 itm = self.logTree.selectedItems()[0]
2006 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] 2000 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
2007 tag = itm.text(self.TagsColumn).strip().split(", ", 1)[0] 2001 tag = itm.text(self.TagsColumn).strip().split(", ", 1)[0]
2008 res = self.vcs.vcsTag(self.repodir, revision=rev, tagName=tag) 2002 res = self.vcs.vcsTag(revision=rev, tagName=tag)
2009 if res: 2003 if res:
2010 self.on_refreshButton_clicked() 2004 self.on_refreshButton_clicked()
2011 2005
2012 @pyqtSlot() 2006 @pyqtSlot()
2013 def __closeHeadsActTriggered(self): 2007 def __closeHeadsActTriggered(self):
2020 if not itm.data(0, self.__incomingRole)] 2014 if not itm.data(0, self.__incomingRole)]
2021 revs = [rev for rev in revs if rev in self.__headRevisions] 2015 revs = [rev for rev in revs if rev in self.__headRevisions]
2022 if revs: 2016 if revs:
2023 closeheadExtension = self.vcs.getExtensionObject("closehead") 2017 closeheadExtension = self.vcs.getExtensionObject("closehead")
2024 if closeheadExtension is not None: 2018 if closeheadExtension is not None:
2025 closeheadExtension.hgCloseheads( 2019 closeheadExtension.hgCloseheads(revisions=revs)
2026 self.repodir, revisions=revs)
2027 2020
2028 self.on_refreshButton_clicked() 2021 self.on_refreshButton_clicked()
2029 2022
2030 @pyqtSlot() 2023 @pyqtSlot()
2031 def __switchActTriggered(self): 2024 def __switchActTriggered(self):
2051 if not ok: 2044 if not ok:
2052 return 2045 return
2053 if bookmark: 2046 if bookmark:
2054 rev = bookmark 2047 rev = bookmark
2055 if rev: 2048 if rev:
2056 shouldReopen = self.vcs.vcsUpdate(self.repodir, revision=rev) 2049 shouldReopen = self.vcs.vcsUpdate(revision=rev)
2057 if shouldReopen: 2050 if shouldReopen:
2058 res = E5MessageBox.yesNo( 2051 res = E5MessageBox.yesNo(
2059 None, 2052 None,
2060 self.tr("Switch"), 2053 self.tr("Switch"),
2061 self.tr( 2054 self.tr(
2084 self.tr('Enter bookmark name for changeset "{0}":').format( 2077 self.tr('Enter bookmark name for changeset "{0}":').format(
2085 changeset), 2078 changeset),
2086 QLineEdit.Normal) 2079 QLineEdit.Normal)
2087 if ok and bool(bookmark): 2080 if ok and bool(bookmark):
2088 self.vcs.hgBookmarkDefine( 2081 self.vcs.hgBookmarkDefine(
2089 self.repodir, revision="rev({0})".format(rev), 2082 revision="rev({0})".format(rev),
2090 bookmark=bookmark) 2083 bookmark=bookmark)
2091 self.on_refreshButton_clicked() 2084 self.on_refreshButton_clicked()
2092 2085
2093 @pyqtSlot() 2086 @pyqtSlot()
2094 def __bookmarkMoveActTriggered(self): 2087 def __bookmarkMoveActTriggered(self):
2099 if not itm.data(0, self.__incomingRole)]) == 1: 2092 if not itm.data(0, self.__incomingRole)]) == 1:
2100 itm = self.logTree.selectedItems()[0] 2093 itm = self.logTree.selectedItems()[0]
2101 rev, changeset = ( 2094 rev, changeset = (
2102 itm.text(self.RevisionColumn).strip().split(":", 1) 2095 itm.text(self.RevisionColumn).strip().split(":", 1)
2103 ) 2096 )
2104 bookmarksList = self.vcs.hgGetBookmarksList(self.repodir) 2097 bookmarksList = self.vcs.hgGetBookmarksList()
2105 bookmark, ok = QInputDialog.getItem( 2098 bookmark, ok = QInputDialog.getItem(
2106 self, 2099 self,
2107 self.tr("Move Bookmark"), 2100 self.tr("Move Bookmark"),
2108 self.tr('Select the bookmark to be moved to changeset' 2101 self.tr('Select the bookmark to be moved to changeset'
2109 ' "{0}":').format(changeset), 2102 ' "{0}":').format(changeset),
2110 [""] + bookmarksList, 2103 [""] + bookmarksList,
2111 0, False) 2104 0, False)
2112 if ok and bool(bookmark): 2105 if ok and bool(bookmark):
2113 self.vcs.hgBookmarkMove( 2106 self.vcs.hgBookmarkMove(
2114 self.repodir, revision="rev({0})".format(rev), 2107 revision="rev({0})".format(rev),
2115 bookmark=bookmark) 2108 bookmark=bookmark)
2116 self.on_refreshButton_clicked() 2109 self.on_refreshButton_clicked()
2117 2110
2118 @pyqtSlot() 2111 @pyqtSlot()
2119 def __lfPullActTriggered(self): 2112 def __lfPullActTriggered(self):
2126 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] 2119 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
2127 if rev: 2120 if rev:
2128 revs.append(rev) 2121 revs.append(rev)
2129 2122
2130 if revs: 2123 if revs:
2131 self.vcs.getExtensionObject("largefiles").hgLfPull( 2124 self.vcs.getExtensionObject("largefiles").hgLfPull(revisions=revs)
2132 self.repodir, revisions=revs)
2133 2125
2134 @pyqtSlot() 2126 @pyqtSlot()
2135 def __pullActTriggered(self): 2127 def __pullActTriggered(self):
2136 """ 2128 """
2137 Private slot to pull changes from a remote repository. 2129 Private slot to pull changes from a remote repository.
2145 for itm in [item for item in self.logTree.selectedItems() 2137 for itm in [item for item in self.logTree.selectedItems()
2146 if item.data(0, self.__incomingRole)]: 2138 if item.data(0, self.__incomingRole)]:
2147 rev = itm.text(self.RevisionColumn).split(":")[1].strip() 2139 rev = itm.text(self.RevisionColumn).split(":")[1].strip()
2148 if rev: 2140 if rev:
2149 revs.append(rev) 2141 revs.append(rev)
2150 shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs) 2142 shouldReopen = self.vcs.hgPull(revisions=revs)
2151 refresh = True 2143 refresh = True
2152 if self.initialCommandMode == "incoming": 2144 if self.initialCommandMode == "incoming":
2153 addNext = True 2145 addNext = True
2154 2146
2155 if shouldReopen: 2147 if shouldReopen:
2174 """ 2166 """
2175 itm = self.logTree.selectedItems()[0] 2167 itm = self.logTree.selectedItems()[0]
2176 if not itm.data(0, self.__incomingRole): 2168 if not itm.data(0, self.__incomingRole):
2177 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0] 2169 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
2178 if rev: 2170 if rev:
2179 self.vcs.hgPush(self.repodir, rev=rev) 2171 self.vcs.hgPush(rev=rev)
2180 self.on_refreshButton_clicked( 2172 self.on_refreshButton_clicked(
2181 addNext=self.initialCommandMode == "outgoing") 2173 addNext=self.initialCommandMode == "outgoing")
2182 2174
2183 @pyqtSlot() 2175 @pyqtSlot()
2184 def __pushAllActTriggered(self): 2176 def __pushAllActTriggered(self):
2185 """ 2177 """
2186 Private slot to push all changes to a remote repository. 2178 Private slot to push all changes to a remote repository.
2187 """ 2179 """
2188 self.vcs.hgPush(self.repodir) 2180 self.vcs.hgPush()
2189 self.on_refreshButton_clicked() 2181 self.on_refreshButton_clicked()
2190 2182
2191 @pyqtSlot() 2183 @pyqtSlot()
2192 def __stripActTriggered(self): 2184 def __stripActTriggered(self):
2193 """ 2185 """
2195 """ 2187 """
2196 itm = self.logTree.selectedItems()[0] 2188 itm = self.logTree.selectedItems()[0]
2197 if not itm.data(0, self.__incomingRole): 2189 if not itm.data(0, self.__incomingRole):
2198 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[1] 2190 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[1]
2199 shouldReopen = self.vcs.getExtensionObject("strip").hgStrip( 2191 shouldReopen = self.vcs.getExtensionObject("strip").hgStrip(
2200 self.repodir, rev=rev) 2192 rev=rev)
2201 if shouldReopen: 2193 if shouldReopen:
2202 res = E5MessageBox.yesNo( 2194 res = E5MessageBox.yesNo(
2203 None, 2195 None,
2204 self.tr("Strip Changesets"), 2196 self.tr("Strip Changesets"),
2205 self.tr( 2197 self.tr(
2219 """ 2211 """
2220 itm = self.logTree.selectedItems()[0] 2212 itm = self.logTree.selectedItems()[0]
2221 if not itm.data(0, self.__incomingRole): 2213 if not itm.data(0, self.__incomingRole):
2222 rev = "rev({0})".format( 2214 rev = "rev({0})".format(
2223 itm.text(self.RevisionColumn).strip().split(":", 1)[0]) 2215 itm.text(self.RevisionColumn).strip().split(":", 1)[0])
2224 self.vcs.vcsMerge(self.repodir, rev=rev) 2216 self.vcs.vcsMerge("", rev=rev)
2225 2217
2226 @pyqtSlot() 2218 @pyqtSlot()
2227 def __bundleActTriggered(self): 2219 def __bundleActTriggered(self):
2228 """ 2220 """
2229 Private slot to create a changegroup file. 2221 Private slot to create a changegroup file.
2278 "revs": revs, 2270 "revs": revs,
2279 "base": "", 2271 "base": "",
2280 "all": False, 2272 "all": False,
2281 } 2273 }
2282 2274
2283 self.vcs.hgBundle(self.repodir, bundleData=bundleData) 2275 self.vcs.hgBundle(bundleData=bundleData)
2284 2276
2285 @pyqtSlot() 2277 @pyqtSlot()
2286 def __unbundleActTriggered(self): 2278 def __unbundleActTriggered(self):
2287 """ 2279 """
2288 Private slot to apply the currently previewed bundle file. 2280 Private slot to apply the currently previewed bundle file.
2289 """ 2281 """
2290 if self.initialCommandMode == "incoming" and bool(self.__bundle): 2282 if self.initialCommandMode == "incoming" and bool(self.__bundle):
2291 shouldReopen = self.vcs.hgUnbundle(self.repodir, 2283 shouldReopen = self.vcs.hgUnbundle(files=[self.__bundle])
2292 files=[self.__bundle])
2293 if shouldReopen: 2284 if shouldReopen:
2294 res = E5MessageBox.yesNo( 2285 res = E5MessageBox.yesNo(
2295 None, 2286 None,
2296 self.tr("Apply Changegroup"), 2287 self.tr("Apply Changegroup"),
2297 self.tr("""The project should be reread. Do this now?"""), 2288 self.tr("""The project should be reread. Do this now?"""),
2298 yesDefault=True) 2289 yesDefault=True)
2299 if res: 2290 if res:
2300 e5App().getObject("Project").reopenProject() 2291 e5App().getObject("Project").reopenProject()
2301 return 2292 return
2302 2293
2303 self.vcs.vcsLogBrowser(self.repodir) 2294 self.vcs.vcsLogBrowser()
2304 self.close() 2295 self.close()
2305 2296
2306 @pyqtSlot() 2297 @pyqtSlot()
2307 def __gpgSignActTriggered(self): 2298 def __gpgSignActTriggered(self):
2308 """ 2299 """
2314 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip() 2305 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip()
2315 if rev: 2306 if rev:
2316 revs.append(rev) 2307 revs.append(rev)
2317 2308
2318 if revs: 2309 if revs:
2319 self.vcs.getExtensionObject("gpg").hgGpgSign( 2310 self.vcs.getExtensionObject("gpg").hgGpgSign(revisions=revs)
2320 self.repodir, revisions=revs)
2321 2311
2322 @pyqtSlot() 2312 @pyqtSlot()
2323 def __gpgVerifyActTriggered(self): 2313 def __gpgVerifyActTriggered(self):
2324 """ 2314 """
2325 Private slot to verify the signatures of a selected revisions. 2315 Private slot to verify the signatures of a selected revisions.
2327 itm = self.logTree.selectedItems()[0] 2317 itm = self.logTree.selectedItems()[0]
2328 if not itm.data(0, self.__incomingRole): 2318 if not itm.data(0, self.__incomingRole):
2329 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip() 2319 rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip()
2330 if rev: 2320 if rev:
2331 self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures( 2321 self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures(
2332 self.repodir, rev=rev) 2322 rev=rev)
2333 2323
2334 def __selectAllActTriggered(self, select=True): 2324 def __selectAllActTriggered(self, select=True):
2335 """ 2325 """
2336 Private method to select or unselect all log entries. 2326 Private method to select or unselect all log entries.
2337 2327
2683 Private slot to handle selection of a side-by-side link. 2673 Private slot to handle selection of a side-by-side link.
2684 2674
2685 @param link text of the selected link 2675 @param link text of the selected link
2686 @type str 2676 @type str
2687 """ 2677 """
2688 if ":" in link: 2678 if ":" in link and self.__filename is not None:
2689 scheme, path = link.split(":", 1) 2679 scheme, path = link.split(":", 1)
2690 if scheme == "sbsdiff" and "_" in path: 2680 if scheme == "sbsdiff" and "_" in path:
2691 rev1, rev2 = path.split("_", 1) 2681 rev1, rev2 = path.split("_", 1)
2692 self.vcs.hgSbsDiff(self.__filename, revisions=(rev1, rev2)) 2682 self.vcs.hgSbsDiff(self.__filename, revisions=(rev1, rev2))

eric ide

mercurial