mirror of https://github.com/apache/ant-ivy
refactor `IvyDependencyUpdateChecker`
This commit is contained in:
parent
af6502084f
commit
3a865956d8
|
|
@ -17,8 +17,6 @@
|
|||
*/
|
||||
package org.apache.ivy.ant;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -30,61 +28,98 @@ import org.apache.ivy.core.module.id.ModuleRevisionId;
|
|||
import org.apache.ivy.core.report.ResolveReport;
|
||||
import org.apache.ivy.core.resolve.IvyNode;
|
||||
import org.apache.ivy.core.resolve.ResolveOptions;
|
||||
|
||||
import org.apache.tools.ant.BuildException;
|
||||
|
||||
import static org.apache.ivy.util.StringUtils.splitToArray;
|
||||
|
||||
public class IvyDependencyUpdateChecker extends IvyPostResolveTask {
|
||||
|
||||
private String revisionToCheck = "latest.integration";
|
||||
|
||||
private boolean download = false;
|
||||
|
||||
private boolean checkIfChanged = false;
|
||||
|
||||
private boolean showTransitive = false;
|
||||
|
||||
private String revisionToCheck = "latest.integration";
|
||||
|
||||
public boolean isDownload() {
|
||||
return download;
|
||||
}
|
||||
|
||||
public void setDownload(boolean download) {
|
||||
this.download = download;
|
||||
}
|
||||
|
||||
public boolean isCheckIfChanged() {
|
||||
return checkIfChanged;
|
||||
}
|
||||
|
||||
public void setCheckIfChanged(boolean checkIfChanged) {
|
||||
this.checkIfChanged = checkIfChanged;
|
||||
}
|
||||
|
||||
public boolean isShowTransitive() {
|
||||
return showTransitive;
|
||||
}
|
||||
|
||||
public void setShowTransitive(boolean showTransitive) {
|
||||
this.showTransitive = showTransitive;
|
||||
}
|
||||
|
||||
public String getRevisionToCheck() {
|
||||
return revisionToCheck;
|
||||
}
|
||||
|
||||
public void setRevisionToCheck(String revisionToCheck) {
|
||||
this.revisionToCheck = revisionToCheck;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public void doExecute() throws BuildException {
|
||||
prepareAndCheck();
|
||||
|
||||
ModuleDescriptor originalModuleDescriptor = getResolvedReport().getModuleDescriptor();
|
||||
// clone module descriptor
|
||||
DefaultModuleDescriptor latestModuleDescriptor = new DefaultModuleDescriptor(
|
||||
originalModuleDescriptor.getModuleRevisionId(),
|
||||
originalModuleDescriptor.getStatus(), originalModuleDescriptor.getPublicationDate());
|
||||
// copy configurations
|
||||
for (Configuration configuration : originalModuleDescriptor.getConfigurations()) {
|
||||
latestModuleDescriptor.addConfiguration(configuration);
|
||||
}
|
||||
// clone dependency and add new one with the requested revisionToCheck
|
||||
for (DependencyDescriptor dependencyDescriptor : originalModuleDescriptor.getDependencies()) {
|
||||
ModuleRevisionId upToDateMrid = ModuleRevisionId.newInstance(
|
||||
dependencyDescriptor.getDependencyRevisionId(), revisionToCheck);
|
||||
latestModuleDescriptor.addDependency(dependencyDescriptor.clone(upToDateMrid));
|
||||
}
|
||||
|
||||
// resolve
|
||||
ResolveOptions resolveOptions = new ResolveOptions();
|
||||
resolveOptions.setCheckIfChanged(checkIfChanged);
|
||||
resolveOptions.setConfs(splitToArray(getConf()));
|
||||
resolveOptions.setDownload(isDownload());
|
||||
resolveOptions.setLog(getLog());
|
||||
resolveOptions.setConfs(splitToArray(getConf()));
|
||||
resolveOptions.setCheckIfChanged(checkIfChanged);
|
||||
|
||||
ResolveReport latestReport;
|
||||
try {
|
||||
latestReport = getIvyInstance().getResolveEngine().resolve(latestModuleDescriptor,
|
||||
resolveOptions);
|
||||
ResolveReport latestReport = getIvyInstance().getResolveEngine()
|
||||
.resolve(createModuleDescriptorForRevisionToCheck(), resolveOptions);
|
||||
|
||||
displayDependencyUpdates(getResolvedReport(), latestReport);
|
||||
if (showTransitive) {
|
||||
displayNewDependencyOnLatest(getResolvedReport(), latestReport);
|
||||
displayMissingDependencyOnLatest(getResolvedReport(), latestReport);
|
||||
}
|
||||
|
||||
} catch (ParseException | IOException e) {
|
||||
} catch (Exception e) {
|
||||
throw new BuildException("impossible to resolve dependencies:\n\t" + e, e);
|
||||
}
|
||||
}
|
||||
|
||||
private ModuleDescriptor createModuleDescriptorForRevisionToCheck() {
|
||||
ModuleDescriptor moduleDescriptor = getResolvedReport().getModuleDescriptor();
|
||||
|
||||
// clone module descriptor
|
||||
DefaultModuleDescriptor latestModuleDescriptor = new DefaultModuleDescriptor(
|
||||
moduleDescriptor.getModuleRevisionId(), moduleDescriptor.getStatus(), moduleDescriptor.getPublicationDate());
|
||||
|
||||
// copy configurations
|
||||
for (Configuration configuration : moduleDescriptor.getConfigurations()) {
|
||||
latestModuleDescriptor.addConfiguration(configuration);
|
||||
}
|
||||
|
||||
// clone direct dependencies with the requested revisionToCheck
|
||||
for (DependencyDescriptor dependencyDescriptor : moduleDescriptor.getDependencies()) {
|
||||
ModuleRevisionId upToDateMrid = ModuleRevisionId.newInstance(
|
||||
dependencyDescriptor.getDependencyRevisionId(), revisionToCheck);
|
||||
latestModuleDescriptor.addDependency(dependencyDescriptor.clone(upToDateMrid));
|
||||
}
|
||||
|
||||
return latestModuleDescriptor;
|
||||
}
|
||||
|
||||
private void displayDependencyUpdates(ResolveReport originalReport, ResolveReport latestReport) {
|
||||
|
|
@ -118,8 +153,7 @@ public class IvyDependencyUpdateChecker extends IvyPostResolveTask {
|
|||
}
|
||||
}
|
||||
|
||||
private void displayMissingDependencyOnLatest(ResolveReport originalReport,
|
||||
ResolveReport latestReport) {
|
||||
private void displayMissingDependencyOnLatest(ResolveReport originalReport, ResolveReport latestReport) {
|
||||
List<ModuleRevisionId> listOfMissingDependencyOnLatest = new ArrayList<>();
|
||||
for (IvyNode originalDependency : originalReport.getDependencies()) {
|
||||
boolean dependencyFound = false;
|
||||
|
|
@ -141,8 +175,7 @@ public class IvyDependencyUpdateChecker extends IvyPostResolveTask {
|
|||
}
|
||||
}
|
||||
|
||||
private void displayNewDependencyOnLatest(ResolveReport originalReport,
|
||||
ResolveReport latestReport) {
|
||||
private void displayNewDependencyOnLatest(ResolveReport originalReport, ResolveReport latestReport) {
|
||||
List<ModuleRevisionId> listOfNewDependencyOnLatest = new ArrayList<>();
|
||||
for (IvyNode latest : latestReport.getDependencies()) {
|
||||
boolean dependencyFound = false;
|
||||
|
|
@ -162,36 +195,4 @@ public class IvyDependencyUpdateChecker extends IvyPostResolveTask {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getRevisionToCheck() {
|
||||
return revisionToCheck;
|
||||
}
|
||||
|
||||
public void setRevisionToCheck(String revisionToCheck) {
|
||||
this.revisionToCheck = revisionToCheck;
|
||||
}
|
||||
|
||||
public boolean isDownload() {
|
||||
return download;
|
||||
}
|
||||
|
||||
public void setDownload(boolean download) {
|
||||
this.download = download;
|
||||
}
|
||||
|
||||
public boolean isShowTransitive() {
|
||||
return showTransitive;
|
||||
}
|
||||
|
||||
public void setShowTransitive(boolean showTransitive) {
|
||||
this.showTransitive = showTransitive;
|
||||
}
|
||||
|
||||
public boolean isCheckIfChanged() {
|
||||
return checkIfChanged;
|
||||
}
|
||||
|
||||
public void setCheckIfChanged(boolean checkIfChanged) {
|
||||
this.checkIfChanged = checkIfChanged;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
dependencyUpdateChecker.setProject(project);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
@After
|
||||
public void tearDown() {
|
||||
TestHelper.cleanCache();
|
||||
}
|
||||
|
||||
|
|
@ -137,8 +137,7 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
*/
|
||||
@Test(expected = BuildException.class)
|
||||
public void testFailure() {
|
||||
dependencyUpdateChecker
|
||||
.setFile(new File("test/java/org/apache/ivy/ant/ivy-failure.xml"));
|
||||
dependencyUpdateChecker.setFile(new File("test/java/org/apache/ivy/ant/ivy-failure.xml"));
|
||||
dependencyUpdateChecker.execute();
|
||||
}
|
||||
|
||||
|
|
@ -150,8 +149,7 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
expExc.expect(BuildException.class);
|
||||
expExc.expectMessage("unknown");
|
||||
|
||||
dependencyUpdateChecker
|
||||
.setFile(new File("test/java/org/apache/ivy/ant/ivy-simple.xml"));
|
||||
dependencyUpdateChecker.setFile(new File("test/java/org/apache/ivy/ant/ivy-simple.xml"));
|
||||
dependencyUpdateChecker.setConf("default,unknown");
|
||||
dependencyUpdateChecker.execute();
|
||||
}
|
||||
|
|
@ -161,8 +159,7 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
*/
|
||||
@Test(expected = BuildException.class)
|
||||
public void testFailureOnBadDependencyIvyFile() {
|
||||
dependencyUpdateChecker.setFile(new File(
|
||||
"test/java/org/apache/ivy/ant/ivy-failure2.xml"));
|
||||
dependencyUpdateChecker.setFile(new File("test/java/org/apache/ivy/ant/ivy-failure2.xml"));
|
||||
dependencyUpdateChecker.execute();
|
||||
}
|
||||
|
||||
|
|
@ -171,15 +168,13 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
*/
|
||||
@Test(expected = BuildException.class)
|
||||
public void testFailureOnBadStatusInDependencyIvyFile() {
|
||||
dependencyUpdateChecker.setFile(new File(
|
||||
"test/java/org/apache/ivy/ant/ivy-failure3.xml"));
|
||||
dependencyUpdateChecker.setFile(new File("test/java/org/apache/ivy/ant/ivy-failure3.xml"));
|
||||
dependencyUpdateChecker.execute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHaltOnFailure() {
|
||||
dependencyUpdateChecker
|
||||
.setFile(new File("test/java/org/apache/ivy/ant/ivy-failure.xml"));
|
||||
dependencyUpdateChecker.setFile(new File("test/java/org/apache/ivy/ant/ivy-failure.xml"));
|
||||
dependencyUpdateChecker.setHaltonfailure(false);
|
||||
dependencyUpdateChecker.execute();
|
||||
}
|
||||
|
|
@ -190,10 +185,8 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
dependencyUpdateChecker.setConf("*,!default");
|
||||
dependencyUpdateChecker.execute();
|
||||
|
||||
// assertTrue(getIvyFileInCache(ModuleRevisionId.newInstance("org1", "mod1.1", "2.0"))
|
||||
// .exists());
|
||||
// assertFalse(getIvyFileInCache(ModuleRevisionId.newInstance("org1", "mod1.2", "2.0"))
|
||||
// .exists());
|
||||
// assertTrue(getIvyFileInCache(ModuleRevisionId.newInstance("org1", "mod1.1", "2.0")).exists());
|
||||
// assertFalse(getIvyFileInCache(ModuleRevisionId.newInstance("org1", "mod1.2", "2.0")).exists());
|
||||
|
||||
assertLogContaining("Dependencies updates available :");
|
||||
assertLogContaining("All dependencies are up to date");
|
||||
|
|
@ -213,8 +206,7 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
dependencyUpdateChecker.getProject().setProperty("ivy.dep.file", ivyFile.getAbsolutePath());
|
||||
dependencyUpdateChecker.execute();
|
||||
|
||||
// assertTrue(getResolvedIvyFileInCache(
|
||||
// ModuleRevisionId.newInstance("apache", "resolve-simple", "1.0")).exists());
|
||||
// assertTrue(getResolvedIvyFileInCache(ModuleRevisionId.newInstance("apache", "resolve-simple", "1.0")).exists());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -228,8 +220,7 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
"test/java/org/apache/ivy/ant/ivy-simple.xml");
|
||||
dependencyUpdateChecker.execute();
|
||||
|
||||
// assertTrue(getResolvedIvyFileInCache(
|
||||
// ModuleRevisionId.newInstance("apache", "resolve-simple", "1.0")).exists());
|
||||
// assertTrue(getResolvedIvyFileInCache(ModuleRevisionId.newInstance("apache", "resolve-simple", "1.0")).exists());
|
||||
|
||||
assertLogContaining("Dependencies updates available :");
|
||||
assertLogContaining("org1#mod1.2\t2.0 -> 2.2");
|
||||
|
|
@ -237,26 +228,28 @@ public class IvyDependencyUpdateCheckerTest extends AntTaskTestCase {
|
|||
|
||||
@Test
|
||||
public void testSimpleExtends() {
|
||||
dependencyUpdateChecker.setFile(new File(
|
||||
"test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"));
|
||||
dependencyUpdateChecker.setFile(new File("test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"));
|
||||
dependencyUpdateChecker.execute();
|
||||
assertEquals("1", dependencyUpdateChecker.getProject().getProperty("ivy.parents.count"));
|
||||
assertEquals("apache",
|
||||
dependencyUpdateChecker.getProject().getProperty("ivy.parent[0].organisation"));
|
||||
assertEquals("resolve-simple",
|
||||
dependencyUpdateChecker.getProject().getProperty("ivy.parent[0].module"));
|
||||
assertEquals("1.0",
|
||||
dependencyUpdateChecker.getProject().getProperty("ivy.parent[0].revision"));
|
||||
assertNull(dependencyUpdateChecker.getProject().getProperty("ivy.parent[0].branch"));
|
||||
|
||||
assertLogContaining("Dependencies updates available :");
|
||||
Project project = dependencyUpdateChecker.getProject();
|
||||
assertEquals("1", project.getProperty("ivy.parents.count"));
|
||||
assertEquals("apache", project.getProperty("ivy.parent[0].organisation"));
|
||||
assertEquals("resolve-simple", project.getProperty("ivy.parent[0].module"));
|
||||
assertEquals("1.0", project.getProperty("ivy.parent[0].revision"));
|
||||
assertNull(project.getProperty("ivy.parent[0].branch"));
|
||||
|
||||
assertLogContaining("Dependencies updates available");
|
||||
// ivy-extends-multiconf.xml declares org1:mod1.1:1.1
|
||||
assertLogContaining("org1#mod1.1\t1.1 -> 2.0");
|
||||
assertLogContaining("org1#mod1.1\t1.0 -> 2.0");
|
||||
assertLogContaining("org1#mod1.2\t2.1 -> 2.2");
|
||||
assertLogContaining("org2#mod2.1\t0.3 -> 0.7");
|
||||
|
||||
// inherited from parent
|
||||
// ivy-multiconf.xml declares org1:mod1.1:2.0 -- no update available
|
||||
assertLogNotContaining("org1#mod1.1\t2.0");
|
||||
// ivy-multiconf.xml declares org1:mod1.2:2.0
|
||||
assertLogContaining("org1#mod1.2\t2.0 -> 2.2");
|
||||
// ivy-extends-multiconf.xml declares org2:mod2.1:0.3
|
||||
assertLogContaining("org2#mod2.1\t0.3 -> 0.7");
|
||||
// org2:mod2.1:0.3 ivy.xml declares org1:mod1.1:1.0
|
||||
assertLogContaining("org1#mod1.1\t1.0 -> 2.0");
|
||||
// org1:mod1.1:2.0 ivy.xml declares org1:mod1.2:2.1
|
||||
assertLogContaining("org1#mod1.2\t2.1 -> 2.2");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,13 +15,13 @@
|
|||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
under the License.
|
||||
-->
|
||||
<ivy-module version="2.0">
|
||||
<ivy-module version="2.0">
|
||||
|
||||
<info organisation="apache" module="resolve-extends" revision="1.2" status="release">
|
||||
<!-- <extends organisation="apache" module="resolve-simple" revision="1.0" location="./ivy-multiconf.xml"/> -->
|
||||
|
||||
|
||||
<!-- description inherited from parent -->
|
||||
<description>Demonstrates configuration-specific dependencies</description>
|
||||
</info>
|
||||
|
|
@ -37,10 +37,10 @@
|
|||
</configurations>
|
||||
|
||||
<publications/>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<!-- not in parent -->
|
||||
<dependency org="org2" name="mod2.1" rev="0.3" conf="default"/>
|
||||
<dependency org="org2" name="mod2.1" rev="0.3" conf="default->compile(default)"/>
|
||||
<!-- overrides parent -->
|
||||
<dependency org="org1" name="mod1.1" rev="1.1" conf="default,compile->default" transitive="false"/>
|
||||
|
||||
|
|
@ -49,4 +49,4 @@
|
|||
<dependency org="org1" name="mod1.1" rev="2.0" transitive="false" conf="compile->default"/>
|
||||
</dependencies>
|
||||
|
||||
</ivy-module>
|
||||
</ivy-module>
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@
|
|||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
under the License.
|
||||
-->
|
||||
<ivy-module version="2.0">
|
||||
<ivy-module version="2.0">
|
||||
|
||||
<info module="resolve-extends">
|
||||
<extends organisation="apache" module="resolve-simple" revision="latest.integration" location="./ivy-multiconf.xml"/>
|
||||
|
|
@ -33,9 +33,9 @@
|
|||
|
||||
<dependencies>
|
||||
<!-- not in parent -->
|
||||
<dependency org="org2" name="mod2.1" rev="0.3" conf="default" />
|
||||
<dependency org="org2" name="mod2.1" rev="0.3" conf="default->compile(default)" />
|
||||
<!-- overrides parent -->
|
||||
<dependency org="org1" name="mod1.1" rev="1.1" conf="default,compile->default" transitive="false" />
|
||||
</dependencies>
|
||||
|
||||
</ivy-module>
|
||||
</ivy-module>
|
||||
|
|
|
|||
Loading…
Reference in New Issue