in buildSrc/src/main/java/com/uber/okbuck/wrapper/BuckWrapperTask.java [86:132]
private static String toWatchmanMatchers(Set<String> wildcardPatterns) {
List<String> matches = new ArrayList<>();
List<String> suffixes = new ArrayList<>();
List<String> names = new ArrayList<>();
for (String wildcardPattern : wildcardPatterns) {
String simplifiedPattern =
wildcardPattern.startsWith("**/")
? wildcardPattern.replaceAll("\\*\\*/", "")
: wildcardPattern;
String basename = FilenameUtils.getBaseName(simplifiedPattern);
String extension = FilenameUtils.getExtension(simplifiedPattern);
if (!simplifiedPattern.contains("/")) {
// simple file name with no path prefixes
if (basename.equals("*")) { // suffix
suffixes.add(extension);
} else { // name
names.add(simplifiedPattern);
}
} else {
matches.add(wildcardPattern);
}
}
String matchExprs =
matches
.stream()
.map(match -> " [\"match\", \"" + match + "\", \"wholename\"]")
.collect(Collectors.joining(",\n"));
String suffixExprs =
suffixes
.stream()
.map(suffix -> " [\"suffix\", \"" + suffix + "\"]")
.collect(Collectors.joining(",\n"));
@Var
String nameExpr =
names.stream().map(name -> "\"" + name + "\"").collect(Collectors.joining(", "));
if (!nameExpr.isEmpty()) {
nameExpr = " [\"name\", [" + nameExpr + "]]";
}
return Stream.of(suffixExprs, nameExpr, matchExprs)
.filter(StringUtils::isNotEmpty)
.collect(Collectors.joining(",\n"));
}