3559:8938a2a66dee | 3562:ef3f13a2c599 |
---|---|
16 import os | 16 import os |
17 import shutil | 17 import shutil |
18 import re | 18 import re |
19 | 19 |
20 from PyQt4.QtCore import QProcess, pyqtSignal, QFileInfo, QFileSystemWatcher | 20 from PyQt4.QtCore import QProcess, pyqtSignal, QFileInfo, QFileSystemWatcher |
21 from PyQt4.QtGui import QApplication, QDialog | 21 from PyQt4.QtGui import QApplication, QDialog, QInputDialog |
22 | 22 |
23 from E5Gui.E5Application import e5App | 23 from E5Gui.E5Application import e5App |
24 from E5Gui import E5MessageBox, E5FileDialog | 24 from E5Gui import E5MessageBox, E5FileDialog |
25 | 25 |
26 from QScintilla.MiniEditor import MiniEditor | 26 from QScintilla.MiniEditor import MiniEditor |
78 | 78 |
79 self.options = self.defaultOptions | 79 self.options = self.defaultOptions |
80 self.tagsList = [] | 80 self.tagsList = [] |
81 self.branchesList = [] | 81 self.branchesList = [] |
82 self.allTagsBranchesList = [] | 82 self.allTagsBranchesList = [] |
83 self.bookmarksList = [] | |
83 self.showedTags = False | 84 self.showedTags = False |
84 self.showedBranches = False | 85 self.showedBranches = False |
85 | 86 |
86 self.tagTypeList = [ | 87 self.tagTypeList = [ |
87 'tags', | 88 'tags', |
106 self.tagbranchList = None | 107 self.tagbranchList = None |
107 self.annotate = None | 108 self.annotate = None |
108 self.repoEditor = None | 109 self.repoEditor = None |
109 self.userEditor = None | 110 self.userEditor = None |
110 self.serveDlg = None | 111 self.serveDlg = None |
112 self.bookmarksListDlg = None | |
113 self.bookmarksInOutDlg = None | |
111 | 114 |
112 self.bundleFile = None | 115 self.bundleFile = None |
113 self.__lastChangeGroupPath = None | 116 self.__lastChangeGroupPath = None |
114 | 117 |
115 self.statusCache = {} | 118 self.statusCache = {} |
134 self.__repoIniFile = "" | 137 self.__repoIniFile = "" |
135 self.__defaultConfigured = False | 138 self.__defaultConfigured = False |
136 self.__defaultPushConfigured = False | 139 self.__defaultPushConfigured = False |
137 | 140 |
138 # instantiate the extensions | 141 # instantiate the extensions |
139 from .BookmarksExtension.bookmarks import Bookmarks | |
140 from .QueuesExtension.queues import Queues | 142 from .QueuesExtension.queues import Queues |
141 from .FetchExtension.fetch import Fetch | 143 from .FetchExtension.fetch import Fetch |
142 from .PurgeExtension.purge import Purge | 144 from .PurgeExtension.purge import Purge |
143 from .GpgExtension.gpg import Gpg | 145 from .GpgExtension.gpg import Gpg |
144 from .TransplantExtension.transplant import Transplant | 146 from .TransplantExtension.transplant import Transplant |
145 from .RebaseExtension.rebase import Rebase | 147 from .RebaseExtension.rebase import Rebase |
146 from .ShelveExtension.shelve import Shelve | 148 from .ShelveExtension.shelve import Shelve |
147 from .LargefilesExtension.largefiles import Largefiles | 149 from .LargefilesExtension.largefiles import Largefiles |
148 self.__extensions = { | 150 self.__extensions = { |
149 "bookmarks": Bookmarks(self), | |
150 "mq": Queues(self), | 151 "mq": Queues(self), |
151 "fetch": Fetch(self), | 152 "fetch": Fetch(self), |
152 "purge": Purge(self), | 153 "purge": Purge(self), |
153 "gpg": Gpg(self), | 154 "gpg": Gpg(self), |
154 "transplant": Transplant(self), | 155 "transplant": Transplant(self), |
197 self.tagbranchList.close() | 198 self.tagbranchList.close() |
198 if self.annotate is not None: | 199 if self.annotate is not None: |
199 self.annotate.close() | 200 self.annotate.close() |
200 if self.serveDlg is not None: | 201 if self.serveDlg is not None: |
201 self.serveDlg.close() | 202 self.serveDlg.close() |
203 | |
204 if self.bookmarksListDlg is not None: | |
205 self.bookmarksListDlg.close() | |
206 if self.bookmarksInOutDlg is not None: | |
207 self.bookmarksInOutDlg.close() | |
202 | 208 |
203 if self.bundleFile and os.path.exists(self.bundleFile): | 209 if self.bundleFile and os.path.exists(self.bundleFile): |
204 os.remove(self.bundleFile) | 210 os.remove(self.bundleFile) |
205 | 211 |
206 # shut down the project helpers | 212 # shut down the project helpers |
819 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | 825 while not os.path.isdir(os.path.join(repodir, self.adminDir)): |
820 repodir = os.path.dirname(repodir) | 826 repodir = os.path.dirname(repodir) |
821 if os.path.splitdrive(repodir)[1] == os.sep: | 827 if os.path.splitdrive(repodir)[1] == os.sep: |
822 return | 828 return |
823 | 829 |
824 if self.isExtensionActive("bookmarks"): | |
825 bookmarksList = \ | |
826 self.getExtensionObject("bookmarks")\ | |
827 .hgGetBookmarksList(repodir) | |
828 else: | |
829 bookmarksList = None | |
830 | |
831 from .HgMultiRevisionSelectionDialog import \ | 830 from .HgMultiRevisionSelectionDialog import \ |
832 HgMultiRevisionSelectionDialog | 831 HgMultiRevisionSelectionDialog |
833 dlg = HgMultiRevisionSelectionDialog( | 832 dlg = HgMultiRevisionSelectionDialog( |
834 self.hgGetTagsList(repodir), | 833 self.hgGetTagsList(repodir), |
835 self.hgGetBranchesList(repodir), | 834 self.hgGetBranchesList(repodir), |
836 bookmarksList, | 835 self.hgGetBookmarksList(repodir), |
837 emptyRevsOk=True, | 836 emptyRevsOk=True, |
838 showLimit=True, | 837 showLimit=True, |
839 limitDefault=self.getPlugin().getPreferences("LogLimit")) | 838 limitDefault=self.getPlugin().getPreferences("LogLimit")) |
840 if dlg.exec_() == QDialog.Accepted: | 839 if dlg.exec_() == QDialog.Accepted: |
841 revs, noEntries = dlg.getRevisions() | 840 revs, noEntries = dlg.getRevisions() |
1031 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | 1030 while not os.path.isdir(os.path.join(repodir, self.adminDir)): |
1032 repodir = os.path.dirname(repodir) | 1031 repodir = os.path.dirname(repodir) |
1033 if os.path.splitdrive(repodir)[1] == os.sep: | 1032 if os.path.splitdrive(repodir)[1] == os.sep: |
1034 return | 1033 return |
1035 | 1034 |
1036 if self.isExtensionActive("bookmarks"): | |
1037 bookmarksList = \ | |
1038 self.getExtensionObject("bookmarks")\ | |
1039 .hgGetBookmarksList(repodir) | |
1040 else: | |
1041 bookmarksList = None | |
1042 from .HgMergeDialog import HgMergeDialog | 1035 from .HgMergeDialog import HgMergeDialog |
1043 dlg = HgMergeDialog(self.hgGetTagsList(repodir), | 1036 dlg = HgMergeDialog(self.hgGetTagsList(repodir), |
1044 self.hgGetBranchesList(repodir), | 1037 self.hgGetBranchesList(repodir), |
1045 bookmarksList) | 1038 self.hgGetBookmarksList(repodir)) |
1046 if dlg.exec_() == QDialog.Accepted: | 1039 if dlg.exec_() == QDialog.Accepted: |
1047 rev, force = dlg.getParameters() | 1040 rev, force = dlg.getParameters() |
1048 else: | 1041 else: |
1049 return | 1042 return |
1050 | 1043 |
1080 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | 1073 while not os.path.isdir(os.path.join(repodir, self.adminDir)): |
1081 repodir = os.path.dirname(repodir) | 1074 repodir = os.path.dirname(repodir) |
1082 if os.path.splitdrive(repodir)[1] == os.sep: | 1075 if os.path.splitdrive(repodir)[1] == os.sep: |
1083 return False | 1076 return False |
1084 | 1077 |
1085 if self.isExtensionActive("bookmarks"): | |
1086 bookmarksList = \ | |
1087 self.getExtensionObject("bookmarks")\ | |
1088 .hgGetBookmarksList(repodir) | |
1089 else: | |
1090 bookmarksList = None | |
1091 from .HgRevisionSelectionDialog import HgRevisionSelectionDialog | 1078 from .HgRevisionSelectionDialog import HgRevisionSelectionDialog |
1092 dlg = HgRevisionSelectionDialog(self.hgGetTagsList(repodir), | 1079 dlg = HgRevisionSelectionDialog(self.hgGetTagsList(repodir), |
1093 self.hgGetBranchesList(repodir), | 1080 self.hgGetBranchesList(repodir), |
1094 bookmarksList, | 1081 self.hgGetBookmarksList(repodir), |
1095 self.tr("Current branch tip")) | 1082 self.tr("Current branch tip")) |
1096 if dlg.exec_() == QDialog.Accepted: | 1083 if dlg.exec_() == QDialog.Accepted: |
1097 rev = dlg.getRevision() | 1084 rev = dlg.getRevision() |
1098 return self.vcsUpdate(name, revision=rev) | 1085 return self.vcsUpdate(name, revision=rev) |
1099 | 1086 |
1708 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | 1695 while not os.path.isdir(os.path.join(repodir, self.adminDir)): |
1709 repodir = os.path.dirname(repodir) | 1696 repodir = os.path.dirname(repodir) |
1710 if os.path.splitdrive(repodir)[1] == os.sep: | 1697 if os.path.splitdrive(repodir)[1] == os.sep: |
1711 return | 1698 return |
1712 | 1699 |
1713 if self.isExtensionActive("bookmarks"): | |
1714 bookmarksList = \ | |
1715 self.getExtensionObject("bookmarks")\ | |
1716 .hgGetBookmarksList(repodir) | |
1717 else: | |
1718 bookmarksList = None | |
1719 from .HgRevisionsSelectionDialog import HgRevisionsSelectionDialog | 1700 from .HgRevisionsSelectionDialog import HgRevisionsSelectionDialog |
1720 dlg = HgRevisionsSelectionDialog(self.hgGetTagsList(repodir), | 1701 dlg = HgRevisionsSelectionDialog(self.hgGetTagsList(repodir), |
1721 self.hgGetBranchesList(repodir), | 1702 self.hgGetBranchesList(repodir), |
1722 bookmarksList) | 1703 self.hgGetBookmarksList(repodir)) |
1723 if dlg.exec_() == QDialog.Accepted: | 1704 if dlg.exec_() == QDialog.Accepted: |
1724 revisions = dlg.getRevisions() | 1705 revisions = dlg.getRevisions() |
1725 from .HgDiffDialog import HgDiffDialog | 1706 from .HgDiffDialog import HgDiffDialog |
1726 self.diff = HgDiffDialog(self) | 1707 self.diff = HgDiffDialog(self) |
1727 self.diff.show() | 1708 self.diff.show() |
1798 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | 1779 while not os.path.isdir(os.path.join(repodir, self.adminDir)): |
1799 repodir = os.path.dirname(repodir) | 1780 repodir = os.path.dirname(repodir) |
1800 if os.path.splitdrive(repodir)[1] == os.sep: | 1781 if os.path.splitdrive(repodir)[1] == os.sep: |
1801 return | 1782 return |
1802 | 1783 |
1803 if self.isExtensionActive("bookmarks"): | |
1804 bookmarksList = \ | |
1805 self.getExtensionObject("bookmarks")\ | |
1806 .hgGetBookmarksList(repodir) | |
1807 else: | |
1808 bookmarksList = None | |
1809 | |
1810 from .HgRevisionsSelectionDialog import HgRevisionsSelectionDialog | 1784 from .HgRevisionsSelectionDialog import HgRevisionsSelectionDialog |
1811 dlg = HgRevisionsSelectionDialog(self.hgGetTagsList(repodir), | 1785 dlg = HgRevisionsSelectionDialog(self.hgGetTagsList(repodir), |
1812 self.hgGetBranchesList(repodir), | 1786 self.hgGetBranchesList(repodir), |
1813 bookmarksList) | 1787 self.hgGetBookmarksList(repodir)) |
1814 if dlg.exec_() == QDialog.Accepted: | 1788 if dlg.exec_() == QDialog.Accepted: |
1815 rev1, rev2 = dlg.getRevisions() | 1789 rev1, rev2 = dlg.getRevisions() |
1816 elif revisions: | 1790 elif revisions: |
1817 rev1, rev2 = revisions[0], revisions[1] | 1791 rev1, rev2 = revisions[0], revisions[1] |
1818 else: | 1792 else: |
2488 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | 2462 while not os.path.isdir(os.path.join(repodir, self.adminDir)): |
2489 repodir = os.path.dirname(repodir) | 2463 repodir = os.path.dirname(repodir) |
2490 if os.path.splitdrive(repodir)[1] == os.sep: | 2464 if os.path.splitdrive(repodir)[1] == os.sep: |
2491 return | 2465 return |
2492 | 2466 |
2493 if self.isExtensionActive("bookmarks"): | |
2494 bookmarksList = \ | |
2495 self.getExtensionObject("bookmarks")\ | |
2496 .hgGetBookmarksList(repodir) | |
2497 else: | |
2498 bookmarksList = None | |
2499 from .HgBundleDialog import HgBundleDialog | 2467 from .HgBundleDialog import HgBundleDialog |
2500 dlg = HgBundleDialog(self.hgGetTagsList(repodir), | 2468 dlg = HgBundleDialog(self.hgGetTagsList(repodir), |
2501 self.hgGetBranchesList(repodir), | 2469 self.hgGetBranchesList(repodir), |
2502 bookmarksList) | 2470 self.hgGetBookmarksList(repodir)) |
2503 if dlg.exec_() == QDialog.Accepted: | 2471 if dlg.exec_() == QDialog.Accepted: |
2504 revs, baseRevs, compression, all = dlg.getParameters() | 2472 revs, baseRevs, compression, all = dlg.getParameters() |
2505 | 2473 |
2506 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( | 2474 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
2507 None, | 2475 None, |
2657 if os.path.splitdrive(repodir)[1] == os.sep: | 2625 if os.path.splitdrive(repodir)[1] == os.sep: |
2658 return | 2626 return |
2659 | 2627 |
2660 rev = "" | 2628 rev = "" |
2661 if subcommand in ("good", "bad", "skip"): | 2629 if subcommand in ("good", "bad", "skip"): |
2662 if self.isExtensionActive("bookmarks"): | |
2663 bookmarksList = \ | |
2664 self.getExtensionObject("bookmarks")\ | |
2665 .hgGetBookmarksList(repodir) | |
2666 else: | |
2667 bookmarksList = None | |
2668 from .HgRevisionSelectionDialog import HgRevisionSelectionDialog | 2630 from .HgRevisionSelectionDialog import HgRevisionSelectionDialog |
2669 dlg = HgRevisionSelectionDialog(self.hgGetTagsList(repodir), | 2631 dlg = HgRevisionSelectionDialog(self.hgGetTagsList(repodir), |
2670 self.hgGetBranchesList(repodir), | 2632 self.hgGetBranchesList(repodir), |
2671 bookmarksList) | 2633 self.hgGetBookmarksList(repodir)) |
2672 if dlg.exec_() == QDialog.Accepted: | 2634 if dlg.exec_() == QDialog.Accepted: |
2673 rev = dlg.getRevision() | 2635 rev = dlg.getRevision() |
2674 else: | 2636 else: |
2675 return | 2637 return |
2676 | 2638 |
2736 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | 2698 while not os.path.isdir(os.path.join(repodir, self.adminDir)): |
2737 repodir = os.path.dirname(repodir) | 2699 repodir = os.path.dirname(repodir) |
2738 if os.path.splitdrive(repodir)[1] == os.sep: | 2700 if os.path.splitdrive(repodir)[1] == os.sep: |
2739 return | 2701 return |
2740 | 2702 |
2741 if self.isExtensionActive("bookmarks"): | |
2742 bookmarksList = \ | |
2743 self.getExtensionObject("bookmarks")\ | |
2744 .hgGetBookmarksList(repodir) | |
2745 else: | |
2746 bookmarksList = None | |
2747 from .HgBackoutDialog import HgBackoutDialog | 2703 from .HgBackoutDialog import HgBackoutDialog |
2748 dlg = HgBackoutDialog(self.hgGetTagsList(repodir), | 2704 dlg = HgBackoutDialog(self.hgGetTagsList(repodir), |
2749 self.hgGetBranchesList(repodir), | 2705 self.hgGetBranchesList(repodir), |
2750 bookmarksList) | 2706 self.hgGetBookmarksList(repodir)) |
2751 if dlg.exec_() == QDialog.Accepted: | 2707 if dlg.exec_() == QDialog.Accepted: |
2752 rev, merge, date, user, message = dlg.getParameters() | 2708 rev, merge, date, user, message = dlg.getParameters() |
2753 if not rev: | 2709 if not rev: |
2754 E5MessageBox.warning( | 2710 E5MessageBox.warning( |
2755 self.__ui, | 2711 self.__ui, |
3355 for line in output.splitlines(): | 3311 for line in output.splitlines(): |
3356 extensionName = \ | 3312 extensionName = \ |
3357 line.split("=", 1)[0].strip().split(".")[-1].strip() | 3313 line.split("=", 1)[0].strip().split(".")[-1].strip() |
3358 self.__activeExtensions.append(extensionName) | 3314 self.__activeExtensions.append(extensionName) |
3359 | 3315 |
3360 if self.version >= (1, 8): | |
3361 if "bookmarks" not in self.__activeExtensions: | |
3362 self.__activeExtensions.append("bookmarks") | |
3363 | |
3364 if activeExtensions != sorted(self.__activeExtensions): | 3316 if activeExtensions != sorted(self.__activeExtensions): |
3365 self.activeExtensionsChanged.emit() | 3317 self.activeExtensionsChanged.emit() |
3366 | 3318 |
3367 def isExtensionActive(self, extensionName): | 3319 def isExtensionActive(self, extensionName): |
3368 """ | 3320 """ |
3439 | 3391 |
3440 self.__projectHelper = self.__plugin.getProjectHelper() | 3392 self.__projectHelper = self.__plugin.getProjectHelper() |
3441 self.__projectHelper.setObjects(self, project) | 3393 self.__projectHelper.setObjects(self, project) |
3442 self.__monitorRepoIniFile(project.getProjectPath()) | 3394 self.__monitorRepoIniFile(project.getProjectPath()) |
3443 | 3395 |
3444 if not Utilities.isMacPlatform() and \ | 3396 if repodir: |
3445 self.version >= (1, 9) and \ | |
3446 repodir: | |
3447 from .HgClient import HgClient | 3397 from .HgClient import HgClient |
3448 client = HgClient(repodir, "utf-8", self) | 3398 client = HgClient(repodir, "utf-8", self) |
3449 ok, err = client.startServer() | 3399 ok, err = client.startServer() |
3450 if ok: | 3400 if ok: |
3451 self.__client = client | 3401 self.__client = client |
3473 @param project reference to the project object (Project) | 3423 @param project reference to the project object (Project) |
3474 @return reference to the monitor thread (QThread) | 3424 @return reference to the monitor thread (QThread) |
3475 """ | 3425 """ |
3476 from .HgStatusMonitorThread import HgStatusMonitorThread | 3426 from .HgStatusMonitorThread import HgStatusMonitorThread |
3477 return HgStatusMonitorThread(interval, project, self) | 3427 return HgStatusMonitorThread(interval, project, self) |
3428 | |
3429 ########################################################################### | |
3430 ## Bookmarks methods | |
3431 ########################################################################### | |
3432 | |
3433 def hgListBookmarks(self, path): | |
3434 """ | |
3435 Public method used to list the available bookmarks. | |
3436 | |
3437 @param path directory name of the project (string) | |
3438 """ | |
3439 self.bookmarksList = [] | |
3440 | |
3441 from .HgBookmarksListDialog import HgBookmarksListDialog | |
3442 self.bookmarksListDlg = HgBookmarksListDialog(self) | |
3443 self.bookmarksListDlg.show() | |
3444 self.bookmarksListDlg.start(path, self.bookmarksList) | |
3445 | |
3446 def hgGetBookmarksList(self, repodir): | |
3447 """ | |
3448 Public method to get the list of bookmarks. | |
3449 | |
3450 @param repodir directory name of the repository (string) | |
3451 @return list of bookmarks (list of string) | |
3452 """ | |
3453 args = self.initCommand("bookmarks") | |
3454 | |
3455 client = self.getClient() | |
3456 output = "" | |
3457 if client: | |
3458 output = client.runcommand(args)[0] | |
3459 else: | |
3460 process = QProcess() | |
3461 process.setWorkingDirectory(repodir) | |
3462 process.start('hg', args) | |
3463 procStarted = process.waitForStarted(5000) | |
3464 if procStarted: | |
3465 finished = process.waitForFinished(30000) | |
3466 if finished and process.exitCode() == 0: | |
3467 output = str(process.readAllStandardOutput(), | |
3468 self.getEncoding(), 'replace') | |
3469 | |
3470 self.bookmarksList = [] | |
3471 for line in output.splitlines(): | |
3472 li = line.strip().split() | |
3473 if li[-1][0] in "1234567890": | |
3474 # last element is a rev:changeset | |
3475 del li[-1] | |
3476 if li[0] == "*": | |
3477 del li[0] | |
3478 name = " ".join(li) | |
3479 self.bookmarksList.append(name) | |
3480 | |
3481 return self.bookmarksList[:] | |
3482 | |
3483 def hgBookmarkDefine(self, name): | |
3484 """ | |
3485 Public method to define a bookmark. | |
3486 | |
3487 @param name file/directory name (string) | |
3488 """ | |
3489 # find the root of the repo | |
3490 repodir = self.splitPath(name)[0] | |
3491 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | |
3492 repodir = os.path.dirname(repodir) | |
3493 if os.path.splitdrive(repodir)[1] == os.sep: | |
3494 return | |
3495 | |
3496 from .HgBookmarkDialog import HgBookmarkDialog | |
3497 dlg = HgBookmarkDialog(HgBookmarkDialog.DEFINE_MODE, | |
3498 self.hgGetTagsList(repodir), | |
3499 self.hgGetBranchesList(repodir), | |
3500 self.hgGetBookmarksList(repodir)) | |
3501 if dlg.exec_() == QDialog.Accepted: | |
3502 rev, bookmark = dlg.getData() | |
3503 | |
3504 args = self.initCommand("bookmarks") | |
3505 if rev: | |
3506 args.append("--rev") | |
3507 args.append(rev) | |
3508 args.append(bookmark) | |
3509 | |
3510 dia = HgDialog(self.tr('Mercurial Bookmark'), self) | |
3511 res = dia.startProcess(args, repodir) | |
3512 if res: | |
3513 dia.exec_() | |
3514 | |
3515 def hgBookmarkDelete(self, name): | |
3516 """ | |
3517 Public method to delete a bookmark. | |
3518 | |
3519 @param name file/directory name (string) | |
3520 """ | |
3521 # find the root of the repo | |
3522 repodir = self.splitPath(name)[0] | |
3523 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | |
3524 repodir = os.path.dirname(repodir) | |
3525 if os.path.splitdrive(repodir)[1] == os.sep: | |
3526 return | |
3527 | |
3528 bookmark, ok = QInputDialog.getItem( | |
3529 None, | |
3530 self.tr("Delete Bookmark"), | |
3531 self.tr("Select the bookmark to be deleted:"), | |
3532 [""] + sorted(self.hgGetBookmarksList(repodir)), | |
3533 0, True) | |
3534 if ok and bookmark: | |
3535 args = self.initCommand("bookmarks") | |
3536 args.append("--delete") | |
3537 args.append(bookmark) | |
3538 | |
3539 dia = HgDialog(self.tr('Delete Mercurial Bookmark'), self) | |
3540 res = dia.startProcess(args, repodir) | |
3541 if res: | |
3542 dia.exec_() | |
3543 | |
3544 def hgBookmarkRename(self, name): | |
3545 """ | |
3546 Public method to rename a bookmark. | |
3547 | |
3548 @param name file/directory name (string) | |
3549 """ | |
3550 # find the root of the repo | |
3551 repodir = self.splitPath(name)[0] | |
3552 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | |
3553 repodir = os.path.dirname(repodir) | |
3554 if os.path.splitdrive(repodir)[1] == os.sep: | |
3555 return | |
3556 | |
3557 from .HgBookmarkRenameDialog import HgBookmarkRenameDialog | |
3558 dlg = HgBookmarkRenameDialog(self.hgGetBookmarksList(repodir)) | |
3559 if dlg.exec_() == QDialog.Accepted: | |
3560 newName, oldName = dlg.getData() | |
3561 | |
3562 args = self.initCommand("bookmarks") | |
3563 args.append("--rename") | |
3564 args.append(oldName) | |
3565 args.append(newName) | |
3566 | |
3567 dia = HgDialog(self.tr('Rename Mercurial Bookmark'), self) | |
3568 res = dia.startProcess(args, repodir) | |
3569 if res: | |
3570 dia.exec_() | |
3571 | |
3572 def hgBookmarkMove(self, name): | |
3573 """ | |
3574 Public method to move a bookmark. | |
3575 | |
3576 @param name file/directory name (string) | |
3577 """ | |
3578 # find the root of the repo | |
3579 repodir = self.splitPath(name)[0] | |
3580 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | |
3581 repodir = os.path.dirname(repodir) | |
3582 if os.path.splitdrive(repodir)[1] == os.sep: | |
3583 return | |
3584 | |
3585 from .HgBookmarkDialog import HgBookmarkDialog | |
3586 dlg = HgBookmarkDialog(HgBookmarkDialog.MOVE_MODE, | |
3587 self.hgGetTagsList(repodir), | |
3588 self.hgGetBranchesList(repodir), | |
3589 self.hgGetBookmarksList(repodir)) | |
3590 if dlg.exec_() == QDialog.Accepted: | |
3591 rev, bookmark = dlg.getData() | |
3592 | |
3593 args = self.initCommand("bookmarks") | |
3594 args.append("--force") | |
3595 if rev: | |
3596 args.append("--rev") | |
3597 args.append(rev) | |
3598 args.append(bookmark) | |
3599 | |
3600 dia = HgDialog(self.tr('Move Mercurial Bookmark'), self) | |
3601 res = dia.startProcess(args, repodir) | |
3602 if res: | |
3603 dia.exec_() | |
3604 | |
3605 def hgBookmarkIncoming(self, name): | |
3606 """ | |
3607 Public method to show a list of incoming bookmarks. | |
3608 | |
3609 @param name file/directory name (string) | |
3610 """ | |
3611 from .HgBookmarksInOutDialog import HgBookmarksInOutDialog | |
3612 self.bookmarksInOutDlg = HgBookmarksInOutDialog( | |
3613 self, HgBookmarksInOutDialog.INCOMING) | |
3614 self.bookmarksInOutDlg.show() | |
3615 self.bookmarksInOutDlg.start(name) | |
3616 | |
3617 def hgBookmarkOutgoing(self, name): | |
3618 """ | |
3619 Public method to show a list of outgoing bookmarks. | |
3620 | |
3621 @param name file/directory name (string) | |
3622 """ | |
3623 from .HgBookmarksInOutDialog import HgBookmarksInOutDialog | |
3624 self.bookmarksInOutDlg = HgBookmarksInOutDialog( | |
3625 self, HgBookmarksInOutDialog.OUTGOING) | |
3626 self.bookmarksInOutDlg.show() | |
3627 self.bookmarksInOutDlg.start(name) | |
3628 | |
3629 def __getInOutBookmarks(self, repodir, incoming): | |
3630 """ | |
3631 Public method to get the list of incoming or outgoing bookmarks. | |
3632 | |
3633 @param repodir directory name of the repository (string) | |
3634 @param incoming flag indicating to get incoming bookmarks (boolean) | |
3635 @return list of bookmarks (list of string) | |
3636 """ | |
3637 bookmarksList = [] | |
3638 | |
3639 if incoming: | |
3640 args = self.initCommand("incoming") | |
3641 else: | |
3642 args = self.initCommand("outgoing") | |
3643 args.append('--bookmarks') | |
3644 | |
3645 client = self.getClient() | |
3646 output = "" | |
3647 if client: | |
3648 output = client.runcommand(args)[0] | |
3649 else: | |
3650 process = QProcess() | |
3651 process.setWorkingDirectory(repodir) | |
3652 process.start('hg', args) | |
3653 procStarted = process.waitForStarted(5000) | |
3654 if procStarted: | |
3655 finished = process.waitForFinished(30000) | |
3656 if finished and process.exitCode() == 0: | |
3657 output = str(process.readAllStandardOutput(), | |
3658 self.getEncoding(), 'replace') | |
3659 | |
3660 for line in output.splitlines(): | |
3661 if line.startswith(" "): | |
3662 li = line.strip().split() | |
3663 del li[-1] | |
3664 name = " ".join(li) | |
3665 bookmarksList.append(name) | |
3666 | |
3667 return bookmarksList | |
3668 | |
3669 def hgBookmarkPull(self, name): | |
3670 """ | |
3671 Public method to pull a bookmark from a remote repository. | |
3672 | |
3673 @param name file/directory name (string) | |
3674 """ | |
3675 # find the root of the repo | |
3676 repodir = self.splitPath(name)[0] | |
3677 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | |
3678 repodir = os.path.dirname(repodir) | |
3679 if os.path.splitdrive(repodir)[1] == os.sep: | |
3680 return | |
3681 | |
3682 bookmarks = self.__getInOutBookmarks(repodir, True) | |
3683 | |
3684 bookmark, ok = QInputDialog.getItem( | |
3685 None, | |
3686 self.tr("Pull Bookmark"), | |
3687 self.tr("Select the bookmark to be pulled:"), | |
3688 [""] + sorted(bookmarks), | |
3689 0, True) | |
3690 if ok and bookmark: | |
3691 args = self.initCommand("pull") | |
3692 args.append('--bookmark') | |
3693 args.append(bookmark) | |
3694 | |
3695 dia = HgDialog(self.tr( | |
3696 'Pulling bookmark from a remote Mercurial repository'), | |
3697 self) | |
3698 res = dia.startProcess(args, repodir) | |
3699 if res: | |
3700 dia.exec_() | |
3701 | |
3702 def hgBookmarkPush(self, name): | |
3703 """ | |
3704 Public method to push a bookmark to a remote repository. | |
3705 | |
3706 @param name file/directory name (string) | |
3707 """ | |
3708 # find the root of the repo | |
3709 repodir = self.splitPath(name)[0] | |
3710 while not os.path.isdir(os.path.join(repodir, self.adminDir)): | |
3711 repodir = os.path.dirname(repodir) | |
3712 if os.path.splitdrive(repodir)[1] == os.sep: | |
3713 return | |
3714 | |
3715 bookmarks = self.__getInOutBookmarks(repodir, False) | |
3716 | |
3717 bookmark, ok = QInputDialog.getItem( | |
3718 None, | |
3719 self.tr("Push Bookmark"), | |
3720 self.tr("Select the bookmark to be push:"), | |
3721 [""] + sorted(bookmarks), | |
3722 0, True) | |
3723 if ok and bookmark: | |
3724 args = self.initCommand("push") | |
3725 args.append('--bookmark') | |
3726 args.append(bookmark) | |
3727 | |
3728 dia = HgDialog(self.tr( | |
3729 'Pushing bookmark to a remote Mercurial repository'), | |
3730 self) | |
3731 res = dia.startProcess(args, repodir) | |
3732 if res: | |
3733 dia.exec_() |