by
Changes to 10 files · Browse files at ca666161b014 Showing diff from parent e548b87269a0 b5fbaedfb641 Diff from another changeset...
@@ -4,7 +4,7 @@ * Pull latest translations from Launchpad
* update url in qtlib.openhelpcontents() (major release only)
* set revision number in doc/source/conf.py
-* tag stable branch of repository, push
+* tag stable branches of thg and shellext repos, push
* build pdf hgbook, check into thg-winbuild (major release only)
* build release installer
* commit extension versions, tag, push thg-winbuild
|
@@ -1152,7 +1152,8 @@ def run(ui, *pats, **opts):
from tortoisehg.util import paths
from tortoisehg.hgqt import thgrepo
- repo = thgrepo.repository(ui, path=paths.find_root())
+ root = opts.get('root', paths.find_root())
+ repo = thgrepo.repository(ui, path=root)
pats = hglib.canonpaths(pats)
os.chdir(repo.root)
return CommitDialog(repo, pats, opts)
|
@@ -288,7 +288,7 @@ if ':' in link:
scheme, param = link.split(':', 1)
if scheme == 'cset':
- rev = self.repo[param].rev()
+ rev = self.repo[hglib.fromunicode(param)].rev()
return self.goto(rev)
QDesktopServices.openUrl(QUrl(link))
|
@@ -9,6 +9,7 @@ from PyQt4.QtCore import *
from PyQt4.QtGui import *
+from tortoisehg.util import hglib
from tortoisehg.hgqt.i18n import _
from tortoisehg.hgqt import revset, qtlib
@@ -40,7 +41,7 @@
#Check if the font contains the glyph needed by the branch combo
if not QFontMetrics(self.font()).inFont(QString(u'\u2605').at(0)):
- self._allBranchesLabel = u'*** %s ***' % _('Show all')
+ self._allBranchesLabel = u'*** %s ***' % _('Show all')
self.entrydlg = revset.RevisionSetQuery(repo, self)
self.entrydlg.progress.connect(self.progress)
@@ -246,8 +247,10 @@ self._branchCombo.clear()
self._branchCombo.addItem(self._allBranchesLabel)
for branch in branches:
- self._branchCombo.addItem(branch)
- self._branchCombo.setItemData(self._branchCombo.count() - 1, branch, Qt.ToolTipRole)
+ self._branchCombo.addItem(hglib.tounicode(branch))
+ self._branchCombo.setItemData(self._branchCombo.count() - 1,
+ hglib.tounicode(branch),
+ Qt.ToolTipRole)
self._branchLabel.setEnabled(self.filterEnabled and (len(branches) > 1 or self._abranchAction.isChecked()))
self._branchCombo.setEnabled(self.filterEnabled and (len(branches) > 1 or self._abranchAction.isChecked()))
self._branchReloading = False
|
@@ -123,13 +123,16 @@ self.setBranch(branch)
def setBranch(self, branch=None, allparents=True):
- self.filterbranch = branch
+ self.filterbranch = branch # unicode
self.invalidateCache()
if self.revset and self.filterbyrevset:
- grapher = revision_grapher(self.repo, branch=branch, revset=self.revset)
+ grapher = revision_grapher(self.repo,
+ branch=hglib.fromunicode(branch),
+ revset=self.revset)
self.graph = Graph(self.repo, grapher, include_mq=False)
else:
- grapher = revision_grapher(self.repo, branch=branch,
+ grapher = revision_grapher(self.repo,
+ branch=hglib.fromunicode(branch),
allparents=allparents)
self.graph = Graph(self.repo, grapher, include_mq=True)
self.rowcount = 0
|
@@ -16,9 +16,6 @@ from PyQt4.QtCore import *
from PyQt4.QtGui import *
-import qtlib
-
-
def settingsfilename():
"""Return path to thg-reporegistry.xml as unicode"""
s = QSettings()
@@ -50,7 +47,8 @@ self.setDragDropMode(QAbstractItemView.DragDrop)
self.setDefaultDropAction(Qt.MoveAction)
self.setDropIndicatorShown(True)
- self.setEditTriggers(QAbstractItemView.DoubleClicked)
+ self.setEditTriggers(QAbstractItemView.DoubleClicked
+ | QAbstractItemView.EditKeyPressed)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
QShortcut('Return', self, self.showFirstTabOrOpen).setContext(
Qt.WidgetShortcut)
@@ -58,8 +56,6 @@ Qt.WidgetShortcut)
QShortcut('Delete', self, self.removeSelected).setContext(
Qt.WidgetShortcut)
- QShortcut('F2', self, self.renameSelected).setContext(
- Qt.WidgetShortcut)
def contextMenuEvent(self, event):
if not self.selitem:
@@ -208,6 +204,8 @@ 'remove selected repository'
s = self.selitem
item = s.internalPointer()
+ if 'remove' not in item.menulist(): # check capability
+ return
if not item.okToDelete():
labels = [(QMessageBox.Yes, _('&Delete')),
(QMessageBox.No, _('Cancel'))]
@@ -222,10 +220,6 @@ self.selectionChanged(None, None)
self.updateSettingsFile.emit()
- def renameSelected(self):
- 'rename selected repository'
- self.edit(self.selitem)
-
class RepoRegistryView(QDockWidget):
showMessage = pyqtSignal(QString)
@@ -278,6 +272,8 @@ # Note that we must make sure that the settings file exists before
# setting thefile watcher
if not os.path.exists(sfile):
+ if not os.path.exists(os.path.dirname(sfile)):
+ os.makedirs(os.path.dirname(sfile))
tv.model().write(sfile)
self.watcher = QFileSystemWatcher(self)
self.watcher.addPath(sfile)
@@ -642,7 +638,7 @@ clip.setText(self.selitem.internalPointer().rootpath())
def startRename(self):
- self.tview.renameSelected()
+ self.tview.edit(self.tview.currentIndex())
def newGroup(self):
self.tview.model().addGroup(_('New Group'))
|
@@ -268,8 +268,8 @@ """
Select revision 'rev' (can be anything understood by repo.changectx())
"""
- if type(rev) is QString:
- rev = str(rev)
+ if isinstance(rev, (unicode, QString)):
+ rev = hglib.fromunicode(rev)
try:
rev = self.repo.changectx(rev).rev()
except error.RepoError:
|
@@ -245,6 +245,10 @@ idx = self.namedTabs[tabname]
self.taskTabsWidget.setCurrentIndex(idx)
+ # restore default splitter position if task tab is invisible
+ if self.repotabs_splitter.sizes()[1] == 0:
+ self.repotabs_splitter.setSizes([1, 1])
+
def title(self):
"""Returns the expected title for this widget [unicode]"""
if self.bundle:
@@ -705,9 +709,8 @@ def setupModels(self):
# Filter revision set in case revisions were removed
self.revset = [r for r in self.revset if r < len(self.repo)]
- branch = hglib.fromunicode(self.ubranch)
self.repomodel = HgRepoListModel(self.repo, self.repoview.colselect[0],
- branch, self.revset,
+ self.ubranch, self.revset,
self.revsetfilter, self)
self.repomodel.filled.connect(self.modelFilled)
self.repomodel.loaded.connect(self.modelLoaded)
|
@@ -18,6 +18,7 @@ import subprocess
import traceback
import zlib
+import gc
from PyQt4.QtCore import *
from PyQt4.QtGui import *
@@ -364,6 +365,52 @@ else:
return checkargs()
+class GarbageCollector(QObject):
+ '''
+ Disable automatic garbage collection and instead collect manually
+ every INTERVAL milliseconds.
+
+ This is done to ensure that garbage collection only happens in the GUI
+ thread, as otherwise Qt can crash.
+ '''
+
+ INTERVAL = 5000
+
+ def __init__(self, parent, debug=False):
+ QObject.__init__(self, parent)
+ self.debug = debug
+
+ self.timer = QTimer(self)
+ self.timer.timeout.connect(self.check)
+
+ self.threshold = gc.get_threshold()
+ gc.disable()
+ self.timer.start(self.INTERVAL)
+ #gc.set_debug(gc.DEBUG_SAVEALL)
+
+ def check(self):
+ #return self.debug_cycles()
+ l0, l1, l2 = gc.get_count()
+ if self.debug:
+ print 'gc_check called:', l0, l1, l2
+ if l0 > self.threshold[0]:
+ num = gc.collect(0)
+ if self.debug:
+ print 'collecting gen 0, found:', num, 'unreachable'
+ if l1 > self.threshold[1]:
+ num = gc.collect(1)
+ if self.debug:
+ print 'collecting gen 1, found:', num, 'unreachable'
+ if l2 > self.threshold[2]:
+ num = gc.collect(2)
+ if self.debug:
+ print 'collecting gen 2, found:', num, 'unreachable'
+
+ def debug_cycles(self):
+ gc.collect()
+ for obj in gc.garbage:
+ print (obj, repr(obj), type(obj))
+
class _QtRunner(QObject):
"""Run Qt app and hold its windows
@@ -389,6 +436,8 @@
def __init__(self):
super(_QtRunner, self).__init__()
+ gc.disable()
+ self.debug = 'THGDEBUG' in os.environ
self._mainapp = None
self._dialogs = []
self.errors = []
@@ -470,6 +519,7 @@ QSettings.setDefaultFormat(QSettings.IniFormat)
self._mainapp = QApplication(sys.argv)
+ self._gc = GarbageCollector(self, self.debug)
try:
# default org is used by QSettings
self._mainapp.setApplicationName('TortoiseHgQt')
|
Loading...