in git-agent/src/main/java/jetbrains/buildServer/buildTriggers/vcs/git/agent/command/impl/CleanCommandImpl.java [97:142]
private void handleLongFileNames(@NotNull File rootDir, @NotNull VcsException originalError) throws VcsException {
List<String> files = new ArrayList<String>();
FileUtil.listFilesRecursively(rootDir, "", true, Integer.MAX_VALUE, new Predicate<File>() {
public boolean apply(File f) {
return true;
}
}, files);
int targetDirLength = rootDir.getAbsolutePath().length();
List<String> longFileNames = new ArrayList<String>();
for (String f : files) {
if (targetDirLength + 1 + f.length() >= 256)
longFileNames.add(f);
}
if (longFileNames.isEmpty()) {
Loggers.VCS.info("No files with long names found");
throw originalError;
} else {
Loggers.VCS.info(longFileNames.size() + " files with long names found:");
for (String f : longFileNames) {
Loggers.VCS.info(f);
}
Loggers.VCS.info("Try removing files with long names manually");
}
Repository repository = null;
try {
repository = new RepositoryBuilder().setWorkTree(rootDir).build();
WorkingDirStatus status = getWorkingDirStatus(repository);
Set<String> untracked = status.getUntracked();
for (String f : longFileNames) {
if (untracked.contains(f) || status.isIgnored(f)) {
FileUtil.delete(new File(rootDir, f));
Loggers.VCS.info(f + " is removed");
} else {
Loggers.VCS.info("The file " + f + " is tracked, don't remove it");
}
}
} catch (Exception e1) {
Loggers.VCS.error("Error while cleaning files with long names", e1);
} finally {
if (repository != null)
repository.close();
}
}