svnservice.py

来自「Wxpython Implemented on Windows CE, Sou」· Python 代码 · 共 1,071 行 · 第 1/4 页

PY
1,071
字号
                                view.AddLines(_("Committed as revision %s.\n") % status.number)
                            else:
                                view.AddLines(_("Commit failed.\n"))
    
                    except pysvn.ClientError, e:
                        view.AddLines("%s\n" % str(e))
                        wx.MessageBox(str(e), _("SVN Commit"), wx.OK | wx.ICON_EXCLAMATION)
                    except:
                        extype, ex, tb = sys.exc_info()
                        view.AddLines("Commit failed: (%s) %s\n" % (extype, str(ex)))
                        for line in traceback.format_tb(tb):
                            view.AddLines(line)
                        wx.MessageBox(_("Commit failed."), _("SVN Commit"), wx.OK | wx.ICON_EXCLAMATION)
    
                    wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
                dlg.Destroy()
                return True
    
    
            elif id == SVNService.SVN_CHECKIN_ID:
                filenames = self.GetCurrentDocuments()[:]
                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:
                                view.AddLines(_("Committed as revision %s.\n") % status.number)
                            else:
                                view.AddLines(_("Commit failed.\n"))
    
                    except pysvn.ClientError, e:
                        view.AddLines("%s\n" % str(e))
                        wx.MessageBox(str(e), _("SVN Commit"), wx.OK | wx.ICON_EXCLAMATION)
                    except:
                        extype, ex, tb = sys.exc_info()
                        view.AddLines("Commit failed: (%s) %s\n" % (extype, str(ex)))
                        for line in traceback.format_tb(tb):
                            view.AddLines(line)
                        wx.MessageBox(_("Commit failed."), _("SVN Commit"), wx.OK | wx.ICON_EXCLAMATION)
    
                    wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
                dlg.Destroy()
                return True
    
            elif id == SVNService.SVN_CHECKOUT_ID:
                config = wx.ConfigBase_Get()
                svnUrl = config.Read(SVN_REPOSITORY_URL, self._defaultURL)
    
                dlg = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("SVN Checkout"))
    
                gridSizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5)
                gridSizer.Add(wx.StaticText(dlg, -1, _("Repository URL:")), 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, HALF_SPACE)
                svnUrlList = ReadSvnUrlList()
                svnURLCombobox = wx.ComboBox(dlg, -1, size=(200, -1), choices=svnUrlList, style=wx.CB_DROPDOWN)
                if len(svnUrlList):
                    svnURLCombobox.SetToolTipString(svnUrlList[0])
                    svnURLCombobox.SetStringSelection(svnUrlList[0])
                else:
                    svnURLCombobox.SetToolTipString(_("Set Repository URL"))
                gridSizer.Add(svnURLCombobox, 0)
    
                gridSizer.Add(wx.StaticText(dlg, -1, _("Checkout to dir:")), 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, HALF_SPACE)
                localPath = wx.TextCtrl(dlg, -1, size = (200, -1))
                localPath.SetToolTipString(_("Path in local file system where files will be located."))
                findDirButton = wx.Button(dlg, -1, _("Browse..."))
    
                def OnBrowseButton(event):
                    dirDlg = wx.DirDialog(wx.GetApp().GetTopWindow(), _("Choose a directory:"), style=wx.DD_DEFAULT_STYLE)
                    dir = localPath.GetValue()
                    if len(dir):
                        dirDlg.SetPath(dir)
                    dirDlg.CenterOnParent()
                    if dirDlg.ShowModal() == wx.ID_OK:
                        localPath.SetValue(dirDlg.GetPath())
                        localPath.SetToolTipString(localPath.GetValue())
                        localPath.SetInsertionPointEnd()
                    dirDlg.Destroy()
                wx.EVT_BUTTON(findDirButton, -1, OnBrowseButton)
    
                sizer = wx.BoxSizer(wx.HORIZONTAL)
                sizer.Add(localPath, 1, wx.EXPAND)
                sizer.Add(findDirButton, 0, wx.LEFT, HALF_SPACE)
                gridSizer.Add(sizer, 0)
    
                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(gridSizer, 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))
                    
                    WriteSvnUrlList(svnURLCombobox)
    
                    messageService = wx.GetApp().GetService(MessageService.MessageService)
                    messageService.ShowWindow()
    
                    view = messageService.GetView()
                    view.ClearLines()
                    view.AddLines(_("SVN Checkout:\n"))
    
                    svnUrl = svnURLCombobox.GetValue()
                    toLocation = localPath.GetValue()
                    try:
                        self._client.checkout(svnUrl, toLocation)
                        view.AddLines(_("Checkout completed.\n"))
                    except pysvn.ClientError, e:
                        view.AddLines(_("Checkout failed.  %s\n") % str(e))
                        wx.MessageBox(_("Checkout failed.  %s") % str(e), _("SVN Checkout"), wx.OK | wx.ICON_EXCLAMATION)
                    except:
                        extype, ex, tb = sys.exc_info()
                        view.AddLines("Checkout failed: (%s) %s\n" % (extype, str(ex)))
                        for line in traceback.format_tb(tb):
                            view.AddLines(line)
                        wx.MessageBox(_("Checkout failed."), _("SVN Checkout"), wx.OK | wx.ICON_EXCLAMATION)
    
                    wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
                dlg.Destroy()
                return True
    
            elif id == SVNService.SVN_REVERT_ID:
                wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
    
                filenames = self.GetCurrentDocuments()
    
                messageService = wx.GetApp().GetService(MessageService.MessageService)
                messageService.ShowWindow()
    
                view = messageService.GetView()
                view.ClearLines()
                view.AddLines(_("SVN Revert:\n"))
                for filename in filenames:
                    view.AddLines("%s\n" % filename)
    
                try:
                    self._client.revert(filenames)
                    view.AddLines(_("Revert completed.\n"))
                    
                    openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
                    for doc in openDocs[:]:   # need to make a copy of the list otherwise ordinality changes as we close the files
                        if doc.GetFilename() in filenames:
                            yesNoMsg = wx.MessageDialog(wx.GetApp().GetTopWindow(),
                                                     _("Reverted file '%s' is currently open.  Close it?") % os.path.basename(doc.GetFilename()),
                                                     _("Close File"),
                                                     wx.YES_NO|wx.ICON_QUESTION)
                            yesNoMsg.CenterOnParent()
                            status = yesNoMsg.ShowModal()
                            yesNoMsg.Destroy()
                            if status == wx.ID_YES:
                                doc.DeleteAllViews()
    
                except pysvn.ClientError, e:
                    view.AddLines("%s\n" % str(e))
                    wx.MessageBox(str(e), _("SVN Revert"), wx.OK | wx.ICON_EXCLAMATION)
                except:
                    extype, ex, tb = sys.exc_info()
                    view.AddLines("Revert failed: (%s) %s\n" % (extype, str(ex)))
                    for line in traceback.format_tb(tb):
                        view.AddLines(line)
                    wx.MessageBox(_("Revert failed."), _("SVN Revert"), wx.OK | wx.ICON_EXCLAMATION)
    
                wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
                return True
    
            elif id == SVNService.SVN_ADD_ID:
                wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
    
                filenames = self.GetCurrentDocuments()
    
                messageService = wx.GetApp().GetService(MessageService.MessageService)
                messageService.ShowWindow()
    
                view = messageService.GetView()
                view.ClearLines()
                view.AddLines(_("SVN Add:\n"))
                for filename in filenames:
                    view.AddLines("%s\n" % filename)
    
                try:
                    self._client.add(filenames)
                    view.AddLines(_("Add completed.\n"))
                except pysvn.ClientError, e:

⌨️ 快捷键说明

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