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 } |