⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svnservice.py

📁 wxPython的基本示例程序
💻 PY
📖 第 1 页 / 共 4 页
字号:
        else:            retcode = False            certfile = None                    dlg.Destroy()        return retcode, certfile    #----------------------------------------------------------------------------    # Service Methods    #----------------------------------------------------------------------------    def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):        menu = menuBar.GetMenu(menuBar.FindMenu(_("Project")))        menu.AppendSeparator()        wx.EVT_MENU(frame, SVNService.SVN_UPDATE_ALL_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_UPDATE_ALL_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_UPDATE_ALL_ID, _("SVN Update All in Project"), _("Update all files in a project from Subversion"))        wx.EVT_MENU(frame, SVNService.SVN_CHECKIN_ALL_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_CHECKIN_ALL_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_CHECKIN_ALL_ID, _("SVN Commit All in Project..."), _("Commit all files changes in a project to Subversion"))        wx.EVT_MENU(frame, SVNService.SVN_UPDATE_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_UPDATE_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_UPDATE_ID, _("SVN Update"), _("Update file from Subversion"))        wx.EVT_MENU(frame, SVNService.SVN_CHECKIN_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_CHECKIN_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_CHECKIN_ID, _("SVN Commit..."), _("Commit file changes to Subversion"))        wx.EVT_MENU(frame, SVNService.SVN_CHECKOUT_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_CHECKOUT_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_CHECKOUT_ID, _("SVN Checkout..."), _("Checkout file from Subversion"))        wx.EVT_MENU(frame, SVNService.SVN_REVERT_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_REVERT_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_REVERT_ID, _("SVN Revert"), _("Revert file from Subversion"))        menu.AppendSeparator()        wx.EVT_MENU(frame, SVNService.SVN_ADD_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_ADD_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_ADD_ID, _("SVN Add"), _("Add file to Subversion"))        wx.EVT_MENU(frame, SVNService.SVN_DELETE_ID, self.ProcessEvent)        wx.EVT_UPDATE_UI(frame, SVNService.SVN_DELETE_ID, self.ProcessUpdateUIEvent)        menu.Append(SVNService.SVN_DELETE_ID, _("SVN Delete"), _("Delete file from Subversion"))    def ProcessEvent(self, event):        id = event.GetId()        if not SVN_INSTALLED:            if id in SVNService.SVN_COMMAND_LIST:                wx.MessageBox(_("pysvn not found.  Please install pysvn"), _("Python Subversion"))                return True            return False        try:            if id == SVNService.SVN_UPDATE_ID:                wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))                                filenames = self.GetCurrentDocuments()                if filenames:                    filenames = filenames[:]                    filenames.sort(self.BasenameCaseInsensitiveCompare)                else:                    folderPath = self.GetCurrentFolder()                    if folderPath:                        filenames = [folderPath]                    messageService = wx.GetApp().GetService(MessageService.MessageService)                messageService.ShowWindow()                    view = messageService.GetView()                view.ClearLines()                view.AddLines(_("SVN Update:\n"))                    for filename in filenames:                    view.AddLines("%s\n" % filename)                    try:                        status = self._client.update(filename)                                if status.number > 0:                            view.AddLines(_("Updated to revision %s\n") % status.number)                                openDocs = wx.GetApp().GetDocumentManager().GetDocuments()                            for doc in openDocs:                                if doc.GetFilename() == filename:                                    yesNoMsg = wx.MessageDialog(wx.GetApp().GetTopWindow(),                                                             _("Updated file '%s' is currently open.  Close it?") % os.path.basename(filename),                                                             _("Close File"),                                                             wx.YES_NO|wx.ICON_QUESTION)                                    yesNoMsg.CenterOnParent()                                    status = yesNoMsg.ShowModal()                                    yesNoMsg.Destroy()                                    if status == wx.ID_YES:                                        doc.DeleteAllViews()                                    break                        else:                            view.AddLines(_("Update failed.\n"))                            except pysvn.ClientError, e:                        view.AddLines("%s\n" % str(e))                        wx.MessageBox(str(e), _("SVN Update"), wx.OK | wx.ICON_EXCLAMATION)                    except:                        extype, ex, tb = sys.exc_info()                        view.AddLines("Update failed: (%s) %s\n" % (extype, str(ex)))                        for line in traceback.format_tb(tb):                            view.AddLines(line)                                wx.MessageBox(_("Update failed."), _("SVN Update"), wx.OK | wx.ICON_EXCLAMATION)                    wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))                    return True                            elif id == SVNService.SVN_UPDATE_ALL_ID:                wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))                    messageService = wx.GetApp().GetService(MessageService.MessageService)                messageService.ShowWindow()                    view = messageService.GetView()                view.ClearLines()                view.AddLines(_("SVN Update:\n"))                                project = self.GetCurrentProject()                if project:                    openDocs = wx.GetApp().GetDocumentManager().GetDocuments()                    for doc in openDocs:                        if doc.GetFilename() == project:                            filenames = doc.GetFiles()[:]  # make a copy and sort it.                            filenames.sort(self.BasenameCaseInsensitiveCompare)                                for filename in filenames:                                view.AddLines("%s\n" % filename)                                try:                                    status = self._client.update(filename)                                                        if status.number > 0:                                        view.AddLines(_("Updated to revision %s\n") % status.number)                                                        openDocs = wx.GetApp().GetDocumentManager().GetDocuments()                                        for doc in openDocs:                                            if doc.GetFilename() == filename:                                                yesNoMsg = wx.MessageDialog(wx.GetApp().GetTopWindow(),                                                                         _("Updated file '%s' is currently open.  Close it?") % os.path.basename(filename),                                                                         _("Close File"),                                                                         wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)                                                yesNoMsg.CenterOnParent()                                                status = yesNoMsg.ShowModal()                                                yesNoMsg.Destroy()                                                if status == wx.ID_YES:                                                    doc.DeleteAllViews()                                                elif status == wx.ID_NO:                                                    pass                                                else: # elif status == wx.CANCEL:                                                    wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))                                                    return True                                                break                                    else:                                        view.AddLines(_("Update failed.\n"))                                                    except pysvn.ClientError, e:                                    view.AddLines("%s\n" % str(e))                                    wx.MessageBox(str(e), _("SVN Update"), wx.OK | wx.ICON_EXCLAMATION)                                except:                                    extype, ex, tb = sys.exc_info()                                    view.AddLines("Update failed: (%s) %s\n" % (extype, str(ex)))                                    for line in traceback.format_tb(tb):                                        view.AddLines(line)                                                        wx.MessageBox(_("Update failed."), _("SVN Update"), wx.OK | wx.ICON_EXCLAMATION)                    wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))                return True                elif id == SVNService.SVN_CHECKIN_ALL_ID:                filenames = []                project = self.GetCurrentProject()                if project:                    openDocs = wx.GetApp().GetDocumentManager().GetDocuments()                    for doc in openDocs:                        if doc.GetFilename() == project:                            for filename in doc.GetFiles():                                if filename not in filenames:                                    filenames.append(filename)                filenames.sort(self.BasenameCaseInsensitiveCompare)                    # ask user if dirty files should be saved first                openDocs = wx.GetApp().GetDocumentManager().GetDocuments()                for filename in filenames:                    for doc in openDocs:                        if doc.GetFilename() == filename and doc.IsModified():                            yesNoMsg = wx.MessageDialog(wx.GetApp().GetTopWindow(),                                                     _("'%s' has unsaved modifications.  Save it before commit?") % os.path.basename(filename),                                                     _("SVN Commit"),                                                     wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)                            yesNoMsg.CenterOnParent()                            status = yesNoMsg.ShowModal()                            yesNoMsg.Destroy()                            if status == wx.ID_YES:                                doc.Save()                            elif status == wx.ID_NO:                                pass                            else: # elif status == wx.CANCEL:                                return True                            break                    shortFilenames = []                for i, filename in enumerate(filenames):                    shortFilename = os.path.basename(filename)                    shortFilenames.append(shortFilename)                    dlg = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("SVN Commit"))                    sizer = wx.BoxSizer(wx.VERTICAL)                sizer.Add(wx.StaticText(dlg, -1, _("Comment:")), 0, wx.ALIGN_CENTER_VERTICAL)                commentText = wx.TextCtrl(dlg, -1, size=(250,-1), style=wx.TE_MULTILINE)                sizer.Add(commentText, 1, wx.EXPAND|wx.TOP, HALF_SPACE)                    sizer.Add(wx.StaticText(dlg, -1, _("Files:")), 0, wx.ALIGN_CENTER_VERTICAL|wx.TOP, SPACE)                fileList = wx.CheckListBox(dlg, -1, choices = shortFilenames)                for i in range(fileList.GetCount()):                    fileList.Check(i, True)                sizer.Add(fileList, 0, wx.EXPAND|wx.TOP, HALF_SPACE)                    buttonSizer = wx.StdDialogButtonSizer()                okBtn = wx.Button(dlg, wx.ID_OK)                okBtn.SetDefault()                buttonSizer.AddButton(okBtn)                buttonSizer.AddButton(wx.Button(dlg, wx.ID_CANCEL))                buttonSizer.Realize()                    contentSizer = wx.BoxSizer(wx.VERTICAL)                contentSizer.Add(sizer, 0, wx.ALL, SPACE)                contentSizer.Add(buttonSizer, 0, wx.ALL|wx.ALIGN_RIGHT, SPACE)                    dlg.SetSizer(contentSizer)                dlg.Fit()                dlg.Layout()                    dlg.CenterOnParent()                if dlg.ShowModal() == wx.ID_OK:                    wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))                        messageService = wx.GetApp().GetService(MessageService.MessageService)                    messageService.ShowWindow()                        view = messageService.GetView()                    view.ClearLines()                    view.AddLines(_("SVN Commit:\n"))                        try:                        selFilenames = []                        for i in range(fileList.GetCount()):                            if fileList.IsChecked(i):                                selFilenames.append(filenames[i])                                view.AddLines("%s\n" % filenames[i])                                                    if len(selFilenames):                            comment = commentText.GetValue()                            status = self._client.checkin(selFilenames, comment)                                if status is None:                                view.AddLines(_("Nothing to commit.\n"))                            elif status.number > 0:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -