eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

branch
maintenance
changeset 8043
0acf98cd089a
parent 7924
8a96736d465e
parent 7971
ff2971513d6d
child 8176
31965986ecd1
diff -r 866adc8c315b -r 0acf98cd089a eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Mon Feb 01 10:38:16 2021 +0100
@@ -594,7 +594,7 @@
         return col, color, edges
     
     def __generateIcon(self, column, color, bottomedges, topedges, dotColor,
-                       currentRev, closed, isDraft):
+                       currentRev, closed, isPushableDraft):
         """
         Private method to generate an icon containing the revision tree for the
         given data.
@@ -615,7 +615,8 @@
         @param closed flag indicating to draw an icon for a closed
             branch
         @type bool
-        @param isDraft flag indicating an entry of phase 'draft'
+        @param isPushableDraft flag indicating an entry of phase 'draft',
+            that can by pushed
         @type bool
         @return icon for the node
         @rtype QIcon
@@ -692,8 +693,9 @@
                     QPoint(dot_x + 2 * offset, dot_y + 2 * offset)
                 )
         else:
-            if isDraft:
-                # 'draft' phase: draw an up arrow like outgoing
+            if isPushableDraft:
+                # 'draft' phase: draw an up arrow like outgoing,
+                # if it can be pushed
                 offset = radius // 2
                 painter.drawConvexPolygon(
                     QPoint(dot_x + offset, dot_y),
@@ -859,24 +861,37 @@
     
     def __generateLogItem(self, author, date, message, revision, changedPaths,
                           parents, branches, tags, phase, bookmarks,
-                          latestTag):
+                          latestTag, canPush=False):
         """
         Private method to generate a log tree entry.
         
-        @param author author info (string)
-        @param date date info (string)
-        @param message text of the log message (list of strings)
-        @param revision revision info (string)
+        @param author author info
+        @type str
+        @param date date info
+        @type str
+        @param message text of the log message
+        @type list of str
+        @param revision revision info
+        @type str
         @param changedPaths list of dictionary objects containing
             info about the changed files/directories
-        @param parents list of parent revisions (list of integers)
-        @param branches list of branches (list of strings)
-        @param tags list of tags (string)
-        @param phase phase of the entry (string)
-        @param bookmarks list of bookmarks (string)
+        @type dict
+        @param parents list of parent revisions
+        @type list of int
+        @param branches list of branches
+        @type list of str
+        @param tags list of tags
+        @type str
+        @param phase phase of the entry
+        @type str
+        @param bookmarks list of bookmarks
+        @type str
         @param latestTag the latest tag(s) reachable from the changeset
-            (list of strings)
-        @return reference to the generated item (QTreeWidgetItem)
+        @type list of str
+        @param canPush flag indicating that changesets can be pushed
+        @type bool
+        @return reference to the generated item
+        @rtype QTreeWidgetItem
         """
         logMessageColumnWidth = self.vcs.getPlugin().getPreferences(
             "LogMessageColumnWidth")
@@ -945,7 +960,7 @@
                                    QColor(self.__branchColor(branches[0])),
                                    rev in self.__projectWorkingDirParents,
                                    rev in self.__closedBranchesRevs,
-                                   phase == "draft")
+                                   phase == "draft" and canPush)
         itm.setIcon(0, icon)
         
         try:
@@ -960,7 +975,7 @@
         Private method to retrieve log entries from the repository.
         
         @param startRev revision number to start from (integer, string)
-        @keyparam noEntries number of entries to get (0 = default) (int)
+        @param noEntries number of entries to get (0 = default) (int)
         """
         self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
         self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True)
@@ -991,7 +1006,6 @@
                 args.append('{0}:0'.format(startRev))
             if (
                 not self.projectMode and
-                not self.fname == "." and
                 not self.stopCheckBox.isChecked()
             ):
                 args.append('--follow')
@@ -1050,15 +1064,18 @@
                 self.commandMode = "log"
         self.__finish()
     
-    def start(self, fn, bundle=None, isFile=False, noEntries=0):
+    def start(self, name=None, bundle=None, isFile=False, noEntries=0):
         """
         Public slot to start the hg log command.
         
-        @param fn filename to show the log for (string)
-        @keyparam bundle name of a bundle file (string)
-        @keyparam isFile flag indicating log for a file is to be shown
-            (boolean)
-        @keyparam noEntries number of entries to get (0 = default) (int)
+        @param name file/directory name to show the log for
+        @type str
+        @param bundle name of a bundle file
+        @type str
+        @param isFile flag indicating log for a file is to be shown
+        @type bool
+        @param noEntries number of entries to get (0 = default)
+        @type int
         """
         self.__bundle = bundle
         self.__isFile = isFile
