X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/02b800ce7c2bb1c1f08075f22be2e7412124b47f..181568ed64a5f72886725288a279ead508598e33:/wxPython/samples/ide/activegrid/tool/SVNService.py diff --git a/wxPython/samples/ide/activegrid/tool/SVNService.py b/wxPython/samples/ide/activegrid/tool/SVNService.py index 785acf3866..c5e2af652f 100644 --- a/wxPython/samples/ide/activegrid/tool/SVNService.py +++ b/wxPython/samples/ide/activegrid/tool/SVNService.py @@ -324,526 +324,529 @@ class SVNService(wx.lib.pydocview.DocService): return False - 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")) + 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] - 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) + messageService = wx.GetApp().GetService(MessageService.MessageService) + messageService.ShowWindow() - 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) + 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 - 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")) + 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")) - 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) + 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) - 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() == 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 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: + 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_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 Commit:\n")) - + view.AddLines(_("SVN Revert:\n")) + for filename in filenames: + view.AddLines("%s\n" % filename) + 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")) - + 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 Commit"), wx.OK | wx.ICON_EXCLAMATION) + wx.MessageBox(str(e), _("SVN Revert"), wx.OK | wx.ICON_EXCLAMATION) except: extype, ex, tb = sys.exc_info() - view.AddLines("Commit failed: (%s) %s\n" % (extype, str(ex))) + view.AddLines("Revert 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.MessageBox(_("Revert failed."), _("SVN Revert"), 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: + 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 Commit:\n")) - + view.AddLines(_("SVN Add:\n")) + for filename in filenames: + view.AddLines("%s\n" % filename) + 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")) - + self._client.add(filenames) + view.AddLines(_("Add completed.\n")) except pysvn.ClientError, e: view.AddLines("%s\n" % str(e)) - wx.MessageBox(str(e), _("SVN Commit"), wx.OK | wx.ICON_EXCLAMATION) + wx.MessageBox(str(e), _("SVN Add"), wx.OK | wx.ICON_EXCLAMATION) except: extype, ex, tb = sys.exc_info() - view.AddLines("Commit failed: (%s) %s\n" % (extype, str(ex))) + view.AddLines("Add 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.MessageBox(_("Add failed."), _("SVN Add"), 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: + return True + + elif id == SVNService.SVN_DELETE_ID: wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT)) - - WriteSvnUrlList(svnURLCombobox) - + + filenames = self.GetCurrentDocuments() + messageService = wx.GetApp().GetService(MessageService.MessageService) messageService.ShowWindow() - + view = messageService.GetView() view.ClearLines() - view.AddLines(_("SVN Checkout:\n")) - - svnUrl = svnURLCombobox.GetValue() - toLocation = localPath.GetValue() + view.AddLines(_("SVN Delete:\n")) + for filename in filenames: + view.AddLines("%s\n" % filename) + try: - self._client.checkout(svnUrl, toLocation) - view.AddLines(_("Checkout completed.\n")) + self._client.remove(filenames) + view.AddLines(_("Delete 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) + view.AddLines("%s\n" % str(e)) + wx.MessageBox(str(e), _("SVN Delete"), wx.OK | wx.ICON_EXCLAMATION) except: extype, ex, tb = sys.exc_info() - view.AddLines("Checkout failed: (%s) %s\n" % (extype, str(ex))) + view.AddLines("Delete 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.MessageBox(_("Delete failed."), _("SVN Delete"), 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: - view.AddLines("%s\n" % str(e)) - wx.MessageBox(str(e), _("SVN Add"), wx.OK | wx.ICON_EXCLAMATION) - except: - extype, ex, tb = sys.exc_info() - view.AddLines("Add failed: (%s) %s\n" % (extype, str(ex))) - for line in traceback.format_tb(tb): - view.AddLines(line) - wx.MessageBox(_("Add failed."), _("SVN Add"), wx.OK | wx.ICON_EXCLAMATION) - - wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) - return True - - elif id == SVNService.SVN_DELETE_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 Delete:\n")) - for filename in filenames: - view.AddLines("%s\n" % filename) - - try: - self._client.remove(filenames) - view.AddLines(_("Delete completed.\n")) - except pysvn.ClientError, e: - view.AddLines("%s\n" % str(e)) - wx.MessageBox(str(e), _("SVN Delete"), wx.OK | wx.ICON_EXCLAMATION) - except: - extype, ex, tb = sys.exc_info() - view.AddLines("Delete failed: (%s) %s\n" % (extype, str(ex))) - for line in traceback.format_tb(tb): - view.AddLines(line) - wx.MessageBox(_("Delete failed."), _("SVN Delete"), wx.OK | wx.ICON_EXCLAMATION) - + return True + + return False + finally: wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) - return True - - return False def ProcessUpdateUIEvent(self, event):