package de.micromata.borgbutler.server;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
public class BorgVersion {
|
public static final String BORG_DEFAULT_DOWNLOAD_VERSION = "1.1.16";
|
|
private static final String BORG_VERSION = BORG_DEFAULT_DOWNLOAD_VERSION;
|
|
private String binariesDownloadVersion = BORG_DEFAULT_DOWNLOAD_VERSION;
|
|
private String[][] borgBinaries = {
|
{"freebsd64", "FreeBSD 64"},
|
{"linux32", "Linux 32"},
|
{"linux64", "Linux 64"},
|
{"macosx64", "MacOS X 64"}};
|
|
private String minimumRequiredBorgVersion = "1.1.8";
|
|
public String getBinariesDownloadUrl() {
|
return "https://github.com/borgbackup/borg/releases/download/" + binariesDownloadVersion + "/";
|
}
|
|
/**
|
* One of the values "macosx64", "linux64" etc. for using a binary provided by BorgButler or null / "manual" for
|
* using a manual installed borg version.
|
*/
|
private String borgBinary;
|
|
private boolean versionOK = false;
|
private String version;
|
private String statusMessage;
|
|
public BorgVersion copyFrom(BorgVersion other) {
|
this.borgBinary = other.borgBinary;
|
this.versionOK = other.versionOK;
|
this.version = other.version;
|
this.statusMessage = other.statusMessage;
|
return this;
|
}
|
|
public String getBinariesDownloadVersion() {
|
return this.binariesDownloadVersion;
|
}
|
|
public void setBinariesDownloadVersion(String binariesDownloadVersion) {
|
if (StringUtils.isNotBlank(binariesDownloadVersion)) {
|
this.binariesDownloadVersion = binariesDownloadVersion;
|
} else {
|
this.binariesDownloadVersion = BORG_DEFAULT_DOWNLOAD_VERSION;
|
}
|
}
|
|
public String[][] getBorgBinaries() {
|
return this.borgBinaries;
|
}
|
|
/**
|
* @return The minimal required borg version (installed on host).
|
*/
|
public String getMinimumRequiredBorgVersion() {
|
return this.minimumRequiredBorgVersion;
|
}
|
|
public String getBorgBinary() {
|
return this.borgBinary;
|
}
|
|
public boolean isVersionOK() {
|
return this.versionOK;
|
}
|
|
public String getVersion() {
|
return this.version;
|
}
|
|
public String getStatusMessage() {
|
return this.statusMessage;
|
}
|
|
BorgVersion setBorgBinary(String borgBinary) {
|
this.borgBinary = borgBinary;
|
return this;
|
}
|
|
BorgVersion setVersionOK(boolean versionOK) {
|
this.versionOK = versionOK;
|
return this;
|
}
|
|
BorgVersion setVersion(String version) {
|
this.version = version;
|
return this;
|
}
|
|
BorgVersion setStatusMessage(String statusMessage) {
|
this.statusMessage = statusMessage;
|
return this;
|
}
|
|
public static int compareVersions(String thisVersion, String otherVersion) {
|
String[] thisParts = checkVersion(thisVersion);
|
String[] otherParts = checkVersion(otherVersion);
|
int length = Math.max(thisParts.length, otherParts.length);
|
for (int i = 0; i < length; i++) {
|
int thisPart = i < thisParts.length ?
|
Integer.parseInt(thisParts[i]) : 0;
|
int thatPart = i < otherParts.length ?
|
Integer.parseInt(otherParts[i]) : 0;
|
if (thisPart < thatPart)
|
return -1;
|
if (thisPart > thatPart)
|
return 1;
|
}
|
return 0;
|
}
|
|
// https://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java
|
public static String[] checkVersion(String version) {
|
if (version == null) {
|
throw new IllegalArgumentException("Version can not be null");
|
}
|
if (!version.matches("[0-9]+(\\.[0-9]+)*")) {
|
throw new IllegalArgumentException("Invalid version format: " + version);
|
}
|
return version.split("\\.");
|
}
|
}
|