in agent/src/jetbrains/buildServer/swabra/Swabra.java [222:271]
private void processCheckoutDir(@NotNull final File dir) {
final String previousBuildTypeId = myPropertiesProcessor.getPreviousBuildTypeId(dir);
final SwabraPropertiesProcessor.DirectoryState directoryState = getAndCleanDirectoryState(dir);
if (myRunningBuild.isCleanBuild() || !dir.isDirectory()) {
myLogger.message("Clean build. No need to clean up in checkout directory ", false);
return;
}
switch (directoryState) {
case STRICT_CLEAN:
// do nothing
return;
case CLEAN:
if (mySettings.isStrict()) {
reportCleanCheckoutDetected(previousBuildTypeId);
cleanupCheckoutDir("Checkout directory may contain newly created, modified or deleted files", myRunningBuild);
}
return;
case DIRTY:
if (mySettings.isStrict()) {
reportCleanCheckoutDetected(previousBuildTypeId);
cleanupCheckoutDir("Checkout directory contains newly created, modified or deleted files", myRunningBuild);
} else if (mySettings.isCleanupBeforeBuild()) {
myLogger.debug("Checkout directory cleanup is performed before build");
collectFilesInCheckoutDir(dir);
} else {
myLogger.warn("Checkout directory contains modified or deleted files.");
myLogger.message("Clean checkout not enforced - \"Force clean checkout if cannot restore clean directory state\" is unchecked", true);
}
return;
case PENDING:
if (mySettings.isStrict()) {
reportCleanCheckoutDetected(previousBuildTypeId);
cleanupCheckoutDir("Checkout directory snapshot may contain information about newly created, modified or deleted files", myRunningBuild);
} else{
myLogger.debug("Checkout directory cleanup is performed before build");
collectFilesInCheckoutDir(dir);
}
return;
case STRICT_PENDING:
myLogger.debug("Checkout directory cleanup is performed before build");
collectFilesInCheckoutDir(dir);
return;
case UNKNOWN:
default:
reportCleanCheckoutDetected(previousBuildTypeId);
cleanupCheckoutDir("Checkout directory state is unknown", myRunningBuild);
}
}