private Map getDefaultSymlink()

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()
                ));
    }