Addon Manager: Make branch switching scarier

This commit is contained in:
Chris Hennes
2022-02-12 15:29:15 -06:00
parent f19f4e65b2
commit 5ca1477d93
3 changed files with 62 additions and 6 deletions

View File

@@ -284,6 +284,34 @@ of the line after a space (e.g. https://github.com/FreeCAD/FreeCAD master).</str
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="advanced">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Advanced Options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="Gui::PrefCheckBox" name="guiprefcheckboxShowBranchSwitcher">
<property name="text">
<string>Show option to change branches (Requires GitPython)</string>
</property>
<property name="prefEntry" stdset="0">
<string>ShowBranchSwitcher</string>
</property>
<property name="prefPath" stdset="0">
<string>Addons</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">

View File

@@ -96,6 +96,18 @@ class ChangeBranchDialog(QtWidgets.QWidget):
# This is the one we are already on... just return
return
result = QtWidgets.QMessageBox.critical(
self,
translate("AddonsInstaller", "DANGER: Developer feature"),
translate(
"AddonsInstaller",
"DANGER: Switching branches is intended for developers and beta testers, and may result in broken, non-backwards compatible documents, instability, crashes, and/or the premature heat death of the universe. Are you sure you want to continue?",
),
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.Cancel,
QtWidgets.QMessageBox.Cancel,
)
if result == QtWidgets.QMessageBox.Cancel:
return
if self.item_model.repo.is_dirty():
result = QtWidgets.QMessageBox.critical(
self,
@@ -107,7 +119,7 @@ class ChangeBranchDialog(QtWidgets.QWidget):
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.Cancel,
QtWidgets.QMessageBox.Cancel,
)
if result == QtWidgets.QMessageBox.Cancel:
if result == QtWidgets.QMessageBox.Cancel:
return
if isinstance(ref, git.TagReference):

View File

@@ -200,7 +200,10 @@ class PackageDetails(QWidget):
if repo.metadata:
installed_version_string += (
"<b>"
+ translate("AddonsInstaller", "On branch {}, update available to version").format(repo.branch)
+ translate(
"AddonsInstaller",
"On branch {}, update available to version",
).format(repo.branch)
+ " "
)
installed_version_string += repo.metadata.Version
@@ -234,12 +237,18 @@ class PackageDetails(QWidget):
if detached_head:
installed_version_string += (
translate("AddonsInstaller", "Git tag '{}' checked out, no updates possible").format(branch)
translate(
"AddonsInstaller",
"Git tag '{}' checked out, no updates possible",
).format(branch)
+ "."
)
else:
installed_version_string += (
translate("AddonsInstaller", "This is the latest version available for branch {}").format(branch)
translate(
"AddonsInstaller",
"This is the latest version available for branch {}",
).format(branch)
+ "."
)
elif status == AddonManagerRepo.UpdateStatus.PENDING_RESTART:
@@ -341,7 +350,7 @@ class PackageDetails(QWidget):
self.ui.labelWarningInfo.show()
self.ui.labelWarningInfo.setText(
"<h1>"
+ translate("AddonsInstaller", "WARNING: This addon requires FreeCAD ")
+ translate("AddonsInstaller", "WARNING: This addon requires FreeCAD ")
+ required_version
+ "</h1>"
)
@@ -362,7 +371,9 @@ class PackageDetails(QWidget):
# it's possible that this package actually provides versions of itself
# for newer and older versions
first_supported_version = self.repo.metadata.getFirstSupportedFreeCADVersion()
first_supported_version = (
self.repo.metadata.getFirstSupportedFreeCADVersion()
)
if first_supported_version is not None:
required_version = first_supported_version.split(".")
fc_major = int(FreeCAD.Version()[0])
@@ -381,6 +392,11 @@ class PackageDetails(QWidget):
self.ui.buttonChangeBranch.hide()
pref = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons")
show_switcher = pref.GetBool("ShowBranchSwitcher", False)
if not show_switcher:
return
# Is this repo installed? If not, return.
if self.repo.status() == AddonManagerRepo.UpdateStatus.NOT_INSTALLED:
return