in src/scala/org/pantsbuild/zinc/compiler/Main.scala [95:162]
def mainImpl(settings: Settings, errors: Seq[String], startTime: Long): Unit = {
val log = mkLogger(settings)
val isDebug = settings.consoleLog.logLevel <= Level.Debug
// bail out on any command-line option errors
if (errors.nonEmpty) {
for (error <- errors) log.error(error)
log.error("See %s -help for information about options" format Command)
sys.exit(1)
}
if (settings.version) printVersion()
if (settings.help) Settings.printUsage(Command, residualArgs = "<sources>")
// if there are no sources provided, print outputs based on current analysis if requested,
// else print version and usage by default
if (settings.sources.isEmpty) {
if (!settings.version && !settings.help) {
printVersion()
Settings.printUsage(Command)
sys.exit(1)
}
sys.exit(0)
}
// Load the existing analysis for the destination, if any.
val analysisMap = AnalysisMap.create(settings.analysis)
val (targetAnalysisStore, previousResult) =
InputUtils.loadDestinationAnalysis(settings, analysisMap, log)
val inputs = InputUtils.create(settings, analysisMap, previousResult, log)
if (isDebug) {
log.debug(s"Inputs: $inputs")
}
try {
// Run the compile.
val result = new IncrementalCompilerImpl().compile(inputs, log)
// Store the output if the result changed.
if (result.hasModified) {
targetAnalysisStore.set(
// TODO
sbt.internal.inc.ConcreteAnalysisContents(result.analysis, result.setup)
)
}
log.info("Compile success " + Util.timing(startTime))
// if compile is successful, jar the contents of classesDirectory and copy to outputJar
if (settings.outputJar.isDefined) {
val outputJarPath = settings.outputJar.get.toPath
val classesDirectory = settings.classesDirectory
log.debug("Creating JAR at %s, for files at %s" format (outputJarPath, classesDirectory))
OutputUtils.createClassesJar(classesDirectory, outputJarPath, settings.creationTime)
}
} catch {
case e: CompileFailed =>
log.error("Compile failed " + Util.timing(startTime))
sys.exit(1)
case e: Exception =>
if (isDebug) e.printStackTrace
val message = e.getMessage
if (message ne null) log.error(message)
sys.exit(1)
}
}