From bd7db1070e07cf1777a0c0ee6e770625f8734fb6 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Tue, 15 Apr 2014 09:53:10 -0400
Subject: [PATCH] Merge pr-170 'ticket-fix' from https://github.com/lucidd/gitblit
---
src/main/java/com/gitblit/transport/ssh/commands/PluginDispatcher.java | 40 +++++++++++++++++++++++++++++++++-------
1 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/PluginDispatcher.java b/src/main/java/com/gitblit/transport/ssh/commands/PluginDispatcher.java
index 70dc513..37649ea 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/PluginDispatcher.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/PluginDispatcher.java
@@ -27,6 +27,7 @@
import ro.fortsoft.pf4j.PluginDescriptor;
import ro.fortsoft.pf4j.PluginState;
import ro.fortsoft.pf4j.PluginWrapper;
+import ro.fortsoft.pf4j.Version;
import com.gitblit.manager.IGitblit;
import com.gitblit.models.PluginRegistry.InstallState;
@@ -35,6 +36,7 @@
import com.gitblit.models.UserModel;
import com.gitblit.utils.FlipTable;
import com.gitblit.utils.FlipTable.Borders;
+import com.gitblit.utils.StringUtils;
import com.google.common.base.Joiner;
/**
@@ -519,11 +521,24 @@
new UnloggedFailure(1, String.format("Failed to install %s", urlOrId));
}
} else {
- PluginRelease pv = gitblit.lookupRelease(urlOrId, version);
- if (pv == null) {
- throw new Failure(1, String.format("Plugin \"%s\" is not in the registry!", urlOrId));
+ PluginRelease pr = gitblit.lookupRelease(urlOrId, version);
+ if (pr == null) {
+ throw new UnloggedFailure(1, String.format("Plugin \"%s\" is not in the registry!", urlOrId));
}
- if (gitblit.installPlugin(pv.url, !disableChecksum)) {
+
+ // enforce minimum system requirement
+ if (!StringUtils.isEmpty(pr.requires)) {
+ Version requires = Version.createVersion(pr.requires);
+ Version system = gitblit.getSystemVersion();
+ boolean isValid = system.isZero() || system.atLeast(requires);
+ if (!isValid) {
+ String msg = String.format("Plugin \"%s:%s\" requires Gitblit %s",
+ urlOrId, pr.version, pr.requires);
+ throw new UnloggedFailure(1, msg);
+ }
+ }
+
+ if (gitblit.installPlugin(pr.url, !disableChecksum)) {
stdout.println(String.format("Installed %s", urlOrId));
} else {
throw new UnloggedFailure(1, String.format("Failed to install %s", urlOrId));
@@ -556,13 +571,24 @@
throw new UnloggedFailure("Invalid plugin specified!");
}
- PluginRelease pv = gitblit.lookupRelease(pluginWrapper.getPluginId(), version);
- if (pv == null) {
+ PluginRelease pr = gitblit.lookupRelease(pluginWrapper.getPluginId(), version);
+ if (pr == null) {
throw new UnloggedFailure(1, String.format("Plugin \"%s\" is not in the registry!", pluginWrapper.getPluginId()));
}
+ // enforce minimum system requirement
+ if (!StringUtils.isEmpty(pr.requires)) {
+ Version requires = Version.createVersion(pr.requires);
+ Version system = gitblit.getSystemVersion();
+ boolean isValid = system.isZero() || system.atLeast(requires);
+ if (!isValid) {
+ throw new Failure(1, String.format("Plugin \"%s:%s\" requires Gitblit %s",
+ pluginWrapper.getPluginId(), pr.version, pr.requires));
+ }
+ }
+
try {
- if (gitblit.upgradePlugin(pluginWrapper.getPluginId(), pv.url, !disableChecksum)) {
+ if (gitblit.upgradePlugin(pluginWrapper.getPluginId(), pr.url, !disableChecksum)) {
stdout.println(String.format("Upgraded %s", pluginWrapper.getPluginId()));
} else {
throw new UnloggedFailure(1, String.format("Failed to upgrade %s", pluginWrapper.getPluginId()));
--
Gitblit v1.9.1