Skip to content

Commit

Permalink
Initial implementation on fix for issue 109 - LinkedHashMap provides
Browse files Browse the repository at this point in the history
  • Loading branch information
Cohen, Steven (sc1478) committed Sep 15, 2016
1 parent 789863d commit f9ede6d
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/main/java/org/redline_rpm/Builder.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -69,7 +70,7 @@ public class Builder {
protected final List< Dependency> requires = new LinkedList< Dependency>();
protected final List< Dependency> obsoletes = new LinkedList< Dependency>();
protected final List< Dependency> conflicts = new LinkedList< Dependency>();
protected final List< Dependency> provides = new LinkedList< Dependency>();
protected final Map< String, Dependency> provides = new LinkedHashMap< String, Dependency>();

protected final List< String> triggerscripts = new LinkedList< String>();
protected final List< String> triggerscriptprogs = new LinkedList< String>();
Expand Down Expand Up @@ -149,11 +150,11 @@ protected void addConflicts(final CharSequence name, final CharSequence version,
}

public void addProvides(final String name, final String version) {
provides.add(new Dependency(name, version, version.length() > 0 ? EQUAL : 0));
provides.put(name, new Dependency(name, version, version.length() > 0 ? EQUAL : 0));
}

protected void addProvides(final CharSequence name, final CharSequence version, final int flag) {
provides.add(new Dependency(name.toString(), version.toString(), flag));
provides.put(name.toString(), new Dependency(name.toString(), version.toString(), flag));
}

/**
Expand Down
50 changes: 50 additions & 0 deletions src/main/java/org/redline_rpm/Dependency.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
* This class represents a RPM dependency.
Expand Down Expand Up @@ -89,4 +90,53 @@ public static Integer[] getArrayOfFlags(List<Dependency> dependencyList) {

return flagsList.toArray(new Integer[flagsList.size()]);
}

/**
* Returns an array of String with the name of every dependency from a list of dependencies.
* @param dependencies List of dependencies
* @return String[] with all names of the dependencies
*/
public static String[] getArrayOfNames(Map< String, Dependency> dependencies) {
List<String> nameList = new LinkedList<String>();

for (Dependency dependency : dependencies.values()) {
nameList.add(dependency.getName());
}

return nameList.toArray(new String[nameList.size()]);
}

/**
* Returns an array of String with the version of every dependency from a list of dependencies.
* @param dependencies List of dependencies
* @return String[] with all versions of the dependencies
*/
public static String[] getArrayOfVersions(Map< String, Dependency> dependencies) {
List<String> versionList = new LinkedList<String>();

for (Dependency dependency : dependencies.values()) {
versionList.add(dependency.getVersion());
}

return versionList.toArray(new String[versionList.size()]);
}

/**
* Returns an array of Integer with the flags of every dependency from a list of dependencies.
* @param dependencies List of dependencies
* @return Integer[] with all flags of the dependencies
*/
public static Integer[] getArrayOfFlags(Map< String, Dependency> dependencies) {
List<Integer> flagsList = new LinkedList<Integer>();

for (Dependency dependency : dependencies.values()) {
flagsList.add(dependency.getFlags());
}

return flagsList.toArray(new Integer[flagsList.size()]);
}
}




26 changes: 26 additions & 0 deletions src/test/java/org/redline_rpm/BuilderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ public void testMultipleCapabilities() throws Exception {
builder.setType(BINARY);
builder.addDependency("httpd", GREATER | EQUAL, "1.0");
builder.addDependency("httpd", LESS, "2.0");

builder.build( new File( getTargetDir()));

Format format = new Scanner().run(channelWrapper("target" + File.separator + "testMultipleCapabilities-1.0-1.noarch.rpm"));
Expand All @@ -179,6 +180,31 @@ public void testMultipleCapabilities() throws Exception {
assertArrayEquals(new int[] { LESS }, Arrays.copyOfRange(requireflags, requireflags.length - 1, require.length));
assertArrayEquals(new String[] { "2.0" }, Arrays.copyOfRange(requireversion, requireversion.length - 1, require.length));
}
@Test
public void testProvideOverride() throws Exception {
Builder builder = new Builder();
builder.setPackage("testProvideOverride", "1.0", "1");
builder.setBuildHost("localhost");
builder.setLicense("GPL");
builder.setPlatform(NOARCH, LINUX);
builder.setType(BINARY);
builder.addProvides("testProvideOverride", "1.0");

builder.build( new File( getTargetDir()));

Format format = new Scanner().run(channelWrapper("target" + File.separator + "testProvideOverride-1.0-1.noarch.rpm"));

String[] provide = (String[])format.getHeader().getEntry(HeaderTag.PROVIDENAME).getValues();
int[] provideflags = (int[])format.getHeader().getEntry(HeaderTag.PROVIDEFLAGS).getValues();
String[] provideversion = (String[])format.getHeader().getEntry(HeaderTag.PROVIDEVERSION).getValues();

assertEquals( 1, provide.length);
assertArrayEquals(new String[] { "testProvideOverride"}, Arrays.copyOfRange(provide, 0, provide.length));
assertArrayEquals(new int[] { EQUAL }, Arrays.copyOfRange(provideflags, 0, provide.length));
assertArrayEquals(new String[] { "1.0" }, Arrays.copyOfRange(provideversion, 0, provide.length));

}

@Test
public void testAddHeaderEntry() {
Builder builder = new Builder();
Expand Down

0 comments on commit f9ede6d

Please sign in to comment.