src/Pure/Admin/build_history.scala
changeset 64227 cc2edb86f3cc
parent 64225 d78d46c755f8
child 64231 dbc8294c75d3
equal deleted inserted replaced
64226:65f7d2eea2d7 64227:cc2edb86f3cc
   328 
   328 
   329 
   329 
   330 
   330 
   331   /** remote build_history -- via command-line **/
   331   /** remote build_history -- via command-line **/
   332 
   332 
   333   sealed case class File_Content(name: String, content: Bytes)
       
   334 
       
   335   def remote_build_history(
   333   def remote_build_history(
   336     ssh_session: SSH.Session,
   334     session: SSH.Session,
   337     isabelle_repos: Path,
   335     isabelle_repos_self: Path,
   338     isabelle_repos_build_history: Path,
   336     isabelle_repos_other: Path,
   339     options: String,
   337     isabelle_repos_source: String = "http://isabelle.in.tum.de/repos/isabelle",
   340     args: String,
   338     self_update: Boolean = false,
   341     progress: Progress = Ignore_Progress,
   339     progress: Progress = Ignore_Progress,
   342     isabelle_repos_source: String = "http://isabelle.in.tum.de/repos/isabelle",
   340     options: String = "",
   343     self_update: Boolean = false): List[File_Content] =
   341     args: String = ""): List[(String, Bytes)] =
   344   {
   342   {
   345     using(ssh_session.sftp())(sftp =>
   343     using(session.sftp())(sftp =>
   346       {
   344       {
   347         val isabelle_admin = (isabelle_repos + Path.explode("Admin")).implode
   345         val isabelle_admin = (isabelle_repos_self + Path.explode("Admin")).implode
   348 
   346 
   349 
   347 
   350         /* prepare repository clones */
   348         /* prepare repository clones */
   351 
   349 
   352         val ssh = Some(ssh_session)
   350         val ssh = Some(session)
   353 
   351 
   354         val isabelle_hg =
   352         val isabelle_hg =
   355           if (sftp.stat(isabelle_repos.implode).nonEmpty)
   353           if (sftp.stat(isabelle_repos_self.implode).nonEmpty)
   356             Mercurial.repository(isabelle_repos, ssh = ssh)
   354             Mercurial.repository(isabelle_repos_self, ssh = ssh)
   357           else
   355           else
   358             Mercurial.clone_repository(isabelle_repos_source, isabelle_repos, ssh = ssh)
   356             Mercurial.clone_repository(isabelle_repos_source, isabelle_repos_self, ssh = ssh)
   359 
   357 
   360         if (self_update) {
   358         if (self_update) {
   361           isabelle_hg.pull()
   359           isabelle_hg.pull()
   362           isabelle_hg.update(clean = true)
   360           isabelle_hg.update(clean = true)
   363           ssh_session.execute(File.bash_string(isabelle_admin + "/build") + " jars_fresh").check
   361           session.execute(File.bash_string(isabelle_admin + "/build") + " jars_fresh").check
   364         }
   362         }
   365 
   363 
   366         if (sftp.stat(isabelle_repos_build_history.implode).isEmpty)
   364         if (sftp.stat(isabelle_repos_other.implode).isEmpty)
   367           Mercurial.clone_repository(isabelle_repos.implode, isabelle_repos_build_history, ssh = ssh)
   365           Mercurial.clone_repository(isabelle_repos_self.implode, isabelle_repos_other, ssh = ssh)
   368 
   366 
   369 
   367 
   370         /* Admin/build_history */
   368         /* Admin/build_history */
   371 
   369 
   372         val result =
   370         val result =
   373           ssh_session.execute(
   371           session.execute(
   374             File.bash_string(isabelle_admin + "/build_history") + " " + options + " " +
   372             File.bash_string(isabelle_admin + "/build_history") + " " + options + " " +
   375               File.bash_path(isabelle_repos_build_history) + " " + args,
   373               File.bash_path(isabelle_repos_other) + " " + args,
   376             progress_stderr = progress.echo(_))
   374             progress_stderr = progress.echo(_))
   377 
   375 
   378         result.check.out_lines.map(name =>
   376         result.check.out_lines.map(log => (Path.explode(log).base.implode, sftp.read_bytes(log)))
   379           File_Content(Path.explode(name).base.implode, sftp.read_bytes(name)))
       
   380       })
   377       })
   381   }
   378   }
   382 }
   379 }