Skip to content

Commit

Permalink
BUGZILLA 1856 - Änderung in Bug 1852 betraf zu viele Plugins, Interpr…
Browse files Browse the repository at this point in the history
…etation der abhängigen Versionsnummern nochmal so angepasst, dass das neue Verhalten nur gilt, wenn das "+"/"-" in Klammern angegeben ist, ansonsten gilt wieder das vorherige Verhalten
  • Loading branch information
willuhn committed Jul 12, 2018
1 parent ca6a272 commit 52ef87d
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 28 deletions.
1 change: 1 addition & 0 deletions build/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
HEAD 2.9 (nightly)

* BUG: 0099 BUGZILLA 1856 - �nderung in Bug 1852 betraf zu viele Plugins, Interpretation der abh�ngigen Versionsnummern nochmal so angepasst, dass das neue Verhalten nur gilt, wenn das "+"/"-" in Klammern angegeben ist, ansonsten gilt wieder das vorherige Verhalten
* BUG: 0098 Button "�bernehmen" im Auswahlfenster f�r den Benutzerordner wurde nicht korrekt freigegeben
* BUG: 0097 Jameica-Fenster wurde bei Dualscreen-Setup unter bestimmten Bedingungen nicht auf dem tats�chlichen sondern auf dem prim�ren Monitor wiederhergestellt
* NEW: 0096 BUGZILLA 1852 - Definition von der Versionsnummern von abh�ngigen Plugins erweitert. Wenn z.Bsp. "1.1.2+" definiert ist, erlaubt das nur noch "1.1.2" - "1.1.(x>2)". Vorher war z.Bsp. auch "1.2" erlaubt
Expand Down
56 changes: 36 additions & 20 deletions src/de/willuhn/jameica/plugin/Version.java
Original file line number Diff line number Diff line change
Expand Up @@ -262,59 +262,75 @@ public boolean compliesTo(String dependency)

