diff --git a/src/Mod/AddonManager/AddonManagerOptions.ui b/src/Mod/AddonManager/AddonManagerOptions.ui
index cbf06be88e..882b8783ec 100644
--- a/src/Mod/AddonManager/AddonManagerOptions.ui
+++ b/src/Mod/AddonManager/AddonManagerOptions.ui
@@ -284,6 +284,34 @@ of the line after a space (e.g. https://github.com/FreeCAD/FreeCAD master).
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Advanced Options
+
+
+
-
+
+
+ Show option to change branches (Requires GitPython)
+
+
+ ShowBranchSwitcher
+
+
+ Addons
+
+
+
+
+
+
-
diff --git a/src/Mod/AddonManager/change_branch.py b/src/Mod/AddonManager/change_branch.py
index 7cca58a274..a5143bc674 100644
--- a/src/Mod/AddonManager/change_branch.py
+++ b/src/Mod/AddonManager/change_branch.py
@@ -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):
diff --git a/src/Mod/AddonManager/package_details.py b/src/Mod/AddonManager/package_details.py
index 40627cfb39..2e49cf0e0e 100644
--- a/src/Mod/AddonManager/package_details.py
+++ b/src/Mod/AddonManager/package_details.py
@@ -200,7 +200,10 @@ class PackageDetails(QWidget):
if repo.metadata:
installed_version_string += (
""
- + 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(
"
"
- + translate("AddonsInstaller", "WARNING: This addon requires FreeCAD ")
+ + translate("AddonsInstaller", "WARNING: This addon requires FreeCAD ")
+ required_version
+ "
"
)
@@ -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