Changeset 4e6cbf768a27…
Parent fe87f1c4f083…
by
Changes to 5 files · Browse files at 4e6cbf768a27 Showing diff from parent fe87f1c4f083 Diff from another changeset...
|
|
@@ -11,7 +11,7 @@
from tortoisehg.util import hglib, paths
from tortoisehg.hgqt.i18n import _
-from tortoisehg.hgqt import qtlib, repotreemodel, clone, settings, thgrepo
+from tortoisehg.hgqt import qtlib, repotreemodel, clone, settings
from PyQt4.QtCore import *
from PyQt4.QtGui import *
@@ -25,9 +25,8 @@
class RepoTreeView(QTreeView):
showMessage = pyqtSignal(QString)
+ menuRequested = pyqtSignal(object, object)
openRepo = pyqtSignal(QString, bool)
- menuRequested = pyqtSignal(object, object)
- addRepo = pyqtSignal(object, QModelIndex, int)
def __init__(self, parent):
QTreeView.__init__(self, parent, allColumnsShowFocus=True)
@@ -106,10 +105,8 @@ accept = False
for u in data.urls():
root = paths.find_root(hglib.fromunicode(u.toLocalFile()))
- if root:
- repo = thgrepo.repository(None,
- path=hglib.fromunicode(root))
- self.addRepo.emit(repo, group, row)
+ if root and not self.model().getRepoItem(root):
+ self.model().addRepo(group, root, row)
accept = True
if accept:
event.setDropAction(Qt.LinkAction)
@@ -135,7 +132,7 @@
def keyPressEvent(self, event):
if event.key() in (Qt.Key_Enter, Qt.Key_Return):
- if self.selitem and self.selitem.internalPointer().details():
+ if self.selitem and self.selitem.internalPointer().isRepo():
self.showFirstTabOrOpen()
else:
super(RepoTreeView, self).keyPressEvent(event)
@@ -145,7 +142,7 @@ self.showMessage.emit('')
def mouseDoubleClickEvent(self, event):
- if self.selitem and self.selitem.internalPointer().details():
+ if self.selitem and self.selitem.internalPointer().isRepo():
self.showFirstTabOrOpen()
else:
super(RepoTreeView, self).mouseDoubleClickEvent(event)
@@ -164,8 +161,6 @@
def showFirstTabOrOpen(self):
'Enter or double click events, show existing or open a new repowidget'
- if not self.selitem:
- return
root = self.selitem.internalPointer().rootpath()
self.openRepo.emit(hglib.tounicode(root), True)
@@ -198,9 +193,8 @@ tv.setColumnHidden(1, True)
tv.showMessage.connect(self.showMessage)
+ tv.menuRequested.connect(self.onMenuRequest)
tv.openRepo.connect(self.openRepo)
- tv.menuRequested.connect(self.onMenuRequest)
- tv.addRepo.connect(self.addRepo)
self.createActions()
QTimer.singleShot(0, self.expand)
@@ -208,15 +202,12 @@ def expand(self):
self.tview.expandToDepth(0)
- def addRepo(self, repo, group=None, row=-1):
- 'workbench has opened a new repowidget, ensure its in the registry'
+ def addRepo(self, root):
+ 'workbench has opened a new repowidget, ensure it is in the registry'
m = self.tview.model()
- it = m.getRepoItem(repo.root)
+ it = m.getRepoItem(root)
if it == None:
- m.addRepo(group, repo, row)
- else:
- # ensure the registry item has a thgrepo instance
- it.ensureRepoLoaded()
+ m.addRepo(None, root, -1)
def showPaths(self, show):
self.tview.setColumnHidden(1, not show)
@@ -310,18 +301,15 @@ path = FD.getExistingDirectory(caption=caption,
options=FD.ShowDirsOnly | FD.ReadOnly)
if path:
- try:
- lpath = hglib.fromunicode(path)
- repo = thgrepo.repository(None, path=lpath)
- self.tview.model().addRepo(self.selitem, repo)
- except error.RepoError:
- # NOTE: here we cannot pass parent=self because self
- # isn't a QWidget. Codes under `if not repo:` should
- # be handled by a widget, not by a model.
- qtlib.WarningMsgBox(
- _('Failed to add repository'),
- _('%s is not a valid repository') % path)
- return
+ root = paths.find_root(hglib.fromunicode(path))
+ if root and not self.tview.model().getRepoItem(root):
+ try:
+ self.tview.model().addRepo(self.selitem, root)
+ except error.RepoError:
+ qtlib.WarningMsgBox(
+ _('Failed to add repository'),
+ _('%s is not a valid repository') % path, parent=self)
+ return
def startSettings(self):
root = self.selitem.internalPointer().rootpath()
@@ -360,3 +348,15 @@ m.removeRows(row, 1, parent)
self.tview.selectionChanged(None, None)
+ @pyqtSlot(QString, QString)
+ def shortNameChanged(self, uroot, uname):
+ it = self.tview.model().getRepoItem(hglib.fromunicode(uroot))
+ if it:
+ it.setShortName(uname)
+ self.tview.model().layoutChanged.emit()
+
+ @pyqtSlot(QString, object)
+ def baseNodeChanged(self, uroot, basenode):
+ it = self.tview.model().getRepoItem(hglib.fromunicode(uroot))
+ if it:
+ it.setBaseNode(basenode)
|
@@ -11,7 +11,7 @@
from tortoisehg.util import hglib
from tortoisehg.hgqt.i18n import _
-from tortoisehg.hgqt import qtlib, thgrepo
+from tortoisehg.hgqt import qtlib
from PyQt4.QtCore import *
from PyQt4.QtGui import *
@@ -117,6 +117,9 @@ self.dump(xw)
xw.writeEndElement()
+ def isRepo(self):
+ return False
+
def details(self):
return ''
@@ -132,30 +135,33 @@
class RepoItem(RepoTreeItem):
- def __init__(self, model, repo=None, parent=None):
+ def __init__(self, model, root=None, parent=None):
RepoTreeItem.__init__(self, model, parent)
- self._repo = repo
- self._root = repo and repo.root or '' # local str
- self._shortname = repo and repo.shortname or '' # unicode
- self._basenode = repo and repo[0].node() or node.nullid
+ self._root = root or ''
+ self._shortname = u''
+ self._basenode = node.nullid
+
+ def isRepo(self):
+ return True
def rootpath(self):
return self._root
def shortname(self):
- if self._repo:
- return self._repo.shortname
- elif self._shortname:
+ if self._shortname:
return self._shortname
else:
return hglib.tounicode(os.path.basename(self._root))
def basenode(self):
"""Return node id of revision 0"""
- if self._repo:
- return self._repo[0].node()
- else:
- return self._basenode or node.nullid
+ return self._basenode
+
+ def setBaseNode(self, basenode):
+ self._basenode = basenode
+
+ def setShortName(self, uname):
+ self._shortname = uname
def data(self, column, role):
if role == Qt.DecorationRole:
@@ -192,15 +198,6 @@ self._basenode = node.bin(str(a.value('', 'basenode').toString()))
RepoTreeItem.undump(self, xr)
- def ensureRepoLoaded(self):
- """load repo object if necessary
-
- Until repo loaded, it uses cached shortname for less overhead.
- """
- if self._repo:
- return
- self._repo = thgrepo.repository(path=self._root)
-
def details(self):
return _('Local Repository %s') % hglib.tounicode(self._root)
|
@@ -213,7 +213,7 @@ def allreposIndex(self):
return self.createIndex(0, 0, self.allrepos)
- def addRepo(self, group, repo, row=-1):
+ def addRepo(self, group, root, row=-1):
grp = group
if grp == None:
grp = self.allreposIndex()
@@ -221,7 +221,7 @@ if row < 0:
row = rgi.childCount()
self.beginInsertRows(grp, row, row)
- rgi.insertChild(row, RepoItem(self, repo))
+ rgi.insertChild(row, RepoItem(self, root))
self.endInsertRows()
def getRepoItem(self, reporoot):
|
@@ -52,6 +52,9 @@
showIcon = pyqtSignal(QIcon)
+ shortNameChanged = pyqtSignal(QString, QString)
+ baseNodeChanged = pyqtSignal(QString, object)
+
repoLinkClicked = pyqtSignal(unicode)
"""Emitted when clicked a link to open repository"""
@@ -69,6 +72,8 @@ self.busyIcons = []
self.namedTabs = {}
self.repolen = len(repo)
+ self.shortname = None
+ self.basenode = None
self.destroyed.connect(self.repo.thginvalidate)
if repo.parents()[0].rev() == -1:
@@ -616,6 +621,14 @@ 'initial batch of revisions loaded'
self.repoview.goto(self._reload_rev) # emits revisionSelected
self.repoview.resizeColumns()
+ if self.repo.shortname != self.shortname:
+ self.shortname = self.repo.shortname
+ self.shortNameChanged.emit(hglib.tounicode(self.repo.root),
+ self.shortname)
+ if len(self.repo) and self.repo[0].node() != self.basenode:
+ self.basenode = self.repo[0].node()
+ self.baseNodeChanged.emit(hglib.tounicode(self.repo.root),
+ self.basenode)
def modelLoaded(self):
'all revisions loaded (graph generator completed)'
@@ -774,6 +787,10 @@ self.revDetailsWidget.reload()
self.titleChanged.emit(self.title())
self.updateTaskTabs()
+ if self.repo.shortname != self.shortname:
+ self.shortname = self.repo.shortname
+ self.shortNameChanged.emit(hglib.tounicode(self.repo.root),
+ self.shortname)
def updateTaskTabs(self):
val = self.repo.ui.config('tortoisehg', 'tasktabs', 'off').lower()
|
@@ -604,6 +604,8 @@ rw.repoLinkClicked.connect(self.openLinkedRepo)
rw.taskTabsWidget.currentChanged.connect(self.updateTaskViewMenu)
rw.toolbarVisibilityChanged.connect(self.updateToolBarActions)
+ rw.shortNameChanged.connect(self.reporegistry.shortNameChanged)
+ rw.baseNodeChanged.connect(self.reporegistry.baseNodeChanged)
tw = self.repoTabsWidget
index = self.repoTabsWidget.addTab(rw, rw.title())
@@ -612,7 +614,7 @@ lambda title: tw.setTabText(tw.indexOf(rw), title))
rw.showIcon.connect(
lambda icon: tw.setTabIcon(tw.indexOf(rw), icon))
- self.reporegistry.addRepo(repo)
+ self.reporegistry.addRepo(repo.root)
self.updateMenu()
|
Loading...