64161
|
1 |
/* Title: Pure/Admin/remote_dmg.scala
|
64143
|
2 |
Author: Makarius
|
|
3 |
|
|
4 |
Build dmg on remote Mac OS X system.
|
|
5 |
*/
|
|
6 |
|
|
7 |
package isabelle
|
|
8 |
|
|
9 |
|
|
10 |
object Remote_DMG
|
|
11 |
{
|
|
12 |
def remote_dmg(session: SSH.Session, tar_gz_file: Path, dmg_file: Path, volume_name: String = "")
|
|
13 |
{
|
|
14 |
session.with_tmp_dir(remote_dir =>
|
|
15 |
using(session.sftp())(sftp =>
|
|
16 |
{
|
|
17 |
val cd = "cd " + File.bash_string(remote_dir) + "; "
|
|
18 |
|
|
19 |
sftp.write_file(remote_dir + "/dmg.tar.gz", tar_gz_file)
|
|
20 |
session.execute(cd + "mkdir root && tar -C root -xzf dmg.tar.gz").check
|
|
21 |
session.execute(
|
|
22 |
cd + "hdiutil create -srcfolder root" +
|
|
23 |
(if (volume_name == "") "" else " -volname " + File.bash_string(volume_name)) +
|
|
24 |
" dmg.dmg").check
|
|
25 |
sftp.read_file(remote_dir + "/dmg.dmg", dmg_file)
|
|
26 |
}))
|
|
27 |
}
|
|
28 |
|
|
29 |
|
|
30 |
/* Isabelle tool wrapper */
|
|
31 |
|
64161
|
32 |
val isabelle_tool =
|
|
33 |
Isabelle_Tool("remote_dmg", "build dmg on remote Mac OS X system", args =>
|
|
34 |
{
|
|
35 |
Command_Line.tool0 {
|
|
36 |
var port = SSH.default_port
|
|
37 |
var volume_name = ""
|
64143
|
38 |
|
64161
|
39 |
val getopts = Getopts("""
|
64143
|
40 |
Usage: isabelle remote_dmg [OPTIONS] USER@HOST TAR_GZ_FILE DMG_FILE
|
|
41 |
|
|
42 |
Options are:
|
|
43 |
-p PORT alternative SSH port (default: """ + SSH.default_port + """)
|
|
44 |
-V NAME specify volume name
|
|
45 |
|
|
46 |
Turn the contents of a tar.gz file into a dmg file -- produced on a remote
|
|
47 |
Mac OS X system.
|
|
48 |
""",
|
64161
|
49 |
"p:" -> (arg => port = Value.Int.parse(arg)),
|
|
50 |
"V:" -> (arg => volume_name = arg))
|
64143
|
51 |
|
64161
|
52 |
val more_args = getopts(args)
|
|
53 |
val (user, host, tar_gz_file, dmg_file) =
|
|
54 |
more_args match {
|
|
55 |
case List(SSH.User_Host(user, host), tar_gz_file, dmg_file) =>
|
|
56 |
(user, host, Path.explode(tar_gz_file), Path.explode(dmg_file))
|
|
57 |
case _ => getopts.usage()
|
|
58 |
}
|
64143
|
59 |
|
64161
|
60 |
val ssh = SSH.init(Options.init)
|
|
61 |
using(ssh.open_session(user = user, host = host, port = port))(
|
|
62 |
remote_dmg(_, tar_gz_file, dmg_file, volume_name))
|
|
63 |
}
|
|
64 |
}, admin = true)
|
64143
|
65 |
}
|