Skip to content

Commit 44a9a1c

Browse files
author
danf
committed
BI-196 - Change Dependency scopes to be held in a set, instead of a list
1 parent a7a4830 commit 44a9a1c

File tree

9 files changed

+49
-42
lines changed

9 files changed

+49
-42
lines changed

build-info-api/src/main/java/org/jfrog/build/api/Dependency.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.thoughtworks.xstream.annotations.XStreamAlias;
2020

2121
import java.util.List;
22+
import java.util.Set;
2223

2324
/**
2425
* Contains the build module dependency information
@@ -31,7 +32,7 @@ public class Dependency extends BaseBuildFileBean {
3132
public static final String SCOPE_BUILD = "_build_";
3233

3334
private String id;
34-
private List<String> scopes;
35+
private Set<String> scopes;
3536
private List<String> requiredBy;
3637

3738
/**
@@ -57,7 +58,7 @@ public void setId(String id) {
5758
*
5859
* @return Dependency scope list
5960
*/
60-
public List<String> getScopes() {
61+
public Set<String> getScopes() {
6162
return scopes;
6263
}
6364

@@ -66,7 +67,7 @@ public List<String> getScopes() {
6667
*
6768
* @param scopes Dependency scope list
6869
*/
69-
public void setScopes(List<String> scopes) {
70+
public void setScopes(Set<String> scopes) {
7071
this.scopes = scopes;
7172
}
7273

build-info-api/src/main/java/org/jfrog/build/api/builder/BuildInfoMavenBuilder.java

+7-10
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Date;
2727
import java.util.List;
2828
import java.util.Properties;
29+
import java.util.Set;
2930

3031
/**
3132
* A temporary builder for the build class specifically for Maven extractor.
@@ -383,18 +384,14 @@ private void mergeModuleDependencies(Module existingModule, Module moduleToMerge
383384
return;
384385
}
385386

386-
for (Dependency dependencyToMarge : dependenciesToMerge) {
387-
Dependency foundDependency = findDependency(existingDependencies, dependencyToMarge.getId());
387+
for (Dependency dependencyToMerge : dependenciesToMerge) {
388+
Dependency foundDependency = findDependency(existingDependencies, dependencyToMerge.getId());
388389
if (foundDependency == null) {
389-
existingDependencies.add(dependencyToMarge);
390+
existingDependencies.add(dependencyToMerge);
390391
} else {
391-
List<String> existingScopes = foundDependency.getScopes();
392-
List<String> scopesToMerge = dependencyToMarge.getScopes();
393-
for (String scopeToMerge : scopesToMerge) {
394-
if (!existingScopes.contains(scopeToMerge)) {
395-
existingScopes.add(scopeToMerge);
396-
}
397-
}
392+
Set<String> mergedDependencies = foundDependency.getScopes();
393+
mergedDependencies.addAll(dependencyToMerge.getScopes());
394+
foundDependency.setScopes(mergedDependencies);
398395
}
399396
}
400397
}

build-info-api/src/main/java/org/jfrog/build/api/builder/DependencyBuilder.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import java.util.List;
2323
import java.util.Properties;
24+
import java.util.Set;
2425

2526
/**
2627
* A builder for the dependency class
@@ -31,7 +32,7 @@ public class DependencyBuilder {
3132

3233
private String id;
3334
private String type;
34-
private List<String> scopes;
35+
private Set<String> scopes;
3536
private String sha1;
3637
private String md5;
3738
private List<String> requiredBy;
@@ -82,7 +83,7 @@ public DependencyBuilder type(String type) {
8283
* @param scopes Dependency scope list
8384
* @return Builder instance
8485
*/
85-
public DependencyBuilder scopes(List<String> scopes) {
86+
public DependencyBuilder scopes(Set<String> scopes) {
8687
this.scopes = scopes;
8788
return this;
8889
}

build-info-api/src/test/java/org/jfrog/build/api/DependencyTest.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818

1919
import com.google.common.collect.Lists;
2020
import com.google.common.collect.Maps;
21+
import com.google.common.collect.Sets;
2122
import org.testng.Assert;
2223
import org.testng.annotations.Test;
2324

2425
import java.util.HashMap;
2526
import java.util.List;
2627
import java.util.Properties;
28+
import java.util.Set;
2729

2830
import static org.testng.Assert.assertEquals;
2931
import static org.testng.Assert.assertNull;
@@ -56,7 +58,7 @@ public void testEmptyConstructor() {
5658
public void testSetters() {
5759
String id = "moo";
5860
String type = "bob";
59-
List<String> scopes = Lists.newArrayList("mitzi");
61+
Set<String> scopes = Sets.newHashSet("mitzi");
6062
String sha1 = "pop";
6163
String md5 = "shmop";
6264
List<String> requiredBy = Lists.newArrayList("pitzi");
@@ -87,7 +89,7 @@ public void testEqualsAndHash() {
8789
dependency1.setSha1("111");
8890
dependency1.setMd5("1111");
8991
dependency1.setRequiredBy(Lists.newArrayList("11111"));
90-
dependency1.setScopes(Lists.newArrayList("1", "11"));
92+
dependency1.setScopes(Sets.newHashSet("1", "11"));
9193
dependency1.setProperties(properties);
9294

9395
Dependency dependency2 = new Dependency();
@@ -96,7 +98,7 @@ public void testEqualsAndHash() {
9698
dependency2.setSha1("111");
9799
dependency2.setMd5("1111");
98100
dependency2.setRequiredBy(Lists.newArrayList("11111"));
99-
dependency2.setScopes(Lists.newArrayList("1", "11"));
101+
dependency2.setScopes(Sets.newHashSet("1", "11"));
100102
dependency2.setProperties(properties);
101103

102104
Dependency dependency3 = new Dependency();
@@ -105,7 +107,7 @@ public void testEqualsAndHash() {
105107
dependency3.setSha1("333");
106108
dependency3.setMd5("3333");
107109
dependency3.setRequiredBy(Lists.newArrayList("33333"));
108-
dependency3.setScopes(Lists.newArrayList("333333", "3333333"));
110+
dependency3.setScopes(Sets.newHashSet("333333", "3333333"));
109111
dependency3.setProperties(properties);
110112

111113
Assert.assertEquals(dependency1, dependency2, "Expected equals == true for equivalent artifacts");

build-info-api/src/test/java/org/jfrog/build/api/builder/BuildInfoMavenBuilderTest.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jfrog.build.api.builder;
22

33
import com.google.common.collect.Lists;
4+
import com.google.common.collect.Sets;
45
import org.jfrog.build.api.*;
56
import org.jfrog.build.api.release.PromotionStatus;
67
import org.testng.annotations.Test;
@@ -182,12 +183,12 @@ public void testDuplicateModuleArtifacts() {
182183
*/
183184
public void testDuplicateModuleDependencies() {
184185
ModuleBuilder module1 = new ModuleBuilder().id("id");
185-
module1.addDependency(new DependencyBuilder().id("dep1").scopes(Lists.newArrayList("compile")).build());
186-
module1.addDependency(new DependencyBuilder().id("dep2").scopes(Lists.newArrayList("compile")).build());
186+
module1.addDependency(new DependencyBuilder().id("dep1").scopes(Sets.newHashSet("compile")).build());
187+
module1.addDependency(new DependencyBuilder().id("dep2").scopes(Sets.newHashSet("compile")).build());
187188

188189
ModuleBuilder module2 = new ModuleBuilder().id("id");
189-
module2.addDependency(new DependencyBuilder().id("dep1").scopes(Lists.newArrayList("compile", "test")).build());
190-
module2.addDependency(new DependencyBuilder().id("dep2").scopes(Lists.newArrayList("compile", "test")).build());
190+
module2.addDependency(new DependencyBuilder().id("dep1").scopes(Sets.newHashSet("compile", "test")).build());
191+
module2.addDependency(new DependencyBuilder().id("dep2").scopes(Sets.newHashSet("compile", "test")).build());
191192

192193
BuildInfoMavenBuilder builder = new BuildInfoMavenBuilder("test").number("4").started("test");
193194
builder.addModule(module1.build());

build-info-api/src/test/java/org/jfrog/build/api/builder/DependencyBuilderTest.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
package org.jfrog.build.api.builder;
1818

1919
import com.google.common.collect.Lists;
20+
import com.google.common.collect.Sets;
2021
import org.jfrog.build.api.Dependency;
2122
import org.testng.annotations.Test;
2223

2324
import java.util.List;
2425
import java.util.Properties;
26+
import java.util.Set;
2527

2628
import static org.testng.Assert.*;
2729

@@ -54,7 +56,7 @@ public void testDefaultBuild() {
5456
public void testBuilderSetters() {
5557
String id = "moo";
5658
String type = "bob";
57-
List<String> scopes = Lists.newArrayList("mitzi");
59+
Set<String> scopes = Sets.newHashSet("mitzi");
5860
String sha1 = "pop";
5961
String md5 = "shmop";
6062
List<String> requiredBy = Lists.newArrayList("pitzi");
@@ -85,7 +87,7 @@ public void testBuilderAddMethods() {
8587
addProperty(propertyKey, propertyValue).build();
8688
List<String> requiredByList = dependency.getRequiredBy();
8789
assertFalse(requiredByList.isEmpty(), "A dependency requirement should have been added.");
88-
assertEquals(requiredByList.get(0), requiredBy, "Unexpected dependency requirement.");
90+
assertEquals(requiredByList.iterator().next(), requiredBy, "Unexpected dependency requirement.");
8991
assertTrue(dependency.getProperties().containsKey(propertyKey),
9092
"A dependency property should have been added.");
9193
assertEquals(dependency.getProperties().get(propertyKey), propertyValue,

build-info-extractor-gradle/src/main/groovy/org/jfrog/gradle/plugin/artifactory/extractor/GradleBuildInfoExtractor.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.google.common.base.Function;
2020
import com.google.common.base.Predicate;
2121
import com.google.common.collect.Iterables;
22+
import com.google.common.collect.Sets;
2223
import org.apache.commons.lang.StringUtils;
2324
import org.gradle.api.Project;
2425
import org.gradle.api.Task;
@@ -32,12 +33,12 @@
3233
import org.jfrog.build.api.builder.*;
3334
import org.jfrog.build.api.release.Promotion;
3435
import org.jfrog.build.api.util.FileChecksumCalculator;
35-
import org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration;
3636
import org.jfrog.build.client.DeployDetails;
37-
import org.jfrog.build.extractor.clientConfiguration.IncludeExcludePatterns;
38-
import org.jfrog.build.extractor.clientConfiguration.PatternMatcher;
3937
import org.jfrog.build.extractor.BuildInfoExtractor;
4038
import org.jfrog.build.extractor.BuildInfoExtractorUtils;
39+
import org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration;
40+
import org.jfrog.build.extractor.clientConfiguration.IncludeExcludePatterns;
41+
import org.jfrog.build.extractor.clientConfiguration.PatternMatcher;
4142
import org.jfrog.gradle.plugin.artifactory.ArtifactoryPluginUtil;
4243
import org.jfrog.gradle.plugin.artifactory.task.BuildInfoBaseTask;
4344

@@ -321,18 +322,16 @@ public boolean apply(@Nullable Dependency input) {
321322
// if it's already in the dependencies list just add the current scope
322323
if (any(dependencies, idEqualsPredicate)) {
323324
Dependency existingDependency = find(dependencies, idEqualsPredicate);
324-
List<String> existingScopes = existingDependency.getScopes();
325-
String configScope = configuration.getName();
326-
if (!existingScopes.contains(configScope)) {
327-
existingScopes.add(configScope);
328-
}
325+
Set<String> existingScopes = existingDependency.getScopes();
326+
existingScopes.add(configuration.getName());
327+
existingDependency.setScopes(existingScopes);
329328
} else {
330329
Map<String, String> checksums = FileChecksumCalculator.calculateChecksums(file, MD5, SHA1);
331330
DependencyBuilder dependencyBuilder = new DependencyBuilder()
332331
.type(getTypeString(artifact.getType(),
333332
artifact.getClassifier(), artifact.getExtension()))
334333
.id(depId)
335-
.scopes(newArrayList(configuration.getName())).
334+
.scopes(Sets.newHashSet(configuration.getName())).
336335
md5(checksums.get(MD5)).sha1(checksums.get(SHA1));
337336
dependencies.add(dependencyBuilder.build());
338337
}

build-info-extractor-ivy/src/main/java/org/jfrog/build/extractor/trigger/ArtifactoryBuildInfoTrigger.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.common.base.Predicate;
44
import com.google.common.collect.Iterables;
55
import com.google.common.collect.Lists;
6+
import com.google.common.collect.Sets;
67
import org.apache.commons.lang.StringUtils;
78
import org.apache.ivy.ant.IvyTask;
89
import org.apache.ivy.core.IvyContext;
@@ -27,11 +28,11 @@
2728
import org.jfrog.build.api.builder.DependencyBuilder;
2829
import org.jfrog.build.api.builder.ModuleBuilder;
2930
import org.jfrog.build.api.util.FileChecksumCalculator;
30-
import org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration;
3131
import org.jfrog.build.client.DeployDetails;
32+
import org.jfrog.build.context.BuildContext;
33+
import org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration;
3234
import org.jfrog.build.extractor.clientConfiguration.IncludeExcludePatterns;
3335
import org.jfrog.build.extractor.clientConfiguration.PatternMatcher;
34-
import org.jfrog.build.context.BuildContext;
3536
import org.jfrog.build.util.IvyResolverHelper;
3637

3738
import java.io.File;
@@ -114,7 +115,7 @@ private void collectDependencyInformation(IvyEvent event) {
114115
Dependency dependency = findDependencyInList(id, type, moduleDependencies);
115116
if (dependency == null) {
116117
DependencyBuilder dependencyBuilder = new DependencyBuilder();
117-
dependencyBuilder.type(type).scopes(Lists.newArrayList(configuration));
118+
dependencyBuilder.type(type).scopes(Sets.newHashSet(configuration));
118119
String idString = getModuleIdString(id.getOrganisation(),
119120
id.getName(), id.getRevision());
120121
dependencyBuilder.id(idString);

build-info-extractor-maven3/src/main/java/org/jfrog/build/extractor/maven/BuildInfoRecorder.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import org.jfrog.build.api.builder.DependencyBuilder;
4141
import org.jfrog.build.api.builder.ModuleBuilder;
4242
import org.jfrog.build.api.util.FileChecksumCalculator;
43-
import org.jfrog.build.client.*;
43+
import org.jfrog.build.client.DeployDetails;
4444
import org.jfrog.build.extractor.BuildInfoExtractor;
4545
import org.jfrog.build.extractor.BuildInfoExtractorUtils;
4646
import org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration;
@@ -49,6 +49,7 @@
4949
import org.jfrog.build.extractor.clientConfiguration.PatternMatcher;
5050
import org.jfrog.build.extractor.maven.resolver.ResolutionHelper;
5151
import org.xml.sax.InputSource;
52+
5253
import javax.xml.xpath.*;
5354
import java.io.File;
5455
import java.io.FileInputStream;
@@ -105,7 +106,8 @@ public void setConfiguration(ArtifactoryClientConfiguration conf) {
105106
/**
106107
* The repository listeners (either ArtifactoryEclipseRepositoryListener or ArtifactorySonatypeRepositoryListener) invoke this method
107108
* with each artifact being resolved by Maven.
108-
* @param artifact The artifact being resolved by Maven.
109+
*
110+
* @param artifact The artifact being resolved by Maven.
109111
*/
110112
public void artifactResolved(Artifact artifact) {
111113
if (artifact != null) {
@@ -410,13 +412,14 @@ private void extractModuleDependencies(MavenProject project) {
410412

411413
/**
412414
* Merge the dependencies taken from the MavenProject object with those collected inside the resolvedArtifacts collection.
413-
* @param projectDependencies The artifacts taken from the MavenProject object.
415+
*
416+
* @param projectDependencies The artifacts taken from the MavenProject object.
414417
*/
415418
private void mergeProjectDependencies(Set<Artifact> projectDependencies) {
416419
// Go over all the artifacts taken from the MavenProject object, and replace their equals method, so that we are
417420
// able to merge them together with the artifacts inside the resolvedArtifacts set:
418421
Set<Artifact> dependecies = Sets.newHashSet();
419-
for(Artifact artifact : projectDependencies) {
422+
for (Artifact artifact : projectDependencies) {
420423
String classifier = artifact.getClassifier();
421424
classifier = classifier == null ? "" : classifier;
422425
DefaultArtifact art = new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
@@ -595,7 +598,7 @@ private void addDependenciesToCurrentModule(ModuleBuilder module) {
595598
dependency.getClassifier(), getExtension(depFile)));
596599
String scopes = dependency.getScope();
597600
if (StringUtils.isNotBlank(scopes)) {
598-
dependencyBuilder.scopes(Lists.newArrayList(scopes));
601+
dependencyBuilder.scopes(Sets.newHashSet(scopes));
599602
}
600603
setDependencyChecksums(depFile, dependencyBuilder);
601604
module.addDependency(dependencyBuilder.build());

0 commit comments

Comments
 (0)