in src/main/java/org/apache/sling/feature/io/IOUtils.java [100:167]
public static List<String> getFeatureFiles(final File homeDirectory, final String... files)
throws IOException {
String[] featureFiles = files;
if ( featureFiles == null || featureFiles.length == 0 ) {
// Default value - check feature directory otherwise features file
final File[] candidates = new File[] {
new File(homeDirectory, DEFAULT_DIRECTORY),
new File(homeDirectory, DEFAULT_FEATURE_FILE),
new File(DEFAULT_DIRECTORY),
new File(DEFAULT_FEATURE_FILE)
};
File f = null;
for(final File c : candidates) {
if ( c.exists() ) {
f = c;
break;
}
}
// nothing found, we default to the first candidate and fail later
if ( f == null ) {
f = candidates[0];
}
featureFiles = new String[] {f.getAbsolutePath()};
}
final List<String> paths = new ArrayList<>();
for(final String name : featureFiles) {
// check for absolute
if ( name.indexOf(':') > 1 ) {
paths.add(name);
} else {
// file or relative
File f = null;
final File test = new File(name);
if ( test.isAbsolute() ) {
f = test;
} else {
final File[] candidates = {
new File(homeDirectory, name),
new File(homeDirectory, DEFAULT_DIRECTORY + File.separatorChar + name),
new File(name),
new File(DEFAULT_DIRECTORY + File.separatorChar + name),
};
for(final File c : candidates) {
if ( c.exists() && c.isFile() ) {
f = c;
break;
}
}
}
if ( f != null && f.exists() ) {
if ( f.isFile() ) {
processFile(paths, f);
} else {
processDir(paths, f);
}
} else {
// we simply add the path and fail later on
paths.add(new File(name).getAbsolutePath());
}
}
}
Collections.sort(paths, FEATURE_PATH_COMP);
return paths;
}