src/Pure/Tools/build.scala
changeset 67025 961285f581e6
parent 67011 bab3208d8d37
child 67026 687c822ee5e3
equal deleted inserted replaced
67024:72d37a2e9cca 67025:961285f581e6
   389       val digests =
   389       val digests =
   390         full_sessions(name).meta_digest :: deps.sources(name) ::: deps.imported_sources(name)
   390         full_sessions(name).meta_digest :: deps.sources(name) ::: deps.imported_sources(name)
   391       SHA1.digest(cat_lines(digests.map(_.toString).sorted)).toString
   391       SHA1.digest(cat_lines(digests.map(_.toString).sorted)).toString
   392     }
   392     }
   393 
   393 
   394     val (selected, selected_sessions, deps) =
   394     val (selected_sessions, deps) =
   395     {
   395     {
   396       val (selected0, selected_sessions0) =
   396       val selected_sessions0 =
   397         full_sessions.selection(
   397         full_sessions.selection(
   398             Sessions.Selection(requirements, all_sessions, base_sessions, exclude_session_groups,
   398             Sessions.Selection(requirements, all_sessions, base_sessions, exclude_session_groups,
   399               exclude_sessions, session_groups, sessions) ++ selection)
   399               exclude_sessions, session_groups, sessions) ++ selection)
   400 
   400 
   401       val deps0 =
   401       val deps0 =
   403           progress = progress, inlined_files = true, verbose = verbose,
   403           progress = progress, inlined_files = true, verbose = verbose,
   404           list_files = list_files, check_keywords = check_keywords).check_errors
   404           list_files = list_files, check_keywords = check_keywords).check_errors
   405 
   405 
   406       if (soft_build && !fresh_build) {
   406       if (soft_build && !fresh_build) {
   407         val outdated =
   407         val outdated =
   408           selected0.flatMap(name =>
   408           selected_sessions0.build_topological_order.flatMap(name =>
   409             store.find_database(name) match {
   409             store.find_database(name) match {
   410               case Some(database) =>
   410               case Some(database) =>
   411                 using(SQLite.open_database(database))(store.read_build(_, name)) match {
   411                 using(SQLite.open_database(database))(store.read_build(_, name)) match {
   412                   case Some(build)
   412                   case Some(build)
   413                   if build.ok && build.sources == sources_stamp(deps0, name) => None
   413                   if build.ok && build.sources == sources_stamp(deps0, name) => None
   414                   case _ => Some(name)
   414                   case _ => Some(name)
   415                 }
   415                 }
   416               case None => Some(name)
   416               case None => Some(name)
   417             })
   417             })
   418         val (selected, selected_sessions) =
   418         val selected_sessions =
   419           full_sessions.selection(Sessions.Selection(sessions = outdated))
   419           full_sessions.selection(Sessions.Selection(sessions = outdated))
   420         val deps =
   420         val deps =
   421           Sessions.deps(selected_sessions, full_sessions.global_theories, inlined_files = true)
   421           Sessions.deps(selected_sessions, full_sessions.global_theories, inlined_files = true)
   422             .check_errors
   422             .check_errors
   423         (selected, selected_sessions, deps)
   423         (selected_sessions, deps)
   424       }
   424       }
   425       else (selected0, selected_sessions0, deps0)
   425       else (selected_sessions0, deps0)
   426     }
   426     }
   427 
   427 
   428 
   428 
   429     /* check unknown files */
   429     /* check unknown files */
   430 
   430 
   448 
   448 
   449     store.prepare_output()
   449     store.prepare_output()
   450 
   450 
   451     // optional cleanup
   451     // optional cleanup
   452     if (clean_build) {
   452     if (clean_build) {
   453       for (name <- full_sessions.build_descendants(selected)) {
   453       for (name <- full_sessions.build_descendants(selected_sessions.build_topological_order)) {
   454         val files =
   454         val files =
   455           List(Path.basic(name), store.database(name), store.log(name), store.log_gz(name)).
   455           List(Path.basic(name), store.database(name), store.log(name), store.log_gz(name)).
   456             map(store.output_dir + _).filter(_.is_file)
   456             map(store.output_dir + _).filter(_.is_file)
   457         if (files.nonEmpty) progress.echo("Cleaning " + name + " ...")
   457         if (files.nonEmpty) progress.echo("Cleaning " + name + " ...")
   458         if (!files.forall(p => p.file.delete)) progress.echo(name + " FAILED to delete")
   458         if (!files.forall(p => p.file.delete)) progress.echo(name + " FAILED to delete")