Plugins/VcsPlugins/vcsMercurial/hg.py

changeset 3562
ef3f13a2c599
parent 3515
1b8381afe38f
child 3578
e55d32585d08
equal deleted inserted replaced
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_()

eric ide

mercurial