try
{
String cleaned = dependency.replaceAll("[\\(\\)\\-\\+]","");
// Beim Parsen der Version muessen wir das "+"/"-" am Ende entfernen
Version required = new Version(dependency.replaceAll("[+-]",""));
Version required = new Version(cleaned);

// Versionsnummer ist mit einem Minus angegeben.
// also darf hoechstens die angegebene Versionsnummer vorhanden sein
if (dependency.endsWith("-"))

// Versionsnummer ist mit einem Plus in Klammern angegeben.
// Dann darf nur der letzte Teil der Versionsnummer, der sich vor dem "(+)"
// groesser sein.
if (dependency.endsWith("(+)"))
{
// Format 1-
// Format 1+
// Major-Version muss die Anforderung erfuellen
if (required.minor == null && required.patch == null)
return this.getMajor() <= required.getMajor();
return this.getMajor() >= required.getMajor();

// Format 1.1-
// Format 1.1+
// Major-Version muss identisch sein
// Minor-Version muss die Anforderung erfuellen
if (required.patch == null)
return this.getMajor() == required.getMajor() &&
this.getMinor() <= required.getMinor();
this.getMinor() >= required.getMinor();

// Format 1.1.1-
// Format 1.1.1+
// Major- und Minor-Version muessen identisch sein
// Patch-Version muss die Anforderung erfuellen
return this.getMajor() == required.getMajor() &&
this.getMinor() == required.getMinor() &&
this.getPatch() <= required.getPatch();
this.getPatch() >= required.getPatch();
}

// Versionsnummer mit Plus, also muss die vorhandene Version
// gleicher ODER groesser sein
if (dependency.endsWith("+"))
// Versionsnummer ist mit einem Minus in Klammern angegeben.
// Dann darf nur der letzte Teil der Versionsnummer, der sich vor dem "(-)"
// groesser sein.
if (dependency.endsWith("(-)"))
{
// Format 1+
// Format 1-
// Major-Version muss die Anforderung erfuellen
if (required.minor == null && required.patch == null)
return this.getMajor() >= required.getMajor();
return this.getMajor() <= required.getMajor();

// Format 1.1+
// Format 1.1-
// Major-Version muss identisch sein
// Minor-Version muss die Anforderung erfuellen
if (required.patch == null)
return this.getMajor() == required.getMajor() &&
this.getMinor() >= required.getMinor();
this.getMinor() <= required.getMinor();

// Format 1.1.1+
// Format 1.1.1-
// Major- und Minor-Version muessen identisch sein
// Patch-Version muss die Anforderung erfuellen
return this.getMajor() == required.getMajor() &&
this.getMinor() == required.getMinor() &&
this.getPatch() >= required.getPatch();
this.getPatch() <= required.getPatch();
}

int compare = this.compareTo(required);

// Versionsnummer ist mit einem Plus ohne Klammern angegeben
// Dann ist jede beliebige gleiche oder groessere Versionsnummer erlaubt.
if (dependency.endsWith("+"))
return compare >= 0;

// Versionsnummer ist mit einem Minus ohne Klammern angegeben
// Dann ist jede beliebige gleiche oder kleinere Versionsnummer erlaubt.
if (dependency.endsWith("-"))
return compare <= 0;

// Kein Vorzeichen, dann muss die Versionsnummer exakt passen
return this.compareTo(required) == 0;
return compare == 0;
}
catch (Exception e)
{
Expand Down
76 changes: 68 additions & 8 deletions test/de/willuhn/jameica/system/VersionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,65 @@ public void test004()
*/
@Test
public void test005()
{
Version v = new Version("1.0.0-foobar");
Assert.assertTrue(v.compliesTo("1(+)"));
Assert.assertTrue(v.compliesTo("1.0(+)"));
Assert.assertTrue(v.compliesTo("1.0.0(+)"));
Assert.assertTrue(v.compliesTo("1(-)"));
Assert.assertTrue(v.compliesTo("1.0(-)"));
Assert.assertTrue(v.compliesTo("1.0.0(-)"));

Assert.assertTrue(v.compliesTo("1.0.0"));

Assert.assertFalse(v.compliesTo("1.0.1(+)"));
Assert.assertFalse(v.compliesTo("0.9(-)"));
}

/**
*
*/
@Test
public void test006()
{
Version v = new Version("1.2.0-foobar");
Assert.assertTrue(v.compliesTo("1(+)"));
Assert.assertFalse(v.compliesTo("2(+)"));

Assert.assertTrue(v.compliesTo("1.1(+)"));
Assert.assertTrue(v.compliesTo("1.2(+)"));
Assert.assertFalse(v.compliesTo("1.3(+)"));

Assert.assertTrue(v.compliesTo("1.2.0(+)"));
Assert.assertFalse(v.compliesTo("1.1.0(+)"));
Assert.assertFalse(v.compliesTo("1.2.2(+)"));
}

/**
*
*/
@Test
public void test007()
{
Version v = new Version("2.2.0-foobar");
Assert.assertTrue(v.compliesTo("2(-)"));
Assert.assertFalse(v.compliesTo("1(-)"));

Assert.assertTrue(v.compliesTo("2.2(-)"));
Assert.assertTrue(v.compliesTo("2.3(-)"));
Assert.assertFalse(v.compliesTo("2.1(-)"));

Assert.assertTrue(v.compliesTo("2.2.0(-)"));
Assert.assertTrue(v.compliesTo("2.2.1(-)"));
Assert.assertFalse(v.compliesTo("2.1.0(-)"));
Assert.assertFalse(v.compliesTo("1.2.2(-)"));
}

/**
*
*/
@Test
public void test008()
{
Version v = new Version("1.0.0-foobar");
Assert.assertTrue(v.compliesTo("1+"));
Expand All @@ -80,7 +139,7 @@ public void test005()
*
*/
@Test
public void test006()
public void test009()
{
Version v = new Version("1.2.0-foobar");
Assert.assertTrue(v.compliesTo("1+"));
Expand All @@ -90,19 +149,20 @@ public void test006()
Assert.assertTrue(v.compliesTo("1.2+"));
Assert.assertFalse(v.compliesTo("1.3+"));

Assert.assertTrue(v.compliesTo("0.2.0+"));
Assert.assertTrue(v.compliesTo("1.2.0+"));
Assert.assertFalse(v.compliesTo("1.1.0+"));
Assert.assertTrue(v.compliesTo("1.1.0+"));
Assert.assertFalse(v.compliesTo("1.2.2+"));
}

/**
*
*/
@Test
public void test007()
public void test010()
{
Version v = new Version("2.2.0-foobar");
Assert.assertTrue(v.compliesTo("2-"));
Assert.assertFalse(v.compliesTo("2-"));
Assert.assertFalse(v.compliesTo("1-"));

Assert.assertTrue(v.compliesTo("2.2-"));
Expand All @@ -120,7 +180,7 @@ public void test007()
*
*/
@Test
public void test008()
public void test011()
{
Version v = new Version("2.2.0-foobar");
Assert.assertTrue(v.compliesTo("2.2.0"));
Expand All @@ -132,7 +192,7 @@ public void test008()
*
*/
@Test
public void test009()
public void test012()
{
Version v1 = new Version("1.0.1-foo");
Version v2 = new Version("1.0.2-bar");
Expand All @@ -143,7 +203,7 @@ public void test009()
*
*/
@Test
public void test010()
public void test013()
{
Version v1 = new Version("1.0.1-foo");
Version v2 = new Version("1.0.1-bar");
Expand All @@ -154,7 +214,7 @@ public void test010()
*
*/
@Test
public void test011()
public void test014()
{
Version v1 = new Version("1.0.2-foo");
Version v2 = new Version("1.0.1-bar");
Expand Down

0 comments on commit 52ef87d

Please sign in to comment.