Skip to content

Commit

Permalink
Make TerminalOutput.pathToMaven() more robust to avoid #929
Browse files Browse the repository at this point in the history
  • Loading branch information
ppalaga committed Apr 12, 2024
1 parent 0f4bdb6 commit f68c716
Showing 1 changed file with 42 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -714,37 +714,50 @@ private AttributedString formatTransfers(String projectId) {

public static String pathToMaven(String location) {
String[] p = location.split("/");
if (p.length >= 4 && p[p.length - 1].startsWith(p[p.length - 3] + "-" + p[p.length - 2])) {
String artifactId = p[p.length - 3];
String version = p[p.length - 2];
String classifier;
String type;
String artifactIdVersion = artifactId + "-" + version;
StringBuilder sb = new StringBuilder();
if (p[p.length - 1].charAt(artifactIdVersion.length()) == '-') {
classifier =
p[p.length - 1].substring(artifactIdVersion.length() + 1, p[p.length - 1].lastIndexOf('.'));
} else {
classifier = null;
}
type = p[p.length - 1].substring(p[p.length - 1].lastIndexOf('.') + 1);
for (int j = 0; j < p.length - 3; j++) {
if (j > 0) {
sb.append('.');
}
sb.append(p[j]);
}
sb.append(':').append(artifactId).append(':').append(version);
if (!"jar".equals(type) || classifier != null) {
sb.append(':');
if (!"jar".equals(type)) {
sb.append(type);
}
if (classifier != null) {
sb.append(':').append(classifier);
if (p.length >= 4) {
final String artifactId = p[p.length - 3];
final String version = p[p.length - 2];
final String fileName = p[p.length - 1];
final int artifactIdVersionLength = artifactId.length() + 1 /* the dash */ + version.length();
if (fileName.length() > artifactIdVersionLength) {
/* We use fileName.length() > to avoid https://github.com/apache/maven-mvnd/issues/929
* In the code below, we assume that the fileName ends either with `.<extension>`
* or `-<classifier>.<extension>` */
final int lastPeriodPos = fileName.lastIndexOf('.');
if (lastPeriodPos >= 0) {
final String classifier;
final String type;
final StringBuilder sb = new StringBuilder();
try {
if (fileName.charAt(artifactIdVersionLength) == '-') {
classifier = fileName.substring(artifactIdVersionLength + 1, lastPeriodPos);
} else {
classifier = null;
}
} catch (Exception e) {
throw new RuntimeException(
"Could not transform path '" + location + "' to Maven coordinates ", e);
}
type = fileName.substring(lastPeriodPos + 1);
for (int j = 0; j < p.length - 3; j++) {
if (j > 0) {
sb.append('.');
}
sb.append(p[j]);
}
sb.append(':').append(artifactId).append(':').append(version);
if (!"jar".equals(type) || classifier != null) {
sb.append(':');
if (!"jar".equals(type)) {
sb.append(type);
}
if (classifier != null) {
sb.append(':').append(classifier);
}
}
return sb.toString();
}
}
return sb.toString();
}
return location;
}
Expand Down

0 comments on commit f68c716

Please sign in to comment.