Changeset 65177156186d…
Parent eea6d46db008…
by
Changes to 4 files · Browse files at 65177156186d Showing diff from parent eea6d46db008 Diff from another changeset...
@@ -1010,6 +1010,9 @@ entry(menu, 'reviewboard', fixed, _('Post to Review Board...'), 'reviewboard',
self.sendToReviewBoard)
+ entry(menu, 'rupdate', fixed, _('Remote Update...'), 'hg-update',
+ self.rupdate)
+
self.singlecmenu = menu
self.singlecmenuitems = items
@@ -1252,6 +1255,10 @@ run.postreview(self.repo.ui, rev=self.repoview.selectedRevisions(),
repo=self.repo)
+ def rupdate(self):
+ run.rupdate(self.repo.ui, rev=self.rev,
+ repo=self.repo)
+
def emailRevision(self):
run.email(self.repo.ui, rev=self.repoview.selectedRevisions(),
repo=self.repo)
|
@@ -565,6 +565,11 @@ from tortoisehg.hgqt.postreview import run
return qtrun(run, ui, *pats, **opts)
+def rupdate(ui, *pats, **opts):
+ """update a remote repository"""
+ from tortoisehg.hgqt.rupdate import run
+ return qtrun(run, ui, *pats, **opts)
+
def merge(ui, *pats, **opts):
"""merge wizard"""
from tortoisehg.hgqt.merge import run
|
|
|
@@ -0,0 +1,132 @@ + # Copyright 2011 Ryan Seto <mr.werewolf@gmail.com>
+#
+# rupdate.py - Remote Update dialog for TortoiseHg
+#
+# This dialog lets users update a remote ssh repository.
+#
+# Requires a copy of the rupdate plugin found at:
+# http://bitbucket.org/MrWerewolf/rupdate
+#
+# Also, enable the plugin with the following in mercurial.ini:
+#
+# [extensions]
+# rupdate = /path/to/rupdate
+#
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from mercurial import error, node, merge as mergemod
+
+from tortoisehg.util import hglib, paths
+from tortoisehg.hgqt.i18n import _
+from tortoisehg.hgqt import cmdui, csinfo, qtlib, thgrepo, resolve
+from tortoisehg.hgqt.update import UpdateDialog
+
+class rUpdateDialog(UpdateDialog):
+
+ def __init__(self, repo, rev=None, parent=None, opts={}):
+ super(rUpdateDialog, self).__init__(repo, rev, parent, opts)
+
+ # Get configured paths
+ self.paths = {}
+ fn = self.repo.join('hgrc')
+ fn, cfg = qtlib.loadIniFile([fn], self)
+ if 'paths' in cfg:
+ for alias in cfg['paths']:
+ self.paths[ alias ] = cfg['paths'][alias]
+
+ ### target path combo
+ self.path_combo = pcombo = QComboBox()
+ pcombo.setEditable(True)
+
+ for alias in self.paths:
+ pcombo.addItem(hglib.tounicode(self.paths[alias]))
+
+ ### shift existing items down a row.
+ for i in range(self.grid.count()-1, -1, -1):
+ row, col, rowSp, colSp = self.grid.getItemPosition(i)
+ item = self.grid.takeAt(i)
+ self.grid.removeItem(item)
+ self.grid.addItem(item, row + 1, col, rowSp, colSp, item.alignment())
+
+ ### add target path combo to grid
+ self.grid.addWidget(QLabel(_('Location:')), 0, 0)
+ self.grid.addWidget(pcombo, 0, 1)
+
+ ### Options
+ self.push_chk = QCheckBox(_('Perform a push before updating'
+ ' (-p/--push)'))
+ self.newbranch_chk = QCheckBox(_('Allow pushing new branches'
+ ' (--new-branch)'))
+ self.force_chk = QCheckBox(_('Force push to remote location'
+ ' (-f/--force)'))
+ self.optbox.removeWidget(self.showlog_chk)
+ self.optbox.addWidget(self.push_chk)
+ self.optbox.addWidget(self.newbranch_chk)
+ self.optbox.addWidget(self.force_chk)
+ self.optbox.addWidget(self.showlog_chk)
+
+ # prepare to show
+ self.push_chk.setHidden(True)
+ self.newbranch_chk.setHidden(True)
+ self.force_chk.setHidden(True)
+ self.update_info()
+
+ ### Private Methods ###
+
+ def update_info(self):
+ super(rUpdateDialog, self).update_info()
+
+ # Keep update button enabled.
+ self.update_btn.setDisabled(False)
+
+ def update(self):
+ cmdline = ['rupdate']
+
+ if self.discard_chk.isChecked():
+ cmdline.append('--clean')
+ if self.push_chk.isChecked():
+ cmdline.append('--push')
+ if self.newbranch_chk.isChecked():
+ cmdline.append('--new-branch')
+ if self.force_chk.isChecked():
+ cmdline.append('--force')
+
+ dest = hglib.fromunicode(self.path_combo.currentText())
+ cmdline.append('-d')
+ cmdline.append(dest)
+
+ # Refer to the revision by the short hash.
+ rev = hglib.fromunicode(self.rev_combo.currentText())
+ revShortHash = node.short(self.repo[rev].node())
+ cmdline.append(revShortHash)
+
+ # start updating
+ self.repo.incrementBusyCount()
+ self.cmd.run(cmdline)
+
+ ### Signal Handlers ###
+
+ def show_options(self, visible):
+ self.push_chk.setShown(visible)
+ self.newbranch_chk.setShown(visible)
+ self.force_chk.setShown(visible)
+ self.showlog_chk.setShown(visible)
+
+ def command_started(self):
+ super(rUpdateDialog, self).command_started()
+ self.update_btn.setHidden(False)
+
+def run(ui, *pats, **opts):
+ from tortoisehg.util import paths
+ repo = thgrepo.repository(ui, path=paths.find_root())
+ rev = None
+ if opts.get('rev'):
+ rev = opts.get('rev')
+ elif len(pats) == 1:
+ rev = pats[0]
+ return rUpdateDialog(repo, rev, None, opts)
|
@@ -35,15 +35,15 @@ box.setSpacing(6)
## main layout grid
- grid = QGridLayout()
- grid.setSpacing(6)
- box.addLayout(grid)
+ self.grid = QGridLayout()
+ self.grid.setSpacing(6)
+ box.addLayout(self.grid)
### target revision combo
self.rev_combo = combo = QComboBox()
combo.setEditable(True)
- grid.addWidget(QLabel(_('Update to:')), 0, 0)
- grid.addWidget(combo, 0, 1)
+ self.grid.addWidget(QLabel(_('Update to:')), 0, 0)
+ self.grid.addWidget(combo, 0, 1)
if rev is None:
rev = self.repo.dirstate.branch()
@@ -65,31 +65,31 @@ style = csinfo.labelstyle(contents=items, width=350, selectable=True)
factory = csinfo.factory(self.repo, style=style)
self.target_info = factory()
- grid.addWidget(QLabel(_('Target:')), 1, 0, Qt.AlignLeft | Qt.AlignTop)
- grid.addWidget(self.target_info, 1, 1)
+ self.grid.addWidget(QLabel(_('Target:')), 1, 0, Qt.AlignLeft | Qt.AlignTop)
+ self.grid.addWidget(self.target_info, 1, 1)
### parent revision info
self.ctxs = self.repo[None].parents()
if len(self.ctxs) == 2:
self.p1_info = factory()
- grid.addWidget(QLabel(_('Parent 1:')), 2, 0, Qt.AlignLeft | Qt.AlignTop)
- grid.addWidget(self.p1_info, 2, 1)
+ self.grid.addWidget(QLabel(_('Parent 1:')), 2, 0, Qt.AlignLeft | Qt.AlignTop)
+ self.grid.addWidget(self.p1_info, 2, 1)
self.p2_info = factory()
- grid.addWidget(QLabel(_('Parent 2:')), 3, 0, Qt.AlignLeft | Qt.AlignTop)
- grid.addWidget(self.p2_info, 3, 1)
+ self.grid.addWidget(QLabel(_('Parent 2:')), 3, 0, Qt.AlignLeft | Qt.AlignTop)
+ self.grid.addWidget(self.p2_info, 3, 1)
else:
self.p1_info = factory()
- grid.addWidget(QLabel(_('Parent:')), 2, 0, Qt.AlignLeft | Qt.AlignTop)
- grid.addWidget(self.p1_info, 2, 1)
+ self.grid.addWidget(QLabel(_('Parent:')), 2, 0, Qt.AlignLeft | Qt.AlignTop)
+ self.grid.addWidget(self.p1_info, 2, 1)
### options
- optbox = QVBoxLayout()
- optbox.setSpacing(6)
+ self.optbox = QVBoxLayout()
+ self.optbox.setSpacing(6)
expander = qtlib.ExpanderLabel(_('Options:'), False)
expander.expanded.connect(self.show_options)
- row = grid.rowCount()
- grid.addWidget(expander, row, 0, Qt.AlignLeft | Qt.AlignTop)
- grid.addLayout(optbox, row, 1)
+ row = self.grid.rowCount()
+ self.grid.addWidget(expander, row, 0, Qt.AlignLeft | Qt.AlignTop)
+ self.grid.addLayout(self.optbox, row, 1)
self.discard_chk = QCheckBox(_('Discard local changes, no backup '
'(-C/--clean)'))
@@ -97,10 +97,10 @@ self.autoresolve_chk = QCheckBox(_('Automatically resolve merge conflicts '
'where possible'))
self.showlog_chk = QCheckBox(_('Always show command log'))
- optbox.addWidget(self.discard_chk)
- optbox.addWidget(self.merge_chk)
- optbox.addWidget(self.autoresolve_chk)
- optbox.addWidget(self.showlog_chk)
+ self.optbox.addWidget(self.discard_chk)
+ self.optbox.addWidget(self.merge_chk)
+ self.optbox.addWidget(self.autoresolve_chk)
+ self.optbox.addWidget(self.showlog_chk)
self.discard_chk.setChecked(bool(opts.get('clean')))
self.autoresolve_chk.setChecked(
|
Loading...