Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py

changeset 1053
c54aa980ea8e
parent 1047
b41a36b201e4
child 1061
3e21869872e3
equal deleted inserted replaced
1052:66f35ec09fb6 1053:c54aa980ea8e
23 from .HgQueuesHeaderDialog import HgQueuesHeaderDialog 23 from .HgQueuesHeaderDialog import HgQueuesHeaderDialog
24 from .HgQueuesListGuardsDialog import HgQueuesListGuardsDialog 24 from .HgQueuesListGuardsDialog import HgQueuesListGuardsDialog
25 from .HgQueuesListAllGuardsDialog import HgQueuesListAllGuardsDialog 25 from .HgQueuesListAllGuardsDialog import HgQueuesListAllGuardsDialog
26 from .HgQueuesDefineGuardsDialog import HgQueuesDefineGuardsDialog 26 from .HgQueuesDefineGuardsDialog import HgQueuesDefineGuardsDialog
27 from .HgQueuesGuardsSelectionDialog import HgQueuesGuardsSelectionDialog 27 from .HgQueuesGuardsSelectionDialog import HgQueuesGuardsSelectionDialog
28 from .HgQueuesQueueManagementDialog import HgQueuesQueueManagementDialog
28 29
29 import Preferences 30 import Preferences
30 31
31 32
32 class Queues(QObject): 33 class Queues(QObject):
39 40
40 POP = 0 41 POP = 0
41 PUSH = 1 42 PUSH = 1
42 GOTO = 2 43 GOTO = 2
43 44
45 QUEUE_DELETE = 0
46 QUEUE_PURGE = 1
47 QUEUE_ACTIVATE = 2
48
44 def __init__(self, vcs): 49 def __init__(self, vcs):
45 """ 50 """
46 Constructor 51 Constructor
47 """ 52 """
48 QObject.__init__(self, vcs) 53 QObject.__init__(self, vcs)
53 self.qheaderDialog = None 58 self.qheaderDialog = None
54 self.queuesListDialog = None 59 self.queuesListDialog = None
55 self.queuesListGuardsDialog = None 60 self.queuesListGuardsDialog = None
56 self.queuesListAllGuardsDialog = None 61 self.queuesListAllGuardsDialog = None
57 self.queuesDefineGuardsDialog = None 62 self.queuesDefineGuardsDialog = None
63 self.queuesListQueuesDialog = None
58 64
59 def shutdown(self): 65 def shutdown(self):
60 """ 66 """
61 Public method used to shutdown the queues interface. 67 Public method used to shutdown the queues interface.
62 """ 68 """
70 self.queuesListGuardsDialog.close() 76 self.queuesListGuardsDialog.close()
71 if self.queuesListAllGuardsDialog is not None: 77 if self.queuesListAllGuardsDialog is not None:
72 self.queuesListAllGuardsDialog.close() 78 self.queuesListAllGuardsDialog.close()
73 if self.queuesDefineGuardsDialog is not None: 79 if self.queuesDefineGuardsDialog is not None:
74 self.queuesDefineGuardsDialog.close() 80 self.queuesDefineGuardsDialog.close()
81 if self.queuesListQueuesDialog is not None:
82 self.queuesListQueuesDialog.close()
75 83
76 def __getPatchesList(self, repodir, listType, withSummary=False): 84 def __getPatchesList(self, repodir, listType, withSummary=False):
77 """ 85 """
78 Public method to get a list of patches of a given type. 86 Public method to get a list of patches of a given type.
79 87
694 702
695 guardsList = self.getGuardsList(repodir, all=False) 703 guardsList = self.getGuardsList(repodir, all=False)
696 if guardsList: 704 if guardsList:
697 dlg = HgQueuesGuardsSelectionDialog(guardsList, listOnly=True) 705 dlg = HgQueuesGuardsSelectionDialog(guardsList, listOnly=True)
698 dlg.exec_() 706 dlg.exec_()
707
708 def hgQueueCreateRenameQueue(self, name, isCreate):
709 """
710 Public method to create a new queue or rename the active queue.
711
712 @param name file/directory name (string)
713 @param isCreate flag indicating to create a new queue (boolean)
714 """
715 # find the root of the repo
716 repodir = self.vcs.splitPath(name)[0]
717 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
718 repodir = os.path.dirname(repodir)
719 if repodir == os.sep:
720 return
721
722 if isCreate:
723 title = self.trUtf8("Create New Queue")
724 else:
725 title = self.trUtf8("Rename Active Queue")
726 dlg = HgQueuesQueueManagementDialog(HgQueuesQueueManagementDialog.NAME_INPUT,
727 title, False, repodir)
728 if dlg.exec_() == QDialog.Accepted:
729 queueName = dlg.getData()
730 if queueName:
731 ioEncoding = Preferences.getSystem("IOEncoding")
732 process = QProcess()
733 args = []
734 args.append("qqueue")
735 if isCreate:
736 args.append("--create")
737 else:
738 args.append("--rename")
739 args.append(queueName)
740
741 process.setWorkingDirectory(repodir)
742 process.start('hg', args)
743 procStarted = process.waitForStarted()
744 if procStarted:
745 finished = process.waitForFinished(30000)
746 if finished:
747 if process.exitCode() != 0:
748 error = \
749 str(process.readAllStandardError(), ioEncoding, 'replace')
750 if isCreate:
751 errMsg = self.trUtf8(
752 "Error while creating a new queue.")
753 else:
754 errMsg = self.trUtf8(
755 "Error while renaming the active queue.")
756 E5MessageBox.warning(None,
757 title,
758 """<p>{0}</p><p>{1}</p>""".format(errMsg, error))
759 else:
760 if self.queuesListQueuesDialog is not None and \
761 self.queuesListQueuesDialog.isVisible():
762 self.queuesListQueuesDialog.refresh()
763
764 def hgQueueDeletePurgeActivateQueue(self, name, operation):
765 """
766 Public method to delete the reference to a queue and optionally
767 remove the patch directory or set the active queue.
768
769 @param name file/directory name (string)
770 @param operation operation to be performed (Queues.QUEUE_DELETE,
771 Queues.QUEUE_PURGE, Queues.QUEUE_ACTIVATE)
772 """
773 # find the root of the repo
774 repodir = self.vcs.splitPath(name)[0]
775 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
776 repodir = os.path.dirname(repodir)
777 if repodir == os.sep:
778 return
779
780 if operation == Queues.QUEUE_PURGE:
781 title = self.trUtf8("Purge Queue")
782 elif operation == Queues.QUEUE_DELETE:
783 title = self.trUtf8("Delete Queue")
784 elif operation == Queues.QUEUE_ACTIVATE:
785 title = self.trUtf8("Activate Queue")
786 else:
787 raise ValueError("illegal value for operation")
788
789 dlg = HgQueuesQueueManagementDialog(HgQueuesQueueManagementDialog.QUEUE_INPUT,
790 title, True, repodir)
791 if dlg.exec_() == QDialog.Accepted:
792 queueName = dlg.getData()
793 if queueName:
794 ioEncoding = Preferences.getSystem("IOEncoding")
795 process = QProcess()
796 args = []
797 args.append("qqueue")
798 if operation == Queues.QUEUE_PURGE:
799 args.append("--purge")
800 elif operation == Queues.QUEUE_DELETE:
801 args.append("--delete")
802 args.append(queueName)
803
804 process.setWorkingDirectory(repodir)
805 process.start('hg', args)
806 procStarted = process.waitForStarted()
807 if procStarted:
808 finished = process.waitForFinished(30000)
809 if finished:
810 if process.exitCode() != 0:
811 error = \
812 str(process.readAllStandardError(), ioEncoding, 'replace')
813 if operation == Queues.QUEUE_PURGE:
814 errMsg = self.trUtf8("Error while purging the queue.")
815 elif operation == Queues.QUEUE_DELETE:
816 errMsg = self.trUtf8("Error while deleting the queue.")
817 elif operation == Queues.QUEUE_ACTIVATE:
818 errMsg = self.trUtf8(
819 "Error while setting the active queue.")
820 E5MessageBox.warning(None,
821 title,
822 """<p>{0}</p><p>{1}</p>""".format(errMsg, error))
823 else:
824 if self.queuesListQueuesDialog is not None and \
825 self.queuesListQueuesDialog.isVisible():
826 self.queuesListQueuesDialog.refresh()
827
828 def hgQueueListQueues(self, name):
829 """
830 Public method to list available queues.
831
832 @param name file/directory name (string)
833 """
834 # find the root of the repo
835 repodir = self.vcs.splitPath(name)[0]
836 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
837 repodir = os.path.dirname(repodir)
838 if repodir == os.sep:
839 return
840
841 self.queuesListQueuesDialog = HgQueuesQueueManagementDialog(
842 HgQueuesQueueManagementDialog.NO_INPUT,
843 self.trUtf8("Available Queues"),
844 False, repodir)
845 self.queuesListQueuesDialog.show()

eric ide

mercurial