--- a/eric7/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py Sun Jul 11 15:17:16 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py Sun Jul 11 16:29:12 2021 +0200 @@ -7,12 +7,18 @@ Module implementing the Mercurial configuration page. """ +import os +import sys + from PyQt6.QtCore import pyqtSlot +from EricWidgets.EricApplication import ericApp + from Preferences.ConfigurationPages.ConfigurationPageBase import ( ConfigurationPageBase ) from .Ui_MercurialPage import Ui_MercurialPage +from .. import HgUtilities from Utilities import supportedCodecs @@ -36,6 +42,8 @@ self.encodingComboBox.addItems(sorted(supportedCodecs)) self.encodingModeComboBox.addItems(["strict", "ignore", "replace"]) + self.installButton.setEnabled(not self.__mercurialInstalled()) + # set initial values # global options index = self.encodingComboBox.findText( @@ -121,3 +129,20 @@ dlg = HgUserConfigDialog(version=hgVersion(self.__plugin)[1]) dlg.exec() + + @pyqtSlot() + def on_installButton_clicked(self): + """ + Private slot to install Mercurial alongside eric7. + """ + pip = ericApp().getObject("Pip") + pip.installPackages(["mercurial"], interpreter=sys.executable) + self.installButton.setEnabled(not self.__mercurialInstalled()) + + def __mercurialInstalled(self): + """ + Private method to check, if mercurial is installed alongside eric7. + """ + hg = HgUtilities.getHgExecutable() + # assume local installation, if the path is absolute + return os.path.isabs(hg)