def revisionInfoLayout(repo): """ Return a layout containg the revision information (local and other) """ hbox = QHBoxLayout() hbox.setSpacing(0) hbox.setContentsMargins(*MARGINS) vbox = QVBoxLayout() vbox.setContentsMargins(*MARGINS) hbox.addLayout(vbox) localrevtitle = qtlib.LabeledSeparator(_("Local revision information")) localrevinfo = csinfo.create(repo) localrevinfo.update(repo[None].p1()) vbox.addWidget(localrevtitle) vbox.addWidget(localrevinfo) vbox.addStretch() vbox = QVBoxLayout() vbox.setContentsMargins(*MARGINS) hbox.addLayout(vbox) otherrevtitle = qtlib.LabeledSeparator(_("Other revision information")) otherrevinfo = csinfo.create(repo) otherrevinfo.update(repo[None].p2()) vbox.addWidget(otherrevtitle) vbox.addWidget(otherrevinfo) vbox.addStretch() return hbox
def revisionInfoLayout(repo): """ Return a layout containg the revision information (local and other) """ hbox = QHBoxLayout() hbox.setSpacing(0) hbox.setContentsMargins(*MARGINS) vbox = QVBoxLayout() vbox.setContentsMargins(*MARGINS) hbox.addLayout(vbox) localrevtitle = qtlib.LabeledSeparator(_('Local revision information')) localrevinfo = csinfo.create(repo) localrevinfo.update(repo[None].p1()) vbox.addWidget(localrevtitle) vbox.addWidget(localrevinfo) vbox.addStretch() vbox = QVBoxLayout() vbox.setContentsMargins(*MARGINS) hbox.addLayout(vbox) otherrevtitle = qtlib.LabeledSeparator(_('Other revision information')) otherrevinfo = csinfo.create(repo) otherrevinfo.update(repo[None].p2()) vbox.addWidget(otherrevtitle) vbox.addWidget(otherrevinfo) vbox.addStretch() return hbox
def __init__(self, repoagent, revs, parent): super(CompressDialog, self).__init__(parent) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent self.revs = revs box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(6,)*4) self.setLayout(box) style = csinfo.panelstyle(selectable=True) srcb = QGroupBox( _('Compress changesets up to and including')) srcb.setLayout(QVBoxLayout()) srcb.layout().setContentsMargins(*(2,)*4) source = csinfo.create(self.repo, revs[0], style, withupdate=True) srcb.layout().addWidget(source) self.layout().addWidget(srcb) destb = QGroupBox( _('Onto destination')) destb.setLayout(QVBoxLayout()) destb.layout().setContentsMargins(*(2,)*4) dest = csinfo.create(self.repo, revs[1], style, withupdate=True) destb.layout().addWidget(dest) self.destcsinfo = dest self.layout().addWidget(destb) self.cmd = cmdui.Widget(True, True, self) self.cmd.commandFinished.connect(self.commandFinished) self.cmd.setShowOutput(True) self.showMessage.connect(self.cmd.stbar.showMessage) self.cmd.stbar.linkActivated.connect(self.linkActivated) self.layout().addWidget(self.cmd, 2) bbox = QDialogButtonBox() self.cancelbtn = bbox.addButton(QDialogButtonBox.Cancel) self.cancelbtn.clicked.connect(self.reject) self.compressbtn = bbox.addButton(_('Compress'), QDialogButtonBox.ActionRole) self.compressbtn.clicked.connect(self.compress) self.layout().addWidget(bbox) self.bbox = bbox self.showMessage.emit(_('Checking...')) QTimer.singleShot(0, self.checkStatus) self.setMinimumWidth(480) self.setMaximumHeight(800) self.resize(0, 340) repo = repoagent.rawRepo() self.setWindowTitle(_('Compress - %s') % repo.displayname) self.restoreSettings()
def __init__(self, repoagent, revs, parent): super(CompressDialog, self).__init__(parent) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent self.revs = revs box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(6,)*4) box.setSizeConstraint(QLayout.SetMinAndMaxSize) self.setLayout(box) style = csinfo.panelstyle(selectable=True) srcb = QGroupBox(_('Compress changesets up to and including')) srcb.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) srcb.setLayout(QVBoxLayout()) srcb.layout().setContentsMargins(*(2,)*4) source = csinfo.create(self.repo, revs[0], style, withupdate=True) srcb.layout().addWidget(source) self.layout().addWidget(srcb) destb = QGroupBox(_('Onto destination')) destb.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) destb.setLayout(QVBoxLayout()) destb.layout().setContentsMargins(*(2,)*4) dest = csinfo.create(self.repo, revs[1], style, withupdate=True) destb.layout().addWidget(dest) self.destcsinfo = dest self.layout().addWidget(destb) self._cmdcontrol = cmd = cmdui.CmdSessionControlWidget(self) cmd.finished.connect(self.done) cmd.setLogVisible(True) self.compressbtn = cmd.addButton(_('Compress'), QDialogButtonBox.AcceptRole) self.compressbtn.setEnabled(False) self.compressbtn.clicked.connect(self.compress) self.layout().addWidget(cmd) cmd.showStatusMessage(_('Checking...')) self._wctxcleaner = wctxcleaner.WctxCleaner(repoagent, self) self._wctxcleaner.checkFinished.connect(self._checkCompleted) cmd.linkActivated.connect(self._wctxcleaner.runCleaner) QTimer.singleShot(0, self._wctxcleaner.check) self.resize(480, 340) self.setWindowTitle(_('Compress - %s') % repoagent.displayName()) self.restoreSettings()
def RevPanelWidget(repo): '''creates a rev panel widget and returns it''' custom = csinfo.custom(data=data_func, label=label_func, markup=markup_func) style = csinfo.panelstyle(contents=('cset', 'branch', 'close', 'user', 'dateage', 'parents', 'children', 'tags', 'transplant', 'p4', 'svn'), selectable=True, expandable=True) return csinfo.create(repo, style=style, custom=custom)
def RevPanelWidget(repo): '''creates a rev panel widget and returns it''' custom = csinfo.custom(data=data_func, label=label_func, markup=create_markup_func(repo.ui)) style = csinfo.panelstyle(contents=('cset', 'branch', 'obsolete', 'close', 'user', 'dateage', 'parents', 'children', 'tags', 'graft', 'transplant', 'mqoriginalparent', 'precursors', 'successors', 'p4', 'svn', 'converted'), selectable=True, expandable=True) return csinfo.create(repo, style=style, custom=custom)
def RevPanelWidget(repo): '''creates a rev panel widget and returns it''' custom = csinfo.custom(data=data_func, label=label_func, markup=markup_func) style = csinfo.panelstyle(contents=('cset', 'branch', 'close', 'user', 'dateage', 'parents', 'children', 'tags', 'graft', 'transplant', 'p4', 'svn', 'converted'), selectable=True, expandable=True) return csinfo.create(repo, style=style, custom=custom)
def __init__(self, repoagent, parent): super(ResultPage, self).__init__(repoagent, parent) self.setTitle(_('Finished')) self.setSubTitle(' ') self.setFinalPage(True) self.setLayout(QVBoxLayout()) sep = qtlib.LabeledSeparator(_('Backout changeset')) self.layout().addWidget(sep) bkCsInfo = csinfo.create(self.repo, 'tip', withupdate=True) self.layout().addWidget(bkCsInfo) self.bkCsInfo = bkCsInfo self.layout().addStretch(1)
def __init__(self, repo, parent): super(ResultPage, self).__init__(repo, parent) self.setTitle(_('Finished')) self.setSubTitle(' ') self.setFinalPage(True) self.setLayout(QVBoxLayout()) merge_sep = qtlib.LabeledSeparator(_('Merge changeset')) self.layout().addWidget(merge_sep) mergeCsInfo = csinfo.create(self.repo, 'tip', withupdate=True) self.layout().addWidget(mergeCsInfo) self.mergeCsInfo = mergeCsInfo self.layout().addStretch(1)
def __init__(self, repoagent, parent): super(CommitPage, self).__init__(repoagent, parent) self.commitComplete = False self.setTitle(_('Commit backout and merge results')) self.setSubTitle(' ') self.setLayout(QVBoxLayout()) self.setCommitPage(True) repo = repoagent.rawRepo() # csinfo def label_func(widget, item, ctx): if item == 'rev': return _('Revision:') elif item == 'parents': return _('Parents') raise csinfo.UnknownItem() def data_func(widget, item, ctx): if item == 'rev': return _('Working Directory'), str(ctx) elif item == 'parents': parents = [] cbranch = ctx.branch() for pctx in ctx.parents(): branch = None if hasattr(pctx, 'branch') and pctx.branch() != cbranch: branch = pctx.branch() parents.append((str(pctx.rev()), str(pctx), branch, pctx)) return parents raise csinfo.UnknownItem() def markup_func(widget, item, value): if item == 'rev': text, rev = value if self.wizard() and self.wizard().parentbackout: return '%s (%s)' % (text, rev) else: return '<a href="view">%s</a> (%s)' % (text, rev) elif item == 'parents': def branch_markup(branch): opts = dict(fg='black', bg='#aaffaa') return qtlib.markup(' %s ' % branch, **opts) csets = [] for rnum, rid, branch, pctx in value: line = '%s (%s)' % (rnum, rid) if branch: line = '%s %s' % (line, branch_markup(branch)) msg = widget.info.get_data('summary', widget, pctx, widget.custom) if msg: line = '%s %s' % (line, msg) csets.append(line) return csets raise csinfo.UnknownItem() custom = csinfo.custom(label=label_func, data=data_func, markup=markup_func) contents = ('rev', 'user', 'dateage', 'branch', 'parents') style = csinfo.panelstyle(contents=contents, margin=6) # merged files rev_sep = qtlib.LabeledSeparator(_('Working Directory (merged)')) self.layout().addWidget(rev_sep) bkCsInfo = csinfo.create(repo, None, style, custom=custom, withupdate=True) bkCsInfo.linkActivated.connect(self.onLinkActivated) self.layout().addWidget(bkCsInfo) # commit message area msg_sep = qtlib.LabeledSeparator(_('Commit message')) self.layout().addWidget(msg_sep) msgEntry = messageentry.MessageEntry(self) msgEntry.installEventFilter(qscilib.KeyPressInterceptor(self)) msgEntry.refresh(repo) msgEntry.loadSettings(QSettings(), 'backout/message') msgEntry.textChanged.connect(self.completeChanged) self.layout().addWidget(msgEntry) self.msgEntry = msgEntry self.cmd = cmdui.Widget(True, False, self) self.cmd.commandFinished.connect(self.onCommandFinished) self.cmd.setShowOutput(False) self.layout().addWidget(self.cmd) def tryperform(): if self.isComplete(): self.wizard().next() actionEnter = QAction('alt-enter', self) actionEnter.setShortcuts( [Qt.CTRL + Qt.Key_Return, Qt.CTRL + Qt.Key_Enter]) actionEnter.triggered.connect(tryperform) self.addAction(actionEnter) self.skiplast = QCheckBox( _('Skip final confirmation page, ' 'close after commit.')) checked = QSettings().value('backout/skiplast', False).toBool() self.skiplast.setChecked(checked) self.layout().addWidget(self.skiplast) def eng_toggled(checked): if self.isComplete(): oldmsg = self.msgEntry.text() if self.wizard().backoutmergeparentrev: msgset = i18n.keepgettext()._( 'Backed out merge changeset: ') else: msgset = i18n.keepgettext()._('Backed out changeset: ') msg = checked and msgset['id'] or msgset['str'] if oldmsg and oldmsg != msg: if not qtlib.QuestionMsgBox( _('Confirm Discard Message'), _('Discard current backout message?'), parent=self): self.engChk.blockSignals(True) self.engChk.setChecked(not checked) self.engChk.blockSignals(False) return self.msgEntry.setText(msg + str(self.repo[self.wizard().backoutrev])) self.msgEntry.moveCursorToEnd() self.engChk = QCheckBox(_('Use English backout message')) self.engChk.toggled.connect(eng_toggled) engmsg = self.repo.ui.configbool('tortoisehg', 'engmsg', False) self.engChk.setChecked(engmsg) self.layout().addWidget(self.engChk)
def __init__(self, repoagent, parent, **opts): super(RebaseDialog, self).__init__(parent) self.setWindowIcon(qtlib.geticon('hg-rebase')) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent repo = repoagent.rawRepo() self.opts = opts self.aborted = False box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(6, ) * 4) self.setLayout(box) style = csinfo.panelstyle(selectable=True) srcb = QGroupBox(_('Rebase changeset and descendants')) srcb.setLayout(QVBoxLayout()) srcb.layout().setContentsMargins(*(2, ) * 4) s = opts.get('source', '.') source = csinfo.create(self.repo, s, style, withupdate=True) srcb.layout().addWidget(source) self.layout().addWidget(srcb) destb = QGroupBox(_('To rebase destination')) destb.setLayout(QVBoxLayout()) destb.layout().setContentsMargins(*(2, ) * 4) d = opts.get('dest', '.') dest = csinfo.create(self.repo, d, style, withupdate=True) destb.layout().addWidget(dest) self.destcsinfo = dest self.layout().addWidget(destb) sep = qtlib.LabeledSeparator(_('Options')) self.layout().addWidget(sep) self.keepchk = QCheckBox(_('Keep original changesets')) self.keepchk.setChecked(opts.get('keep', False)) self.layout().addWidget(self.keepchk) self.keepbrancheschk = QCheckBox(_('Keep original branch names')) self.keepbrancheschk.setChecked(opts.get('keepbranches', False)) self.layout().addWidget(self.keepbrancheschk) self.collapsechk = QCheckBox(_('Collapse the rebased changesets ')) self.collapsechk.setChecked(opts.get('collapse', False)) self.layout().addWidget(self.collapsechk) self.autoresolvechk = QCheckBox( _('Automatically resolve merge conflicts ' 'where possible')) self.autoresolvechk.setChecked( repo.ui.configbool('tortoisehg', 'autoresolve', False)) self.layout().addWidget(self.autoresolvechk) if 'hgsubversion' in repo.extensions(): self.svnchk = QCheckBox( _('Rebase unpublished onto Subversion head ' '(override source, destination)')) self.layout().addWidget(self.svnchk) else: self.svnchk = None self.cmd = cmdui.Widget(True, True, self) self.cmd.commandFinished.connect(self.commandFinished) self.showMessage.connect(self.cmd.stbar.showMessage) self.cmd.stbar.linkActivated.connect(self.linkActivated) self.layout().addWidget(self.cmd, 2) bbox = QDialogButtonBox() self.cancelbtn = bbox.addButton(QDialogButtonBox.Cancel) self.cancelbtn.clicked.connect(self.reject) self.rebasebtn = bbox.addButton(_('Rebase'), QDialogButtonBox.ActionRole) self.rebasebtn.clicked.connect(self.rebase) self.abortbtn = bbox.addButton(_('Abort'), QDialogButtonBox.ActionRole) self.abortbtn.clicked.connect(self.abort) self.layout().addWidget(bbox) self.bbox = bbox if self.checkResolve() or not (s or d): for w in (srcb, destb, sep, self.keepchk, self.collapsechk, self.keepbrancheschk): w.setHidden(True) self.cmd.setShowOutput(True) else: self.showMessage.emit(_('Checking...')) self.abortbtn.setEnabled(False) self.rebasebtn.setEnabled(False) QTimer.singleShot(0, self.checkStatus) self.setMinimumWidth(480) self.setMaximumHeight(800) self.resize(0, 340) self.setWindowTitle(_('Rebase - %s') % self.repo.displayname)
def __init__(self, repo, parent, **opts): super(GraftDialog, self).__init__(parent) self.setWindowIcon(qtlib.geticon('hg-transplant')) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint) self.repo = repo self._graftstatefile = self.repo.join('graftstate') self.opts = opts self.aborted = False self.valid = True destrev = opts.get('dest', '.') def cleanrevlist(revlist): return [self.repo[rev].rev() for rev in revlist] self.sourcelist = cleanrevlist(opts.get('source', ['.'])) currgraftrevs = self.graftstate() if currgraftrevs: currgraftrevs = cleanrevlist(currgraftrevs) if self.sourcelist != currgraftrevs: res = qtlib.CustomPrompt(_('Interrupted graft operation found'), _('An interrupted graft operation has been found.\n\n' 'You cannot perform a different graft operation unless ' 'you abort the interrupted graft operation first.'), self, (_('Continue or abort interrupted graft operation?'), _('Cancel')), 1, 2).run() if res != 0: # Cancel self.valid = False return # Continue creating the dialog, but use the graft source # of the existing, interrupted graft as the source, rather than # the one that was passed as an option to the dialog constructor self.sourcelist = currgraftrevs box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(6,)*4) self.setLayout(box) if len(self.sourcelist) > 1: listlabel = qtlib.LabeledSeparator( _('Graft %d changesets on top of changeset %s') \ % (len(self.sourcelist), destrev)) self.layout().addWidget(listlabel) self.cslist = cslist.ChangesetList(self.repo) self.cslist.update(self.sourcelist) self.layout().addWidget(self.cslist) style = csinfo.panelstyle(selectable=True) self.srcb = srcb = QGroupBox() srcb.setLayout(QVBoxLayout()) srcb.layout().setContentsMargins(*(2,)*4) self.source = csinfo.create(self.repo, None, style, withupdate=True) self._updateSource(0) srcb.layout().addWidget(self.source) self.layout().addWidget(srcb) destb = QGroupBox( _('To graft destination')) destb.setLayout(QVBoxLayout()) destb.layout().setContentsMargins(*(2,)*4) dest = csinfo.create(self.repo, destrev, style, withupdate=True) destb.layout().addWidget(dest) self.destcsinfo = dest self.layout().addWidget(destb) sep = qtlib.LabeledSeparator(_('Options')) self.layout().addWidget(sep) self.autoresolvechk = QCheckBox(_('Automatically resolve merge conflicts ' 'where possible')) self.autoresolvechk.setChecked( repo.ui.configbool('tortoisehg', 'autoresolve', False)) self.layout().addWidget(self.autoresolvechk) self.cmd = cmdui.Widget(True, True, self) self.cmd.commandFinished.connect(self.commandFinished) self.showMessage.connect(self.cmd.stbar.showMessage) self.cmd.stbar.linkActivated.connect(self.linkActivated) self.layout().addWidget(self.cmd, 2) bbox = QDialogButtonBox() self.cancelbtn = bbox.addButton(QDialogButtonBox.Cancel) self.cancelbtn.clicked.connect(self.reject) self.graftbtn = bbox.addButton(_('Graft'), QDialogButtonBox.ActionRole) self.graftbtn.clicked.connect(self.graft) self.abortbtn = bbox.addButton(_('Abort'), QDialogButtonBox.ActionRole) self.abortbtn.clicked.connect(self.abort) self.layout().addWidget(bbox) self.bbox = bbox if self.checkResolve(): self.abortbtn.setEnabled(True) else: self.showMessage.emit(_('Checking...')) self.abortbtn.setEnabled(False) self.graftbtn.setEnabled(False) QTimer.singleShot(0, self.checkStatus) self.setMinimumWidth(480) self.setMaximumHeight(800) self.resize(0, 340) self.setWindowTitle(_('Graft - %s') % self.repo.displayname)
def __init__(self, repoagent, parent, **opts): super(GraftDialog, self).__init__(parent) self.setWindowIcon(qtlib.geticon('hg-transplant')) self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent self._cmdsession = cmdcore.nullCmdSession() self._graftstatefile = self.repo.join('graftstate') self.valid = True def cleanrevlist(revlist): return [self.repo[rev].rev() for rev in revlist] self.sourcelist = cleanrevlist(opts.get('source', ['.'])) currgraftrevs = self.graftstate() if currgraftrevs: currgraftrevs = cleanrevlist(currgraftrevs) if self.sourcelist != currgraftrevs: res = qtlib.CustomPrompt(_('Interrupted graft operation found'), _('An interrupted graft operation has been found.\n\n' 'You cannot perform a different graft operation unless ' 'you abort the interrupted graft operation first.'), self, (_('Continue or abort interrupted graft operation?'), _('Cancel')), 1, 2).run() if res != 0: # Cancel self.valid = False return # Continue creating the dialog, but use the graft source # of the existing, interrupted graft as the source, rather than # the one that was passed as an option to the dialog constructor self.sourcelist = currgraftrevs box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(6,)*4) self.setLayout(box) self.srcb = srcb = QGroupBox() srcb.setLayout(QVBoxLayout()) srcb.layout().setContentsMargins(*(2,)*4) self.cslist = cslist.ChangesetList(self.repo) self._updateSource(0) srcb.layout().addWidget(self.cslist) self.layout().addWidget(srcb) destrev = self.repo['.'].rev() style = csinfo.panelstyle(selectable=True) destb = QGroupBox(_('To graft destination')) destb.setLayout(QVBoxLayout()) destb.layout().setContentsMargins(*(2,)*4) dest = csinfo.create(self.repo, destrev, style, withupdate=True) destb.layout().addWidget(dest) self.destcsinfo = dest self.layout().addWidget(destb) sep = qtlib.LabeledSeparator(_('Options')) self.layout().addWidget(sep) self._optchks = {} for name, text in [ ('currentuser', _('Use my user name instead of graft ' 'committer user name')), ('currentdate', _('Use current date')), ('log', _('Append graft info to log message')), ('autoresolve', _('Automatically resolve merge conflicts ' 'where possible'))]: self._optchks[name] = w = QCheckBox(text) self.layout().addWidget(w) self._cmdlog = cmdui.LogWidget(self) self._cmdlog.hide() self.layout().addWidget(self._cmdlog, 2) self._stbar = cmdui.ThgStatusBar(self) self._stbar.setSizeGripEnabled(False) self._stbar.linkActivated.connect(self.linkActivated) self.layout().addWidget(self._stbar) bbox = QDialogButtonBox() self.cancelbtn = bbox.addButton(QDialogButtonBox.Cancel) self.cancelbtn.clicked.connect(self.reject) self.graftbtn = bbox.addButton(_('Graft'), QDialogButtonBox.ActionRole) self.graftbtn.clicked.connect(self.graft) self.abortbtn = bbox.addButton(_('Abort'), QDialogButtonBox.ActionRole) self.abortbtn.clicked.connect(self.abort) self.layout().addWidget(bbox) self.bbox = bbox self._wctxcleaner = wctxcleaner.WctxCleaner(repoagent, self) self._wctxcleaner.checkFinished.connect(self._onCheckFinished) if self.checkResolve(): self.abortbtn.setEnabled(True) else: self._stbar.showMessage(_('Checking...')) self.abortbtn.setEnabled(False) self.graftbtn.setEnabled(False) QTimer.singleShot(0, self._wctxcleaner.check) self.setMinimumWidth(480) self.setMaximumHeight(800) self.resize(0, 340) self.setWindowTitle(_('Graft - %s') % repoagent.displayName()) self._readSettings()
def __init__(self, repo, parent): super(CommitPage, self).__init__(repo, parent) self.setTitle(_('Commit merge results')) self.setSubTitle(' ') self.setLayout(QVBoxLayout()) self.setCommitPage(True) # csinfo def label_func(widget, item, ctx): if item == 'rev': return _('Revision:') elif item == 'parents': return _('Parents') raise csinfo.UnknownItem() def data_func(widget, item, ctx): if item == 'rev': return _('Working Directory'), str(ctx) elif item == 'parents': parents = [] cbranch = ctx.branch() for pctx in ctx.parents(): branch = None if hasattr(pctx, 'branch') and pctx.branch() != cbranch: branch = pctx.branch() parents.append((str(pctx.rev()), str(pctx), branch, pctx)) return parents raise csinfo.UnknownItem() def markup_func(widget, item, value): if item == 'rev': text, rev = value return '<a href="view">%s</a> (%s)' % (text, rev) elif item == 'parents': def branch_markup(branch): opts = dict(fg='black', bg='#aaffaa') return qtlib.markup(' %s ' % branch, **opts) csets = [] for rnum, rid, branch, pctx in value: line = '%s (%s)' % (rnum, rid) if branch: line = '%s %s' % (line, branch_markup(branch)) msg = widget.info.get_data('summary', widget, pctx, widget.custom) if msg: line = '%s %s' % (line, msg) csets.append(line) return csets raise csinfo.UnknownItem() custom = csinfo.custom(label=label_func, data=data_func, markup=markup_func) contents = ('rev', 'user', 'dateage', 'branch', 'parents') style = csinfo.panelstyle(contents=contents, margin=6) # merged files rev_sep = qtlib.LabeledSeparator(_('Working Directory (merged)')) self.layout().addWidget(rev_sep) mergeCsInfo = csinfo.create(repo, None, style, custom=custom, withupdate=True) mergeCsInfo.linkActivated.connect(self.onLinkActivated) self.layout().addWidget(mergeCsInfo) # commit message area msg_sep = qtlib.LabeledSeparator(_('Commit message')) self.layout().addWidget(msg_sep) msgEntry = messageentry.MessageEntry(self) msgEntry.installEventFilter(qscilib.KeyPressInterceptor(self)) msgEntry.refresh(repo) msgEntry.loadSettings(QSettings(), 'merge/message') msgEntry.textChanged.connect(self.completeChanged) self.layout().addWidget(msgEntry) self.msgEntry = msgEntry self.cmd = cmdui.Widget(True, False, self) self.cmd.commandFinished.connect(self.onCommandFinished) self.cmd.setShowOutput(False) self.layout().addWidget(self.cmd) self.delayednext = False def tryperform(): if self.isComplete(): self.wizard().next() actionEnter = QAction('alt-enter', self) actionEnter.setShortcuts([Qt.CTRL+Qt.Key_Return, Qt.CTRL+Qt.Key_Enter]) actionEnter.triggered.connect(tryperform) self.addAction(actionEnter) self.skiplast = QCheckBox(_('Skip final confirmation page, ' 'close after commit.')) checked = QSettings().value('merge/skiplast', False).toBool() self.skiplast.setChecked(checked) self.layout().addWidget(self.skiplast)
def ParentWidget(repo): 'creates a parent rev widget and returns it' custom = csinfo.custom(data=data_func, label=label_func, markup=nomarkup) style = csinfo.panelstyle(contents=('parents', 'ishead', 'isclose'), selectable=True) return csinfo.create(repo, style=style, custom=custom)
def __init__(self, repo, parent): super(CommitPage, self).__init__(repo, parent) self.commitComplete = False self.setTitle(_('Commit backout and merge results')) self.setSubTitle(' ') self.setLayout(QVBoxLayout()) self.setCommitPage(True) # csinfo def label_func(widget, item, ctx): if item == 'rev': return _('Revision:') elif item == 'parents': return _('Parents') raise csinfo.UnknownItem() def data_func(widget, item, ctx): if item == 'rev': return _('Working Directory'), str(ctx) elif item == 'parents': parents = [] cbranch = ctx.branch() for pctx in ctx.parents(): branch = None if hasattr(pctx, 'branch') and pctx.branch() != cbranch: branch = pctx.branch() parents.append((str(pctx.rev()), str(pctx), branch, pctx)) return parents raise csinfo.UnknownItem() def markup_func(widget, item, value): if item == 'rev': text, rev = value if self.wizard() and self.wizard().parentbackout: return '%s (%s)' % (text, rev) else: return '<a href="view">%s</a> (%s)' % (text, rev) elif item == 'parents': def branch_markup(branch): opts = dict(fg='black', bg='#aaffaa') return qtlib.markup(' %s ' % branch, **opts) csets = [] for rnum, rid, branch, pctx in value: line = '%s (%s)' % (rnum, rid) if branch: line = '%s %s' % (line, branch_markup(branch)) msg = widget.info.get_data('summary', widget, pctx, widget.custom) if msg: line = '%s %s' % (line, msg) csets.append(line) return csets raise csinfo.UnknownItem() custom = csinfo.custom(label=label_func, data=data_func, markup=markup_func) contents = ('rev', 'user', 'dateage', 'branch', 'parents') style = csinfo.panelstyle(contents=contents, margin=6) # merged files rev_sep = qtlib.LabeledSeparator(_('Working Directory (merged)')) self.layout().addWidget(rev_sep) bkCsInfo = csinfo.create(repo, None, style, custom=custom, withupdate=True) bkCsInfo.linkActivated.connect(self.onLinkActivated) self.layout().addWidget(bkCsInfo) # commit message area msg_sep = qtlib.LabeledSeparator(_('Commit message')) self.layout().addWidget(msg_sep) msgEntry = messageentry.MessageEntry(self) msgEntry.installEventFilter(qscilib.KeyPressInterceptor(self)) msgEntry.refresh(repo) msgEntry.loadSettings(QSettings(), 'backout/message') msgEntry.textChanged.connect(self.completeChanged) self.layout().addWidget(msgEntry) self.msgEntry = msgEntry self.cmd = cmdui.Widget(True, False, self) self.cmd.commandFinished.connect(self.onCommandFinished) self.cmd.setShowOutput(False) self.layout().addWidget(self.cmd) def tryperform(): if self.isComplete(): self.wizard().next() actionEnter = QAction('alt-enter', self) actionEnter.setShortcuts([Qt.CTRL+Qt.Key_Return, Qt.CTRL+Qt.Key_Enter]) actionEnter.triggered.connect(tryperform) self.addAction(actionEnter) self.skiplast = QCheckBox(_('Skip final confirmation page, ' 'close after commit.')) checked = QSettings().value('backout/skiplast', False).toBool() self.skiplast.setChecked(checked) self.layout().addWidget(self.skiplast) def eng_toggled(checked): if self.isComplete(): oldmsg = self.msgEntry.text() if self.wizard().backoutmergeparentrev: msgset = i18n.keepgettext()._( 'Backed out merge changeset: ') else: msgset = i18n.keepgettext()._('Backed out changeset: ') msg = checked and msgset['id'] or msgset['str'] if oldmsg and oldmsg != msg: if not qtlib.QuestionMsgBox(_('Confirm Discard Message'), _('Discard current backout message?'), parent=self): self.engChk.blockSignals(True) self.engChk.setChecked(not checked) self.engChk.blockSignals(False) return self.msgEntry.setText(msg + str(self.repo[self.wizard().backoutrev])) self.msgEntry.moveCursorToEnd() self.engChk = QCheckBox(_('Use English backout message')) self.engChk.toggled.connect(eng_toggled) engmsg = self.repo.ui.configbool('tortoisehg', 'engmsg', False) self.engChk.setChecked(engmsg) self.layout().addWidget(self.engChk)
def __init__(self, repoagent, parent, **opts): super(RebaseDialog, self).__init__(parent) self.setWindowIcon(qtlib.geticon('hg-rebase')) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent repo = repoagent.rawRepo() self.opts = opts self.aborted = False box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(6,)*4) self.setLayout(box) style = csinfo.panelstyle(selectable=True) srcb = QGroupBox( _('Rebase changeset and descendants')) srcb.setLayout(QVBoxLayout()) srcb.layout().setContentsMargins(*(2,)*4) s = opts.get('source', '.') source = csinfo.create(self.repo, s, style, withupdate=True) srcb.layout().addWidget(source) self.layout().addWidget(srcb) destb = QGroupBox( _('To rebase destination')) destb.setLayout(QVBoxLayout()) destb.layout().setContentsMargins(*(2,)*4) d = opts.get('dest', '.') dest = csinfo.create(self.repo, d, style, withupdate=True) destb.layout().addWidget(dest) self.destcsinfo = dest self.layout().addWidget(destb) sep = qtlib.LabeledSeparator(_('Options')) self.layout().addWidget(sep) self.keepchk = QCheckBox(_('Keep original changesets')) self.keepchk.setChecked(opts.get('keep', False)) self.layout().addWidget(self.keepchk) self.keepbrancheschk = QCheckBox(_('Keep original branch names')) self.keepbrancheschk.setChecked(opts.get('keepbranches', False)) self.layout().addWidget(self.keepbrancheschk) self.collapsechk = QCheckBox(_('Collapse the rebased changesets ')) self.collapsechk.setChecked(opts.get('collapse', False)) self.layout().addWidget(self.collapsechk) self.autoresolvechk = QCheckBox(_('Automatically resolve merge conflicts ' 'where possible')) self.autoresolvechk.setChecked( repo.ui.configbool('tortoisehg', 'autoresolve', False)) self.layout().addWidget(self.autoresolvechk) if 'hgsubversion' in repo.extensions(): self.svnchk = QCheckBox(_('Rebase unpublished onto Subversion head ' '(override source, destination)')) self.layout().addWidget(self.svnchk) else: self.svnchk = None self.cmd = cmdui.Widget(True, True, self) self.cmd.commandFinished.connect(self.commandFinished) self.showMessage.connect(self.cmd.stbar.showMessage) self.cmd.stbar.linkActivated.connect(self.linkActivated) self.layout().addWidget(self.cmd, 2) bbox = QDialogButtonBox() self.cancelbtn = bbox.addButton(QDialogButtonBox.Cancel) self.cancelbtn.clicked.connect(self.reject) self.rebasebtn = bbox.addButton(_('Rebase'), QDialogButtonBox.ActionRole) self.rebasebtn.clicked.connect(self.rebase) self.abortbtn = bbox.addButton(_('Abort'), QDialogButtonBox.ActionRole) self.abortbtn.clicked.connect(self.abort) self.layout().addWidget(bbox) self.bbox = bbox if self.checkResolve() or not (s or d): for w in (srcb, destb, sep, self.keepchk, self.collapsechk, self.keepbrancheschk): w.setHidden(True) self.cmd.setShowOutput(True) else: self.showMessage.emit(_('Checking...')) self.abortbtn.setEnabled(False) self.rebasebtn.setEnabled(False) QTimer.singleShot(0, self.checkStatus) self.setMinimumWidth(480) self.setMaximumHeight(800) self.resize(0, 340) self.setWindowTitle(_('Rebase - %s') % self.repo.displayname)
def __init__(self, repoagent, parent): super(CommitPage, self).__init__(repoagent, parent) self.setTitle(_('Commit merge results')) self.setSubTitle(' ') self.setLayout(QVBoxLayout()) self.setCommitPage(True) repo = repoagent.rawRepo() # csinfo def label_func(widget, item, ctx): if item == 'rev': return _('Revision:') elif item == 'parents': return _('Parents') raise csinfo.UnknownItem() def data_func(widget, item, ctx): if item == 'rev': return _('Working Directory'), str(ctx) elif item == 'parents': parents = [] cbranch = ctx.branch() for pctx in ctx.parents(): branch = None if hasattr(pctx, 'branch') and pctx.branch() != cbranch: branch = pctx.branch() parents.append((str(pctx.rev()), str(pctx), branch, pctx)) return parents raise csinfo.UnknownItem() def markup_func(widget, item, value): if item == 'rev': text, rev = value return '<a href="view">%s</a> (%s)' % (text, rev) elif item == 'parents': def branch_markup(branch): opts = dict(fg='black', bg='#aaffaa') return qtlib.markup(' %s ' % branch, **opts) csets = [] for rnum, rid, branch, pctx in value: line = '%s (%s)' % (rnum, rid) if branch: line = '%s %s' % (line, branch_markup(branch)) msg = widget.info.get_data('summary', widget, pctx, widget.custom) if msg: line = '%s %s' % (line, msg) csets.append(line) return csets raise csinfo.UnknownItem() custom = csinfo.custom(label=label_func, data=data_func, markup=markup_func) contents = ('rev', 'user', 'dateage', 'branch', 'parents') style = csinfo.panelstyle(contents=contents, margin=6) # merged files rev_sep = qtlib.LabeledSeparator(_('Working Directory (merged)')) self.layout().addWidget(rev_sep) mergeCsInfo = csinfo.create(repo, None, style, custom=custom, withupdate=True) mergeCsInfo.linkActivated.connect(self.onLinkActivated) self.layout().addWidget(mergeCsInfo) self.mergeCsInfo = mergeCsInfo # commit message area msg_sep = qtlib.LabeledSeparator(_('Commit message')) self.layout().addWidget(msg_sep) msgEntry = messageentry.MessageEntry(self) msgEntry.installEventFilter(qscilib.KeyPressInterceptor(self)) msgEntry.refresh(repo) msgEntry.loadSettings(QSettings(), 'merge/message') msgEntry.textChanged.connect(self.completeChanged) self.layout().addWidget(msgEntry) self.msgEntry = msgEntry self._cmdsession = cmdcore.nullCmdSession() self._cmdlog = cmdui.LogWidget(self) self._cmdlog.hide() self.layout().addWidget(self._cmdlog) self.delayednext = False def tryperform(): if self.isComplete(): self.wizard().next() actionEnter = QAction('alt-enter', self) actionEnter.setShortcuts([Qt.CTRL+Qt.Key_Return, Qt.CTRL+Qt.Key_Enter]) actionEnter.triggered.connect(tryperform) self.addAction(actionEnter) skiplast = QCheckBox(_('Skip final confirmation page, ' 'close after commit.')) self.registerField('skiplast', skiplast) self.layout().addWidget(skiplast) hblayout = QHBoxLayout() self.opts = commit.readopts(self.repo.ui) self.optionsbtn = QPushButton(_('Commit Options')) self.optionsbtn.clicked.connect(self.details) hblayout.addWidget(self.optionsbtn) self.optionslabelfmt = _('<b>Selected Options:</b> %s') self.optionslabel = QLabel('') hblayout.addWidget(self.optionslabel) hblayout.addStretch() self.layout().addLayout(hblayout) self.setButtonText(QWizard.CommitButton, _('Commit Now')) # The cancel button does not really "cancel" the merge self.setButtonText(QWizard.CancelButton, _('Commit Later')) # Update the options label self.refresh()
def ParentWidget(repo): 'creates a parent rev widget and returns it' custom = csinfo.custom(data=data_func, label=label_func, markup=nomarkup) style = csinfo.panelstyle(contents=('parents', 'ishead', 'isclose'), selectable=True) return csinfo.create(repo, style=style, custom=custom)
def __init__(self, repoagent, parent): super(CommitPage, self).__init__(repoagent, parent) self.setTitle(_('Commit merge results')) self.setSubTitle(' ') self.setLayout(QVBoxLayout()) self.setCommitPage(True) repo = repoagent.rawRepo() # csinfo def label_func(widget, item, ctx): if item == 'rev': return _('Revision:') elif item == 'parents': return _('Parents') raise csinfo.UnknownItem() def data_func(widget, item, ctx): if item == 'rev': return _('Working Directory'), str(ctx) elif item == 'parents': parents = [] cbranch = ctx.branch() for pctx in ctx.parents(): branch = None if hasattr(pctx, 'branch') and pctx.branch() != cbranch: branch = pctx.branch() parents.append((str(pctx.rev()), str(pctx), branch, pctx)) return parents raise csinfo.UnknownItem() def markup_func(widget, item, value): if item == 'rev': text, rev = value return '<a href="view">%s</a> (%s)' % (text, rev) elif item == 'parents': def branch_markup(branch): opts = dict(fg='black', bg='#aaffaa') return qtlib.markup(' %s ' % branch, **opts) csets = [] for rnum, rid, branch, pctx in value: line = '%s (%s)' % (rnum, rid) if branch: line = '%s %s' % (line, branch_markup(branch)) msg = widget.info.get_data('summary', widget, pctx, widget.custom) if msg: line = '%s %s' % (line, msg) csets.append(line) return csets raise csinfo.UnknownItem() custom = csinfo.custom(label=label_func, data=data_func, markup=markup_func) contents = ('rev', 'user', 'dateage', 'branch', 'parents') style = csinfo.panelstyle(contents=contents, margin=6) # merged files rev_sep = qtlib.LabeledSeparator(_('Working Directory (merged)')) self.layout().addWidget(rev_sep) mergeCsInfo = csinfo.create(repo, None, style, custom=custom, withupdate=True) mergeCsInfo.linkActivated.connect(self.onLinkActivated) self.layout().addWidget(mergeCsInfo) self.mergeCsInfo = mergeCsInfo # commit message area msg_sep = qtlib.LabeledSeparator(_('Commit message')) self.layout().addWidget(msg_sep) msgEntry = messageentry.MessageEntry(self) msgEntry.installEventFilter(qscilib.KeyPressInterceptor(self)) msgEntry.refresh(repo) msgEntry.loadSettings(QSettings(), 'merge/message') msgEntry.textChanged.connect(self.completeChanged) self.layout().addWidget(msgEntry) self.msgEntry = msgEntry self.cmd = cmdui.Widget(True, False, self) self.cmd.commandFinished.connect(self.onCommandFinished) self.cmd.setShowOutput(False) self.layout().addWidget(self.cmd) self.delayednext = False def tryperform(): if self.isComplete(): self.wizard().next() actionEnter = QAction('alt-enter', self) actionEnter.setShortcuts( [Qt.CTRL + Qt.Key_Return, Qt.CTRL + Qt.Key_Enter]) actionEnter.triggered.connect(tryperform) self.addAction(actionEnter) self.skiplast = QCheckBox( _('Skip final confirmation page, ' 'close after commit.')) checked = QSettings().value('merge/skiplast', False).toBool() self.skiplast.setChecked(checked) self.layout().addWidget(self.skiplast) hblayout = QHBoxLayout() self.opts = commit.readrepoopts(self.repo) self.optionsbtn = QPushButton(_('Commit Options')) self.optionsbtn.clicked.connect(self.details) hblayout.addWidget(self.optionsbtn) self.optionslabelfmt = _('<b>Selected Options:</b> %s') self.optionslabel = QLabel('') hblayout.addWidget(self.optionslabel) hblayout.addStretch() self.layout().addLayout(hblayout) self.setButtonText(QWizard.CommitButton, _('Commit Now')) # The cancel button does not really "cancel" the merge self.setButtonText(QWizard.CancelButton, _('Commit Later')) # Update the options label self.refresh()