@@ -1079,18 +1096,10 @@
         
         self.__initData()
         
-        self.__filename = fn
-        self.dname, self.fname = self.vcs.splitPath(fn)
+        self.__filename = name
         
-        # find the root of the repo
-        self.repodir = self.dname
-        while not os.path.isdir(os.path.join(self.repodir, self.vcs.adminDir)):
-            self.repodir = os.path.dirname(self.repodir)
-            if os.path.splitdrive(self.repodir)[1] == os.sep:
-                return
-        
-        self.projectMode = (self.fname == "." and self.dname == self.repodir)
-        self.stopCheckBox.setDisabled(self.projectMode or self.fname == ".")
+        self.projectMode = name is None
+        self.stopCheckBox.setDisabled(self.projectMode)
         self.activateWindow()
         self.raise_()
         
@@ -1137,6 +1146,7 @@
         changedPaths = []
         initialText = True
         fileCopies = {}
+        canPush = self.vcs.canPush()
         for s in self.buf:
             if s != "@@@\n":
                 try:
@@ -1226,7 +1236,8 @@
                         log["author"], log["date"],
                         log["message"], log["revision"], changedPaths,
                         log["parents"], log["branches"], log["tags"],
-                        log["phase"], log["bookmarks"], log["latesttag"])
+                        log["phase"], log["bookmarks"], log["latesttag"],
+                        canPush=canPush)
                     dt = QDate.fromString(log["date"], Qt.ISODate)
                     if (
                         not self.__maxDate.isValid() and
@@ -1961,7 +1972,7 @@
             else:
                 newPhase = self.phases["draft"]
                 data = (revs, "d", False)
-            res = self.vcs.hgPhase(self.repodir, data)
+            res = self.vcs.hgPhase(data)
             if res:
                 for itm in self.logTree.selectedItems():
                     itm.setText(self.PhaseColumn, newPhase)
@@ -1981,7 +1992,7 @@
                     itm.text(self.RevisionColumn).strip().split(":", 1)[0])
         
         if revs:
-            shouldReopen = self.vcs.hgGraft(self.repodir, revs)
+            shouldReopen = self.vcs.hgGraft(revs)
             if shouldReopen:
                 res = E5MessageBox.yesNo(
                     None,
@@ -2005,7 +2016,7 @@
             itm = self.logTree.selectedItems()[0]
             rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
             tag = itm.text(self.TagsColumn).strip().split(", ", 1)[0]
-            res = self.vcs.vcsTag(self.repodir, revision=rev, tagName=tag)
+            res = self.vcs.vcsTag(revision=rev, tagName=tag)
             if res:
                 self.on_refreshButton_clicked()
     
@@ -2022,8 +2033,7 @@
             if revs:
                 closeheadExtension = self.vcs.getExtensionObject("closehead")
                 if closeheadExtension is not None:
-                    closeheadExtension.hgCloseheads(
-                        self.repodir, revisions=revs)
+                    closeheadExtension.hgCloseheads(revisions=revs)
                     
                     self.on_refreshButton_clicked()
     
@@ -2053,7 +2063,7 @@
                 if bookmark:
                     rev = bookmark
             if rev:
-                shouldReopen = self.vcs.vcsUpdate(self.repodir, revision=rev)
+                shouldReopen = self.vcs.vcsUpdate(revision=rev)
                 if shouldReopen:
                     res = E5MessageBox.yesNo(
                         None,
@@ -2086,7 +2096,7 @@
                 QLineEdit.Normal)
             if ok and bool(bookmark):
                 self.vcs.hgBookmarkDefine(
-                    self.repodir, revision="rev({0})".format(rev),
+                    revision="rev({0})".format(rev),
                     bookmark=bookmark)
                 self.on_refreshButton_clicked()
     
@@ -2101,7 +2111,7 @@
             rev, changeset = (
                 itm.text(self.RevisionColumn).strip().split(":", 1)
             )
-            bookmarksList = self.vcs.hgGetBookmarksList(self.repodir)
+            bookmarksList = self.vcs.hgGetBookmarksList()
             bookmark, ok = QInputDialog.getItem(
                 self,
                 self.tr("Move Bookmark"),
@@ -2111,7 +2121,7 @@
                 0, False)
             if ok and bool(bookmark):
                 self.vcs.hgBookmarkMove(
-                    self.repodir, revision="rev({0})".format(rev),
+                    revision="rev({0})".format(rev),
                     bookmark=bookmark)
                 self.on_refreshButton_clicked()
     
@@ -2128,8 +2138,7 @@
                 revs.append(rev)
         
         if revs:
-            self.vcs.getExtensionObject("largefiles").hgLfPull(
-                self.repodir, revisions=revs)
+            self.vcs.getExtensionObject("largefiles").hgLfPull(revisions=revs)
     
     @pyqtSlot()
     def __pullActTriggered(self):
@@ -2147,7 +2156,7 @@
                 rev = itm.text(self.RevisionColumn).split(":")[1].strip()
                 if rev:
                     revs.append(rev)
-            shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs)
+            shouldReopen = self.vcs.hgPull(revisions=revs)
             refresh = True
             if self.initialCommandMode == "incoming":
                 addNext = True
