Plugins/VcsPlugins/vcsMercurial/hg.py

changeset 1017
919147f2b518
parent 1011
0b118aefae5b
child 1018
949812411ab8
equal deleted inserted replaced
1016:72b6b0778e06 1017:919147f2b518
692 @param name file/directory name to be tagged (string) 692 @param name file/directory name to be tagged (string)
693 """ 693 """
694 dname, fname = self.splitPath(name) 694 dname, fname = self.splitPath(name)
695 695
696 # find the root of the repo 696 # find the root of the repo
697 repodir = str(dname) 697 repodir = dname
698 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 698 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
699 repodir = os.path.dirname(repodir) 699 repodir = os.path.dirname(repodir)
700 if repodir == os.sep: 700 if repodir == os.sep:
701 return 701 return
702 702
703 dlg = HgTagDialog(self.tagsList) 703 dlg = HgTagDialog(self.hgGetTagsList(repodir))
704 if dlg.exec_() == QDialog.Accepted: 704 if dlg.exec_() == QDialog.Accepted:
705 tag, tagOp = dlg.getParameters() 705 tag, tagOp = dlg.getParameters()
706 if tag in self.tagsList:
707 self.tagsList.remove(tag)
708 self.tagsList.insert(0, tag)
709 else: 706 else:
710 return 707 return
711 708
712 args = [] 709 args = []
713 args.append('tag') 710 args.append('tag')
765 762
766 @param name file/directory name to be merged (string) 763 @param name file/directory name to be merged (string)
767 """ 764 """
768 dname, fname = self.splitPath(name) 765 dname, fname = self.splitPath(name)
769 766
767 # find the root of the repo
768 repodir = dname
769 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
770 repodir = os.path.dirname(repodir)
771 if repodir == os.sep:
772 return
773
770 opts = self.options['global'][:] 774 opts = self.options['global'][:]
771 force = '--force' in opts 775 force = '--force' in opts
772 if force: 776 if force:
773 del opts[opts.index('--force')] 777 del opts[opts.index('--force')]
774 778
775 dlg = HgMergeDialog(force, self.tagsList, self.branchesList) 779 if self.isExtensionActive("bookmarks"):
780 bookmarksList = \
781 self.getExtensionObject("bookmarks").hgGetBookmarksList(repodir)
782 else:
783 bookmarksList = None
784 dlg = HgMergeDialog(force, self.hgGetTagsList(repodir),
785 self.hgGetBranchesList(repodir),
786 bookmarksList)
776 if dlg.exec_() == QDialog.Accepted: 787 if dlg.exec_() == QDialog.Accepted:
777 rev, force = dlg.getParameters() 788 rev, force = dlg.getParameters()
778 else: 789 else:
779 return 790 return
780
781 # find the root of the repo
782 repodir = dname
783 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
784 repodir = os.path.dirname(repodir)
785 if repodir == os.sep:
786 return
787 791
788 args = [] 792 args = []
789 args.append('merge') 793 args.append('merge')
790 self.addArguments(args, opts) 794 self.addArguments(args, opts)
791 if force: 795 if force:
804 """ 808 """
805 Public method used to switch a working directory to a different revision. 809 Public method used to switch a working directory to a different revision.
806 810
807 @param name directory name to be switched (string) 811 @param name directory name to be switched (string)
808 """ 812 """
809 dlg = HgRevisionSelectionDialog(self.tagsList, self.branchesList) 813 dname, fname = self.splitPath(name)
814
815 # find the root of the repo
816 repodir = dname
817 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
818 repodir = os.path.dirname(repodir)
819 if repodir == os.sep:
820 return
821
822 if self.isExtensionActive("bookmarks"):
823 bookmarksList = \
824 self.getExtensionObject("bookmarks").hgGetBookmarksList(repodir)
825 else:
826 bookmarksList = None
827 dlg = HgRevisionSelectionDialog(self.hgGetTagsList(repodir),
828 self.hgGetBranchesList(repodir),
829 bookmarksList)
810 if dlg.exec_() == QDialog.Accepted: 830 if dlg.exec_() == QDialog.Accepted:
811 rev = dlg.getRevision() 831 rev = dlg.getRevision()
812 self.vcsUpdate(name, revision=rev) 832 self.vcsUpdate(name, revision=rev)
813 833
814 def vcsRegisteredState(self, name): 834 def vcsRegisteredState(self, name):
1182 project.copyDirectory(name, target) 1202 project.copyDirectory(name, target)
1183 else: 1203 else:
1184 project.appendFile(target) 1204 project.appendFile(target)
1185 return res 1205 return res
1186 1206
1207 def hgGetTagsList(self, repodir):
1208 """
1209 Public method to get the list of tags.
1210
1211 @param repodir directory name of the repository (string)
1212 @return list of tags (list of string)
1213 """
1214 ioEncoding = Preferences.getSystem("IOEncoding")
1215 process = QProcess()
1216 args = []
1217 args.append('tags')
1218 args.append('--verbose')
1219 process.setWorkingDirectory(repodir)
1220 process.start('hg', args)
1221 procStarted = process.waitForStarted()
1222 if procStarted:
1223 finished = process.waitForFinished(30000)
1224 if finished and process.exitCode() == 0:
1225 self.tagsList = []
1226 output = \
1227 str(process.readAllStandardOutput(), ioEncoding, 'replace')
1228 for line in output.splitlines():
1229 l = line.strip().split()
1230 if l[-1][0] in "1234567890":
1231 # last element is a rev:changeset
1232 del l[-1]
1233 else:
1234 del l[-2:]
1235 name = " ".join(l)
1236 if name not in ["tip", "default"]:
1237 self.tagsList.append(name)
1238
1239 return self.tagsList[:]
1240
1241 def hgGetBranchesList(self, repodir):
1242 """
1243 Public method to get the list of branches.
1244
1245 @param repodir directory name of the repository (string)
1246 @return list of branches (list of string)
1247 """
1248 ioEncoding = Preferences.getSystem("IOEncoding")
1249 process = QProcess()
1250 args = []
1251 args.append('branches')
1252 args.append('--closed')
1253 process.setWorkingDirectory(repodir)
1254 process.start('hg', args)
1255 procStarted = process.waitForStarted()
1256 if procStarted:
1257 finished = process.waitForFinished(30000)
1258 if finished and process.exitCode() == 0:
1259 self.branchesList = []
1260 output = \
1261 str(process.readAllStandardOutput(), ioEncoding, 'replace')
1262 for line in output.splitlines():
1263 l = line.strip().split()
1264 if l[-1][0] in "1234567890":
1265 # last element is a rev:changeset
1266 del l[-1]
1267 else:
1268 del l[-2:]
1269 name = " ".join(l)
1270 if name not in ["tip", "default"]:
1271 self.branchesList.append(name)
1272
1273 return self.branchesList[:]
1274
1187 def hgListTagBranch(self, path, tags=True): 1275 def hgListTagBranch(self, path, tags=True):
1188 """ 1276 """
1189 Public method used to list the available tags or branches. 1277 Public method used to list the available tags or branches.
1190 1278
1191 @param path directory name of the project (string) 1279 @param path directory name of the project (string)
1235 This method gives the chance to enter the revisions to be compared. 1323 This method gives the chance to enter the revisions to be compared.
1236 1324
1237 @param name file/directory name to be diffed (string) 1325 @param name file/directory name to be diffed (string)
1238 """ 1326 """
1239 if isinstance(name, list): 1327 if isinstance(name, list):
1328 dname, fnames = self.splitPathList(name)
1240 names = name[:] 1329 names = name[:]
1241 else: 1330 else:
1331 dname, fname = self.splitPath(name)
1242 names = [name] 1332 names = [name]
1243 for nam in names: 1333 for nam in names:
1244 if os.path.isfile(nam): 1334 if os.path.isfile(nam):
1245 editor = e5App().getObject("ViewManager").getOpenEditor(nam) 1335 editor = e5App().getObject("ViewManager").getOpenEditor(nam)
1246 if editor and not editor.checkDirty(): 1336 if editor and not editor.checkDirty():
1247 return 1337 return
1248 else: 1338 else:
1249 project = e5App().getObject("Project") 1339 project = e5App().getObject("Project")
1250 if nam == project.ppath and not project.saveAllScripts(): 1340 if nam == project.ppath and not project.saveAllScripts():
1251 return 1341 return
1252 dlg = HgRevisionsSelectionDialog(self.tagsList, self.branchesList) 1342
1343 # find the root of the repo
1344 repodir = dname
1345 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1346 repodir = os.path.dirname(repodir)
1347 if repodir == os.sep:
1348 return
1349
1350 if self.isExtensionActive("bookmarks"):
1351 bookmarksList = \
1352 self.getExtensionObject("bookmarks").hgGetBookmarksList(repodir)
1353 else:
1354 bookmarksList = None
1355 dlg = HgRevisionsSelectionDialog(self.hgGetTagsList(repodir),
1356 self.hgGetBranchesList(repodir),
1357 bookmarksList)
1253 if dlg.exec_() == QDialog.Accepted: 1358 if dlg.exec_() == QDialog.Accepted:
1254 revisions = dlg.getRevisions() 1359 revisions = dlg.getRevisions()
1255 self.diff = HgDiffDialog(self) 1360 self.diff = HgDiffDialog(self)
1256 self.diff.show() 1361 self.diff.show()
1257 self.diff.start(name, revisions) 1362 self.diff.start(name, revisions)
1493 @param name file/directory name to be branched (string) 1598 @param name file/directory name to be branched (string)
1494 """ 1599 """
1495 dname, fname = self.splitPath(name) 1600 dname, fname = self.splitPath(name)
1496 1601
1497 # find the root of the repo 1602 # find the root of the repo
1498 repodir = str(dname) 1603 repodir = dname
1499 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1604 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1500 repodir = os.path.dirname(repodir) 1605 repodir = os.path.dirname(repodir)
1501 if repodir == os.sep: 1606 if repodir == os.sep:
1502 return 1607 return
1503 1608
1504 name, ok = QInputDialog.getItem( 1609 name, ok = QInputDialog.getItem(
1505 None, 1610 None,
1506 self.trUtf8("Create Branch"), 1611 self.trUtf8("Create Branch"),
1507 self.trUtf8("Enter branch name"), 1612 self.trUtf8("Enter branch name"),
1508 self.branchesList, 1613 sorted(self.hgGetBranchesList(repodir)),
1509 0, True) 1614 0, True)
1510 if ok and name: 1615 if ok and name:
1511 args = [] 1616 args = []
1512 args.append('branch') 1617 args.append('branch')
1513 args.append(name.strip().replace(" ", "_")) 1618 args.append(name.strip().replace(" ", "_"))
1524 @param name file/directory name (string) 1629 @param name file/directory name (string)
1525 """ 1630 """
1526 dname, fname = self.splitPath(name) 1631 dname, fname = self.splitPath(name)
1527 1632
1528 # find the root of the repo 1633 # find the root of the repo
1529 repodir = str(dname) 1634 repodir = dname
1530 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1635 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1531 repodir = os.path.dirname(repodir) 1636 repodir = os.path.dirname(repodir)
1532 if repodir == os.sep: 1637 if repodir == os.sep:
1533 return 1638 return
1534 1639
1547 @param name file/directory name (string) 1652 @param name file/directory name (string)
1548 """ 1653 """
1549 dname, fname = self.splitPath(name) 1654 dname, fname = self.splitPath(name)
1550 1655
1551 # find the root of the repo 1656 # find the root of the repo
1552 repodir = str(dname) 1657 repodir = dname
1553 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1658 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1554 repodir = os.path.dirname(repodir) 1659 repodir = os.path.dirname(repodir)
1555 if repodir == os.sep: 1660 if repodir == os.sep:
1556 return 1661 return
1557 1662
1572 @param name file/directory name (string) 1677 @param name file/directory name (string)
1573 """ 1678 """
1574 dname, fname = self.splitPath(name) 1679 dname, fname = self.splitPath(name)
1575 1680
1576 # find the root of the repo 1681 # find the root of the repo
1577 repodir = str(dname) 1682 repodir = dname
1578 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1683 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1579 repodir = os.path.dirname(repodir) 1684 repodir = os.path.dirname(repodir)
1580 if repodir == os.sep: 1685 if repodir == os.sep:
1581 return 1686 return
1582 1687
1595 @param name file/directory name (string) 1700 @param name file/directory name (string)
1596 """ 1701 """
1597 dname, fname = self.splitPath(name) 1702 dname, fname = self.splitPath(name)
1598 1703
1599 # find the root of the repo 1704 # find the root of the repo
1600 repodir = str(dname) 1705 repodir = dname
1601 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1706 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1602 repodir = os.path.dirname(repodir) 1707 repodir = os.path.dirname(repodir)
1603 if repodir == os.sep: 1708 if repodir == os.sep:
1604 return 1709 return
1605 1710
1619 @param name file/directory name (string) 1724 @param name file/directory name (string)
1620 """ 1725 """
1621 dname, fname = self.splitPath(name) 1726 dname, fname = self.splitPath(name)
1622 1727
1623 # find the root of the repo 1728 # find the root of the repo
1624 repodir = str(dname) 1729 repodir = dname
1625 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1730 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1626 repodir = os.path.dirname(repodir) 1731 repodir = os.path.dirname(repodir)
1627 if repodir == os.sep: 1732 if repodir == os.sep:
1628 return 1733 return
1629 1734
1642 @param name file/directory name (string) 1747 @param name file/directory name (string)
1643 """ 1748 """
1644 dname, fname = self.splitPath(name) 1749 dname, fname = self.splitPath(name)
1645 1750
1646 # find the root of the repo 1751 # find the root of the repo
1647 repodir = str(dname) 1752 repodir = dname
1648 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1753 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1649 repodir = os.path.dirname(repodir) 1754 repodir = os.path.dirname(repodir)
1650 if repodir == os.sep: 1755 if repodir == os.sep:
1651 return 1756 return
1652 1757
1665 @param name file/directory name (string) 1770 @param name file/directory name (string)
1666 """ 1771 """
1667 dname, fname = self.splitPath(name) 1772 dname, fname = self.splitPath(name)
1668 1773
1669 # find the root of the repo 1774 # find the root of the repo
1670 repodir = str(dname) 1775 repodir = dname
1671 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1776 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1672 repodir = os.path.dirname(repodir) 1777 repodir = os.path.dirname(repodir)
1673 if repodir == os.sep: 1778 if repodir == os.sep:
1674 return 1779 return
1675 1780
1733 @param name file/directory name (string) 1838 @param name file/directory name (string)
1734 """ 1839 """
1735 dname, fname = self.splitPath(name) 1840 dname, fname = self.splitPath(name)
1736 1841
1737 # find the root of the repo 1842 # find the root of the repo
1738 repodir = str(dname) 1843 repodir = dname
1739 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1844 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1740 repodir = os.path.dirname(repodir) 1845 repodir = os.path.dirname(repodir)
1741 if repodir == os.sep: 1846 if repodir == os.sep:
1742 return 1847 return
1743 1848
1744 dlg = HgBundleDialog(self.tagsList, self.branchesList) 1849 if self.isExtensionActive("bookmarks"):
1850 bookmarksList = \
1851 self.getExtensionObject("bookmarks").hgGetBookmarksList(repodir)
1852 else:
1853 bookmarksList = None
1854 dlg = HgBundleDialog(self.hgGetTagsList(repodir),
1855 self.hgGetBranchesList(repodir),
1856 bookmarksList)
1745 if dlg.exec_() == QDialog.Accepted: 1857 if dlg.exec_() == QDialog.Accepted:
1746 rev, compression, all = dlg.getParameters() 1858 rev, compression, all = dlg.getParameters()
1747 1859
1748 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( 1860 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
1749 None, 1861 None,
1797 @param name directory name on which to base the changegroup (string) 1909 @param name directory name on which to base the changegroup (string)
1798 """ 1910 """
1799 dname, fname = self.splitPath(name) 1911 dname, fname = self.splitPath(name)
1800 1912
1801 # find the root of the repo 1913 # find the root of the repo
1802 repodir = str(dname) 1914 repodir = dname
1803 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1915 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1804 repodir = os.path.dirname(repodir) 1916 repodir = os.path.dirname(repodir)
1805 if repodir == os.sep: 1917 if repodir == os.sep:
1806 return 1918 return
1807 1919
1828 @param name directory name on which to base the changegroup (string) 1940 @param name directory name on which to base the changegroup (string)
1829 """ 1941 """
1830 dname, fname = self.splitPath(name) 1942 dname, fname = self.splitPath(name)
1831 1943
1832 # find the root of the repo 1944 # find the root of the repo
1833 repodir = str(dname) 1945 repodir = dname
1834 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1946 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1835 repodir = os.path.dirname(repodir) 1947 repodir = os.path.dirname(repodir)
1836 if repodir == os.sep: 1948 if repodir == os.sep:
1837 return 1949 return
1838 1950
1858 @param name directory name (string) 1970 @param name directory name (string)
1859 """ 1971 """
1860 dname, fname = self.splitPath(name) 1972 dname, fname = self.splitPath(name)
1861 1973
1862 # find the root of the repo 1974 # find the root of the repo
1863 repodir = str(dname) 1975 repodir = dname
1864 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 1976 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1865 repodir = os.path.dirname(repodir) 1977 repodir = os.path.dirname(repodir)
1866 if repodir == os.sep: 1978 if repodir == os.sep:
1867 return 1979 return
1868 1980
1901 self.trUtf8("Bisect subcommand ({0}) invalid.").format(subcommand)) 2013 self.trUtf8("Bisect subcommand ({0}) invalid.").format(subcommand))
1902 2014
1903 dname, fname = self.splitPath(name) 2015 dname, fname = self.splitPath(name)
1904 2016
1905 # find the root of the repo 2017 # find the root of the repo
1906 repodir = str(dname) 2018 repodir = dname
1907 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 2019 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1908 repodir = os.path.dirname(repodir) 2020 repodir = os.path.dirname(repodir)
1909 if repodir == os.sep: 2021 if repodir == os.sep:
1910 return 2022 return
1911 2023
1912 rev = "" 2024 rev = ""
1913 if subcommand in ("good", "bad"): 2025 if subcommand in ("good", "bad"):
1914 dlg = HgRevisionSelectionDialog(self.tagsList, self.branchesList, 2026 if self.isExtensionActive("bookmarks"):
2027 bookmarksList = \
2028 self.getExtensionObject("bookmarks").hgGetBookmarksList(repodir)
2029 else:
2030 bookmarksList = None
2031 dlg = HgRevisionSelectionDialog(self.hgGetTagsList(repodir),
2032 self.hgGetBranchesList(repodir),
2033 bookmarksList,
1915 showNone=True) 2034 showNone=True)
1916 if dlg.exec_() == QDialog.Accepted: 2035 if dlg.exec_() == QDialog.Accepted:
1917 rev = dlg.getRevision() 2036 rev = dlg.getRevision()
1918 else: 2037 else:
1919 return 2038 return
1973 @param name directory name (string or list of strings) 2092 @param name directory name (string or list of strings)
1974 """ 2093 """
1975 dname, fname = self.splitPath(name) 2094 dname, fname = self.splitPath(name)
1976 2095
1977 # find the root of the repo 2096 # find the root of the repo
1978 repodir = str(dname) 2097 repodir = dname
1979 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 2098 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
1980 repodir = os.path.dirname(repodir) 2099 repodir = os.path.dirname(repodir)
1981 if repodir == os.sep: 2100 if repodir == os.sep:
1982 return 2101 return
1983 2102
1984 dlg = HgBackoutDialog(self.tagsList, self.branchesList) 2103 if self.isExtensionActive("bookmarks"):
2104 bookmarksList = \
2105 self.getExtensionObject("bookmarks").hgGetBookmarksList(repodir)
2106 else:
2107 bookmarksList = None
2108 dlg = HgBackoutDialog(self.hgGetTagsList(repodir),
2109 self.hgGetBranchesList(repodir),
2110 bookmarksList)
1985 if dlg.exec_() == QDialog.Accepted: 2111 if dlg.exec_() == QDialog.Accepted:
1986 rev, merge, date, user, message = dlg.getParameters() 2112 rev, merge, date, user, message = dlg.getParameters()
1987 if not rev: 2113 if not rev:
1988 E5MessageBox.warning(self.__ui, 2114 E5MessageBox.warning(self.__ui,
1989 self.trUtf8("Backing out changeset"), 2115 self.trUtf8("Backing out changeset"),
2017 @param name directory name (string or list of strings) 2143 @param name directory name (string or list of strings)
2018 """ 2144 """
2019 dname, fname = self.splitPath(name) 2145 dname, fname = self.splitPath(name)
2020 2146
2021 # find the root of the repo 2147 # find the root of the repo
2022 repodir = str(dname) 2148 repodir = dname
2023 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 2149 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
2024 repodir = os.path.dirname(repodir) 2150 repodir = os.path.dirname(repodir)
2025 if repodir == os.sep: 2151 if repodir == os.sep:
2026 return 2152 return
2027 2153
2042 @param name directory name (string) 2168 @param name directory name (string)
2043 """ 2169 """
2044 dname, fname = self.splitPath(name) 2170 dname, fname = self.splitPath(name)
2045 2171
2046 # find the root of the repo 2172 # find the root of the repo
2047 repodir = str(dname) 2173 repodir = dname
2048 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 2174 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
2049 repodir = os.path.dirname(repodir) 2175 repodir = os.path.dirname(repodir)
2050 if repodir == os.sep: 2176 if repodir == os.sep:
2051 return 2177 return
2052 2178
2072 @param name directory name pointing into the repository (string) 2198 @param name directory name pointing into the repository (string)
2073 """ 2199 """
2074 dname, fname = self.splitPath(name) 2200 dname, fname = self.splitPath(name)
2075 2201
2076 # find the root of the repo 2202 # find the root of the repo
2077 repodir = str(dname) 2203 repodir = dname
2078 while not os.path.isdir(os.path.join(repodir, self.adminDir)): 2204 while not os.path.isdir(os.path.join(repodir, self.adminDir)):
2079 repodir = os.path.dirname(repodir) 2205 repodir = os.path.dirname(repodir)
2080 if repodir == os.sep: 2206 if repodir == os.sep:
2081 return 2207 return
2082 2208

eric ide

mercurial