in plugins/cli/cli-lib/src/main/java/co/elastic/gradle/cli/base/MultipleSymlinkTask.java [93:151]
private Map<File, File> getDefaultSymlink(Configuration configuration, Architecture arch, final Set<String> allVersions) {
return configuration.getFiles().stream()
.filter(value ->
value.getName().toLowerCase(Locale.ROOT)
.contains(arch.name().toLowerCase(Locale.ROOT)) ||
value.getName().toLowerCase(Locale.ROOT)
.contains(arch.dockerName().toLowerCase(Locale.ROOT)) ||
value.getName().contains(OS.current().map(
Map.of(OS.DARWIN, "mac")
))
)
.filter(value -> {
// Some binaries only have OS in their name
final boolean nameHasCurrentOS = value.getName().contains(OS.current().name()) ||
value.getName().contains(OS.current().name().toLowerCase(Locale.ROOT)) ||
value.getName().contains(OS.current().map(
Map.of(OS.DARWIN, "mac")
));
if (value.getName().toLowerCase(Locale.ROOT)
.contains(arch.name().toLowerCase(Locale.ROOT)) ||
value.getName().toLowerCase(Locale.ROOT)
.contains(arch.dockerName().toLowerCase(Locale.ROOT))
) {
return nameHasCurrentOS;
} else {
// When the name has no architecture, we imply x86_64
if (OS.current().equals(OS.DARWIN)) {
// except for mac where some binaries still rely on emulation
return nameHasCurrentOS;
} else {
return nameHasCurrentOS && arch.equals(Architecture.X86_64);
}
}
})
.collect(Collectors.toMap(
value -> {
String name = value.getName();
for (OS os : OS.values()) {
for (String separator : List.of("-", ".")) {
name = name
.replace(separator + os.name(), "")
.replace(separator + os.name().toLowerCase(Locale.ROOT), "")
.replace(separator + arch.name(), "")
.replace(separator + arch.name().toLowerCase(Locale.ROOT), "")
.replace(separator + arch.dockerName(), "")
.replace(separator + arch.dockerName().toUpperCase(Locale.ROOT), "")
.replace(separator + "macos", "")
.replace(separator + "osx", "")
.replace(separator + "mac-386", "");
}
}
return BaseCliPlugin.getExecutable(
getProject(),
normalizeName(name, allVersions)
);
},
Function.identity()
));
}