Skip to content

Commit

Permalink
Keep the original order of artifacts after the instrumentation for bu…
Browse files Browse the repository at this point in the history
…ild classpath (#28154)
  • Loading branch information
bot-gradle committed Feb 21, 2024
2 parents e8ca934 + fa707b8 commit 42c131d
Show file tree
Hide file tree
Showing 8 changed files with 283 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public class TransformedClassPath implements ClassPath {
public static final String INSTRUMENTED_MARKER_FILE_NAME = ".gradle-instrumented.marker";
public static final String INSTRUMENTED_JAR_DIR_NAME = "instrumented";
public static final String ORIGINAL_JAR_DIR_NAME = "original";
public static final String INSTRUMENTED_ENTRY_PREFIX = "instrumented-";

private final ClassPath originalClassPath;
// mapping of original -> "double"
Expand Down Expand Up @@ -332,7 +333,7 @@ private static boolean areInstrumentedAndOriginalJarValid(File instrumentedJar,
return instrumentedJar.getParentFile() != null
&& instrumentedJar.getParentFile().getName().equals(INSTRUMENTED_JAR_DIR_NAME)
&& !originalJar.equals(instrumentedJar)
&& instrumentedJar.getName().equals(originalJar.getName());
&& instrumentedJar.getName().equals(INSTRUMENTED_ENTRY_PREFIX + originalJar.getName());
}

private static boolean isInstrumentedMarkerFile(File classPathEntry) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,18 +183,18 @@ class TransformedClassPathTest extends Specification {
cp.findTransformedJarFor(file(original)) == (transformed != null ? file(transformed) : null)

where:
inputClassPath | outputClassPath | original | transformed
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar") | classPath("1.jar") | "1.jar" | "instrumented/1.jar"
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | "instrumented/1.jar"
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | null
classPath("1.jar", INSTRUMENTED_MARKER_FILE_NAME, "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | "instrumented/2.jar"
classPath("1.jar", INSTRUMENTED_MARKER_FILE_NAME, "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | null
classPath("1/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | "instrumented/1.jar"
classPath("1/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | "instrumented/2.jar"

classPath("1.jar") | classPath("1.jar") | "1.jar" | null
classPath("1.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | null
classPath("1.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | null
inputClassPath | outputClassPath | original | transformed
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar") | classPath("1.jar") | "1.jar" | "instrumented/instrumented-1.jar"
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | "instrumented/instrumented-1.jar"
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | null
classPath("1.jar", INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | "instrumented/instrumented-2.jar"
classPath("1.jar", INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | null
classPath("1/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | "instrumented/instrumented-1.jar"
classPath("1/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | "instrumented/instrumented-2.jar"

classPath("1.jar") | classPath("1.jar") | "1.jar" | null
classPath("1.jar", "2.jar") | classPath("1.jar", "2.jar") | "1.jar" | null
classPath("1.jar", "2.jar") | classPath("1.jar", "2.jar") | "2.jar" | null
}

def "invalid instrumenting artifact transform outputs are detected"() {
Expand All @@ -205,13 +205,13 @@ class TransformedClassPathTest extends Specification {
thrown IllegalArgumentException

where:
inputClassPath | _
transformedClassPath("1.jar": "instrumented/1.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", INSTRUMENTED_MARKER_FILE_NAME, "instrumented/2.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "2.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "1.jar", "1.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "1.jar", "instrumented/1.jar") | _
inputClassPath | _
transformedClassPath("1.jar": "instrumented/instrumented-1.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-2.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "2.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "1.jar", "1.jar") | _
classPath(INSTRUMENTED_MARKER_FILE_NAME, "1.jar", "instrumented/instrumented-1.jar") | _
}

def "instrumenting artifact transform output is recognized"() {
Expand All @@ -223,14 +223,14 @@ class TransformedClassPathTest extends Specification {
cp.asFiles == outputClassPath.asFiles

where:
inputClassPath | outputClassPath
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar") | classPath("1.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath("1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath("1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/2.jar", "2.jar") | classPath("1.jar", "2.jar")
inputClassPath | outputClassPath
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar") | classPath("1.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath("1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath("1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar")
classPath(INSTRUMENTED_MARKER_FILE_NAME, "instrumented/instrumented-1.jar", "1.jar", "2/$INSTRUMENTED_MARKER_FILE_NAME", "instrumented/instrumented-2.jar", "2.jar") | classPath("1.jar", "2.jar")
}

def "not instrumenting artifact transform output is recognized"() {
Expand Down Expand Up @@ -258,9 +258,9 @@ class TransformedClassPathTest extends Specification {
cp.asFiles == outputClassPath.asFiles

where:
inputClassPath | outputClassPath
transformedClassPath("1.jar": "instrumented/1.jar") | classPath("1.jar")
transformedClassPath("instrumented/1.jar": "1.jar") | classPath("instrumented/1.jar")
inputClassPath | outputClassPath
transformedClassPath("1.jar": "instrumented/instrumented-1.jar") | classPath("1.jar")
transformedClassPath("instrumented/instrumented-1.jar": "1.jar") | classPath("instrumented/instrumented-1.jar")
}

private static File file(String path) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ class GradlePluginWithVariantsPublicationIntegrationTest extends AbstractIntegra
fails 'greet', "--stacktrace"

then:
failure.assertHasErrorOutput("""> Could not resolve all files for configuration ':classpath'.
failure.assertHasErrorOutput("""> Could not resolve all artifacts for configuration ':classpath'.
> Could not resolve com.example:producer:1.0.
Required by:
project : > com.example.greeting:com.example.greeting.gradle.plugin:1.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class RepositoryOrderingIntegrationSpec extends AbstractIntegrationSpec {
fails "tasks"

then: "searched buildscript repository then plugin portal"
failure.assertHasCause("Could not resolve all files for configuration ':classpath'.")
failure.assertHasCause("Could not resolve all artifacts for configuration ':classpath'.")
failure.assertHasCause """
Could not find my:plugin:1.0.
Searched in the following locations:
Expand All @@ -69,7 +69,7 @@ class RepositoryOrderingIntegrationSpec extends AbstractIntegrationSpec {
fails "tasks"

then: "searched buildscript repository then plugin management repositories"
failure.assertHasCause("Could not resolve all files for configuration ':classpath'.")
failure.assertHasCause("Could not resolve all artifacts for configuration ':classpath'.")
failure.assertHasCause """
Could not find my:plugin:1.0.
Searched in the following locations:
Expand Down

0 comments on commit 42c131d

Please sign in to comment.