@@ -2176,7 +2185,7 @@
         if not itm.data(0, self.__incomingRole):
             rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
             if rev:
-                self.vcs.hgPush(self.repodir, rev=rev)
+                self.vcs.hgPush(rev=rev)
                 self.on_refreshButton_clicked(
                     addNext=self.initialCommandMode == "outgoing")
     
@@ -2185,7 +2194,7 @@
         """
         Private slot to push all changes to a remote repository.
         """
-        self.vcs.hgPush(self.repodir)
+        self.vcs.hgPush()
         self.on_refreshButton_clicked()
     
     @pyqtSlot()
@@ -2197,7 +2206,7 @@
         if not itm.data(0, self.__incomingRole):
             rev = itm.text(self.RevisionColumn).strip().split(":", 1)[1]
             shouldReopen = self.vcs.getExtensionObject("strip").hgStrip(
-                self.repodir, rev=rev)
+                rev=rev)
             if shouldReopen:
                 res = E5MessageBox.yesNo(
                     None,
@@ -2221,7 +2230,7 @@
         if not itm.data(0, self.__incomingRole):
             rev = "rev({0})".format(
                 itm.text(self.RevisionColumn).strip().split(":", 1)[0])
-            self.vcs.vcsMerge(self.repodir, rev=rev)
+            self.vcs.vcsMerge("", rev=rev)
     
     @pyqtSlot()
     def __bundleActTriggered(self):
@@ -2280,7 +2289,7 @@
                     "all": False,
                 }
         
-        self.vcs.hgBundle(self.repodir, bundleData=bundleData)
+        self.vcs.hgBundle(bundleData=bundleData)
     
     @pyqtSlot()
     def __unbundleActTriggered(self):
@@ -2288,8 +2297,7 @@
         Private slot to apply the currently previewed bundle file.
         """
         if self.initialCommandMode == "incoming" and bool(self.__bundle):
-            shouldReopen = self.vcs.hgUnbundle(self.repodir,
-                                               files=[self.__bundle])
+            shouldReopen = self.vcs.hgUnbundle(files=[self.__bundle])
             if shouldReopen:
                 res = E5MessageBox.yesNo(
                     None,
@@ -2300,7 +2308,7 @@
                     e5App().getObject("Project").reopenProject()
                     return
             
-            self.vcs.vcsLogBrowser(self.repodir)
+            self.vcs.vcsLogBrowser()
             self.close()
     
     @pyqtSlot()
@@ -2316,8 +2324,7 @@
                 revs.append(rev)
         
         if revs:
-            self.vcs.getExtensionObject("gpg").hgGpgSign(
-                self.repodir, revisions=revs)
+            self.vcs.getExtensionObject("gpg").hgGpgSign(revisions=revs)
     
     @pyqtSlot()
     def __gpgVerifyActTriggered(self):
@@ -2329,7 +2336,7 @@
             rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip()
             if rev:
                 self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures(
-                    self.repodir, rev=rev)
+                    rev=rev)
     
     def __selectAllActTriggered(self, select=True):
         """
@@ -2685,7 +2692,7 @@
         @param link text of the selected link
         @type str
         """
-        if ":" in link:
+        if ":" in link and self.__filename is not None:
             scheme, path = link.split(":", 1)
             if scheme == "sbsdiff" and "_" in path:
                 rev1, rev2 = path.split("_", 1)

eric ide

mercurial