Mercurial and Git clients can push and pull from this alias URL to interact with this repository. You can change to which repository an alias points by going to the Aliases link on the project page.
# commit.py - TortoiseHg's commit widget and standalone dialog## Copyright 2010 Steve Borho <steve@borho.org>## This software may be used and distributed according to the terms of the# GNU General Public License version 2, incorporated herein by reference.importosfrommercurialimporthg,ui,cmdutil,util,dispatchfromPyQt4.QtCoreimport*fromPyQt4.QtGuiimport*fromtortoisehg.hgqt.i18nimport_fromtortoisehg.utilimporthglib,shlib,pathsfromtortoisehg.hgqtimportqtlib,status,cmdui# Technical Debt for CommitWidget# qrefresh support# threaded / wrapped commit (need a CmdRunner equivalent)# qctlib decode failure dialog (ask for locale, suggest HGENCODING)# auto-add unknown files# auto-rem missing files# add rollback function with prompt# +1 / -1 head indication (not as important with workbench integration)# hook up username from command line to username combo# recent committers history# pushafterci, autoincludes list# use username and date options# implement a branchop dialog (in another file)# qnew/shelve-patch creation dialog (in another file)# reflow / auto-wrap / message format checks / paste filenames# spell check / tab completion# in-memory patching / committing chunk selected filesclassCommitWidget(QWidget):'A widget that encompasses a StatusWidget and commit extras'loadBegin=pyqtSignal()loadComplete=pyqtSignal()errorMessage=pyqtSignal(QString)commitComplete=pyqtSignal()commit=pyqtSlot()def__init__(self,pats,opts,root=None,parent=None):QWidget.__init__(self,parent)self.opts=opts# user, dateself.stwidget=status.StatusWidget(pats,opts,root,self)self.connect(self.stwidget,SIGNAL('errorMessage'),lambdam:self.emit(SIGNAL('errorMessage'),m))self.msghistory=[]layout=QVBoxLayout()layout.addWidget(self.stwidget) self.setLayout(layout)
form = QFormLayout()
usercombo = QComboBox()
- usercombo.addItem(self.stwidget.repo[None].user())
+ usercombo.addItem(hglib.tounicode(self.stwidget.repo[None].user())) usercombo.setEditable(True)
form.addRow(_('Changeset:'), QLabel(_('Working Copy')))
form.addRow(_('User:'), usercombo)
form.addRow(_('Parent:'),QLabel('Description of '+str(self.stwidget.repo['.'])))frame=QFrame()frame.setLayout(form)frame.setFrameStyle(QFrame.StyledPanel)vbox=QVBoxLayout()vbox.addWidget(frame,0)vbox.setMargin(0)hbox=QHBoxLayout()branchop=QPushButton('Branch: default')hbox.addWidget(branchop)msgcombo=MessageHistoryCombo()self.connect(msgcombo,SIGNAL('activated(int)'),self.msgSelected)hbox.addWidget(msgcombo,1)vbox.addLayout(hbox,0)msgte=QTextEdit()msgte.setAcceptRichText(False)vbox.addWidget(msgte,1)upperframe=QFrame()upperframe.setLayout(vbox)self.split=QSplitter(Qt.Vertical)# Add our widgets to the top of our splitterself.split.addWidget(upperframe)# Add status widget document frame below our splitter# this reparents the docf from the status splitterself.split.addWidget(self.stwidget.docf)# add our splitter where the docf used to beself.stwidget.split.addWidget(self.split)msgte.setFocus()# Yuki's Mockup: http://bitbucket.org/kuy/thg-qt/wiki/Homeself.usercombo=usercomboself.msgte=msgteself.msgcombo=msgcombodefrestoreState(self,data):returnself.stwidget.restoreState(data)defsaveState(self):returnself.stwidget.saveState()defgetMessage(self):text=self.msgte.toPlainText()try:text=hglib.fromunicode(text,'strict')exceptUnicodeEncodeError:passreturntextdefmsgSelected(self,index):doc=self.msgte.document()ifnotdoc.isEmpty()anddoc.isModified():d=QMessageBox.question(self,_('Confirm Discard Message'),_('Discard current commit message?'),QMessageBox.Ok|QMessageBox.Cancel)ifd!=QMessageBox.Ok:returnself.msgte.setPlainText(self.msghistory[index])self.msgte.document().setModified(False)self.msgte.moveCursor(QTextCursor.End)self.msgte.setFocus()defcanExit(self):# Usually safe to exit, since we're saving messages implicitly# We'll ask the user for confirmation later, if they have any# files partially selected.returnTruedefloadConfigs(self,s):'Load history, etc, from QSettings instance'repo=self.stwidget.reporepoid=str(repo[0])# message history is stored in unicodeself.split.restoreState(s.value('commit/split').toByteArray())self.msghistory=list(s.value('commit/history-'+repoid).toStringList())self.msghistory=[sforsinself.msghistoryifs]self.msgcombo.reset(self.msghistory)try:curmsg=repo.opener('cur-message.txt').read()self.msgte.setPlainText(hglib.fromunicode(curmsg))self.msgte.document().setModified(False)self.msgte.moveCursor(QTextCursor.End)exceptEnvironmentError:passdefstoreConfigs(self,s):'Save history, etc, in QSettings instance'repo=self.stwidget.reporepoid=str(repo[0])s.setValue('commit/history-'+repoid,self.msghistory)s.setValue('commit/split',self.split.saveState())try:# current message is stored in local encodingrepo.opener('cur-message.txt','w').write(self.getMessage())exceptEnvironmentError:passdefaddMessageToHistory(self):umsg=self.msgte.toPlainText()ifnotumsg:returnifumsginself.msghistory:self.msghistory.remove(umsg)self.msghistory.insert(0,umsg)self.msghistory=self.msghistory[:10]self.msgcombo.reset(self.msghistory)defcommit(self):msg=self.getMessage()ifnotmsg:qtlib.WarningMsgBox(_('Nothing Commited'),_('Please enter commit message'),parent=self)self.msgte.setFocus()returnfiles=self.stwidget.getChecked()ifnotfiles:qtlib.WarningMsgBox(_('No files selected'),_('No operation to perform'),parent=self)self.stwidget.tv.setFocus()returncmdline=['commit','--message',msg]+filesret=dispatch._dispatch(self.stwidget.repo.ui,cmdline)ifnotret:self.addMessageToHistory()self.msgte.clear()self.msgte.document().setModified(False)self.emit(SIGNAL('commitComplete'))returnTrueelse:returnFalseclassMessageHistoryCombo(QComboBox):def__init__(self,parent=None):QComboBox.__init__(self,parent)self.reset([])defreset(self,msgs):self.clear()self.addItem(_('Recent commit messages...'))self.loaded=Falseself.msgs=msgsdefshowPopup(self):ifnotself.loaded:self.clear()forsinself.msgs:self.addItem(s.split('\n',1)[0][:70])self.loaded=TrueQComboBox.showPopup(self)# Technical Debt for standalone tool# add a toolbar for refresh, undo, etc# add a statusbar and simple progressbarclassCommitDialog(QDialog):'Standalone commit tool, a wrapper for CommitWidget'def__init__(self,pats,opts,parent=None):QDialog.__init__(self,parent)self.pats=patsself.opts=optslayout=QVBoxLayout()self.setLayout(layout)commit=CommitWidget(pats,opts,None,self)layout.addWidget(commit,1)BB=QDialogButtonBoxbb=QDialogButtonBox(BB.Ok|BB.Cancel)self.connect(bb,SIGNAL("accepted()"),self,SLOT("accept()"))self.connect(bb,SIGNAL("rejected()"),self,SLOT("reject()"))bb.button(BB.Ok).setDefault(True)bb.button(BB.Ok).setText('Commit')layout.addWidget(bb)self.bb=bbs=QSettings()commit.restoreState(s.value('commit/state').toByteArray())self.restoreGeometry(s.value('commit/geom').toByteArray())commit.loadConfigs(s)commit.errorMessage.connect(self.errorMessage)name=hglib.get_reponame(commit.stwidget.repo)self.setWindowTitle('%s - commit'%name)self.commit=commitdeferrorMessage(self,msg):printmsgdefkeyPressEvent(self,event):ifevent.key()in(Qt.Key_Return,Qt.Key_Enter):ifevent.modifiers()==Qt.ControlModifier:self.accept()# Ctrl+Enterreturnelifevent.key()==Qt.Key_Escape:self.reject()returnreturnsuper(QDialog,self).keyPressEvent(event)defaccept(self):ifself.commit.commit():self.reject()else:self.commit.stwidget.refreshWctx()defreject(self):ifself.commit.canExit():s=QSettings()s.setValue('commit/state',self.commit.saveState())s.setValue('commit/geom',self.saveGeometry())self.commit.storeConfigs(s)QDialog.reject(self)defrun(ui,*pats,**opts):returnCommitDialog(hglib.canonpaths(pats),opts)
Attach a Trello Card
Add a tag
Your session has expired
You are no longer logged in. Please log in and try your request again.
Filter RSS Feed
This RSS feed URL allows you to see the contents of your current filter using any feed reader.
This link includes a special authentication token. If you share the URL with anyone else, they can see this RSS feed's activity. You can disable these tokens when needed.
Your current filter is unsaved; changing it won't affect this RSS feed.