📄 svnservice.py
字号:
#----------------------------------------------------------------------------# Name: SVNService.py# Purpose: Subversion Service for pydocview## Author: Morgan Hua## Created: 5/13/05# CVS-ID: $Id: SVNService.py,v 1.4 2006/04/20 06:25:58 RD Exp $# Copyright: (c) 2005 ActiveGrid, Inc.# License: wxWindows License#----------------------------------------------------------------------------import wximport osimport os.pathimport ProjectEditorimport MessageServiceimport sys # for errorsimport traceback # for errorstry: import pysvn # python-subversion integration SVN_INSTALLED = Trueexcept ImportError: SVN_INSTALLED = False_ = wx.GetTranslation#----------------------------------------------------------------------------# Constants#----------------------------------------------------------------------------SVN_CONFIG_DIR = "SVNConfigDir"SVN_REPOSITORY_URL = "SVNRepositoryURLs"SPACE = 10HALF_SPACE = 5#----------------------------------------------------------------------------# Classes#----------------------------------------------------------------------------class SVNService(wx.lib.pydocview.DocService): SVN_UPDATE_ALL_ID = wx.NewId() SVN_UPDATE_ID = wx.NewId() SVN_CHECKIN_ID = wx.NewId() SVN_CHECKIN_ALL_ID = wx.NewId() SVN_CHECKOUT_ID = wx.NewId() SVN_REVERT_ID = wx.NewId() SVN_ADD_ID = wx.NewId() SVN_DELETE_ID = wx.NewId() SVN_COMMAND_LIST = [SVN_UPDATE_ALL_ID, SVN_CHECKIN_ALL_ID, SVN_UPDATE_ID, SVN_CHECKIN_ID, SVN_CHECKOUT_ID, SVN_REVERT_ID, SVN_ADD_ID, SVN_DELETE_ID] def __init__(self): self._defaultURL = "svn://" global SVN_INSTALLED if SVN_INSTALLED: config = wx.ConfigBase_Get() configDir = config.Read(SVN_CONFIG_DIR, "") self._client = pysvn.Client(configDir) try: self._defaultURL = self._client.info('.').url except: pass self._client.callback_cancel = self.IfCancel self._client.callback_notify = self.UpdateStatus self._client.callback_get_log_message = self.GetLogMessage self._client.callback_get_login = self.GetLogin self._client.callback_ssl_server_trust_prompt = self.GetSSLServerTrust self._client.callback_ssl_client_cert_password_prompt = self.SSLClientPassword self._client.callback_ssl_client_cert_prompt = self.SSLClientCert self._client.callback_ssl_server_prompt = self.SSLServerPrompt #---------------------------------------------------------------------------- # pysvn.Client() Callback Methods #---------------------------------------------------------------------------- def IfCancel(self): """ return True if user wants to cancel current command """ return False def UpdateStatus(self, eventDict): messageService = wx.GetApp().GetService(MessageService.MessageService) messageService.ShowWindow() view = messageService.GetView() view.AddLines(_("%s %s\n") % (eventDict['action'], eventDict['path'])) def GetLogMessage(self): dlg = wx.TextEntryDialog(wx.GetApp().GetTopWindow(), _("Comment"), _("SVN Log Message")) dlg.CenterOnParent() if dlg.ShowModal() == wx.ID_OK: retcode = True message = dlg.GetValue() else: retcode = False message = _("Cancel Action") dlg.Destroy() return retcode, message def GetLogin(self, realm, username, maySave): dlg = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("SVN Login")) sizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5) sizer.Add(wx.StaticText(dlg, -1, _("Username:")), 0, wx.ALIGN_CENTER_VERTICAL) usernameTxt = wx.TextCtrl(dlg, -1, username, size = (200, -1)) sizer.Add(usernameTxt, 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(wx.StaticText(dlg, -1, _("Password:")), 0, wx.ALIGN_CENTER_VERTICAL) passwordTxt = wx.TextCtrl(dlg, -1, size=(200, -1), style=wx.TE_PASSWORD) sizer.Add(passwordTxt, 0, wx.ALIGN_CENTER_VERTICAL) savePasswordCheckbox = wx.CheckBox(dlg, -1, _("Remember Username and Password")) if not maySave: savePasswordCheckbox.Enable(False) buttonSizer = wx.BoxSizer(wx.HORIZONTAL) okBtn = wx.Button(dlg, wx.ID_OK) okBtn.SetDefault() buttonSizer.Add(okBtn, 0, wx.RIGHT, HALF_SPACE) buttonSizer.Add(wx.Button(dlg, wx.ID_CANCEL), 0) contentSizer = wx.BoxSizer(wx.VERTICAL) contentSizer.Add(sizer, 0, wx.LEFT|wx.TOP|wx.RIGHT, SPACE) contentSizer.Add(savePasswordCheckbox, 0, wx.TOP|wx.LEFT|wx.BOTTOM, 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: retcode = True username = usernameTxt.GetValue().strip() password = passwordTxt.GetValue() save = savePasswordCheckbox.IsChecked() else: retcode = False username = None password = None save = False dlg.Destroy() return retcode, username, password, save def SSLServerPrompt(self): """ Not implemented, as per pysvn documentation """ return def GetSSLServerTrust(self, trustDict): dlg = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("SSL Server Certificate")) sizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5) for k in ['hostname', 'valid_from', 'valid_to', 'issuer_dname', 'realm']: if trustDict.has_key(k): sizer.Add(wx.StaticText(dlg, -1, "%s:" % k), 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(wx.StaticText(dlg, -1, "%s" % trustDict[k]), 0, wx.ALIGN_CENTER_VERTICAL) box = wx.StaticBoxSizer(wx.StaticBox(dlg, -1, _("Certificate Info")), wx.VERTICAL) box.Add(sizer, 0, wx.EXPAND) certRadio = wx.RadioBox(dlg, -1, _("Certificate"), choices=[_("Accept Always"), _("Accept Once"), _("Reject")], majorDimension=1, style=wx.RA_SPECIFY_COLS) buttonSizer = wx.BoxSizer(wx.HORIZONTAL) okBtn = wx.Button(dlg, wx.ID_OK) okBtn.SetDefault() buttonSizer.Add(okBtn, 0, wx.RIGHT, HALF_SPACE) buttonSizer.Add(wx.Button(dlg, wx.ID_CANCEL), 0) contentSizer = wx.BoxSizer(wx.VERTICAL) contentSizer.Add(box, 0, wx.TOP|wx.LEFT|wx.RIGHT|wx.EXPAND, SPACE) contentSizer.Add(certRadio, 0, wx.TOP|wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.EXPAND, SPACE) contentSizer.Add(buttonSizer, 0, wx.ALL|wx.ALIGN_RIGHT, SPACE) dlg.SetSizer(contentSizer) dlg.Fit() dlg.Layout() # default values for reject retcode = False acceptedFailures = 0 save = False dlg.CenterOnParent() if dlg.ShowModal() == wx.ID_OK: cert = certRadio.GetStringSelection() if cert == _("Accept Always"): retcode = True acceptedFailures = trustDict.get('failures') save = True elif cert == _("Accept Once"): retcode = True acceptedFailures = trustDict.get('failures') save = False dlg.Destroy() return retcode, acceptedFailures, save def SSLClientPassword(self, realm, maySave): dlg = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("SSL Client Certificate Login")) sizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5) sizer.Add(wx.StaticText(dlg, -1, _("Realm:")), 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(wx.StaticText(dlg, -1, realm), 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(wx.StaticText(dlg, -1, _("Password:")), 0, wx.ALIGN_CENTER_VERTICAL) passwordTxt = wx.TextCtrl(dlg, -1, size=(200, -1), style=wx.TE_PASSWORD) sizer.Add(passwordTxt, 0, wx.ALIGN_CENTER_VERTICAL) savePasswordCheckbox = wx.CheckBox(dlg, -1, _("Remember Password")) if not maySave: savePasswordCheckbox.Enable(False) buttonSizer = wx.BoxSizer(wx.HORIZONTAL) okBtn = wx.Button(dlg, wx.ID_OK) okBtn.SetDefault() buttonSizer.Add(okBtn, 0, wx.RIGHT, HALF_SPACE) buttonSizer.Add(wx.Button(dlg, wx.ID_CANCEL), 0) contentSizer = wx.BoxSizer(wx.VERTICAL) contentSizer.Add(sizer, 0, wx.LEFT|wx.TOP|wx.RIGHT, SPACE) contentSizer.Add(savePasswordCheckbox, 0, wx.TOP|wx.LEFT|wx.BOTTOM, 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: retcode = True password = passwordTxt.GetValue() save = savePasswordCheckbox.IsChecked() else: retcode = False password = None save = False dlg.Destroy() return retcode, password, save def SSLClientCert(self): dlg = wx.FileDialog(wx.GetApp().GetTopWindow(), message="Choose certificate", style=wx.OPEN|wx.FILE_MUST_EXIST|wx.CHANGE_DIR ) # dlg.CenterOnParent() # wxBug: caused crash with wx.FileDialog if dlg.ShowModal() == wx.ID_OK: retcode = True certfile = dlg.GetPath()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -