src/Pure/Tools/phabricator.scala
author wenzelm
Wed, 30 Oct 2019 19:23:01 +0100
changeset 70968 46847076477c
parent 70967 79736ffe77c3
child 70969 a48112873f81
permissions -rw-r--r--
Apache setup; proper "-" for URL: avoid problems with "_";
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
70967
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/phabricator.scala
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     3
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     4
Support for Phabricator server. See also:
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     5
  - https://www.phacility.com/phabricator
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     6
  - https://secure.phabricator.com/book/phabricator
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     7
*/
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     8
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
     9
package isabelle
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    10
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    11
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    12
object Phabricator
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    13
{
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    14
  /** defaults **/
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    15
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    16
  val default_name = "vcs"
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    17
70968
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
    18
  def default_prefix(name: String): String = "phabricator-" + name
70967
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    19
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    20
  def default_root(options: Options, name: String): Path =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    21
    Path.explode(options.string("phabricator_www_root")) + Path.basic(default_prefix(name))
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    22
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    23
  def default_repo(options: Options, name: String): Path =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    24
    default_root(options, name) + Path.basic("repo")
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    25
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    26
  val packages: List[String] =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    27
    Build_Docker.packages :::
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    28
    // https://secure.phabricator.com/source/phabricator/browse/master/scripts/install/install_ubuntu.sh 15e6e2adea61
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    29
    List("git", "mysql-server", "apache2", "libapache2-mod-php", "php", "php-mysql",
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    30
      "php-gd", "php-curl", "php-apcu", "php-cli", "php-json", "php-mbstring")
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    31
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    32
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    33
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    34
  /** global configuration **/
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    35
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    36
  val global_config = Path.explode("/etc/isabelle-phabricator.conf")
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    37
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    38
  sealed case class Config(name: String, root: Path)
70968
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
    39
  {
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
    40
    def www_root: Path = root + Path.explode("phabricator/webroot")
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
    41
  }
70967
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    42
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    43
  def read_config(): List[Config] =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    44
  {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    45
    if (global_config.is_file) {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    46
      for (entry <- Library.trim_split_lines(File.read(global_config)) if entry.nonEmpty)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    47
      yield {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    48
        space_explode(':', entry) match {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    49
          case List(name, root) => Config(name, Path.explode(root))
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    50
          case _ => error("Malformed config file " + global_config + "\nentry " + quote(entry))
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    51
        }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    52
      }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    53
    }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    54
    else Nil
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    55
  }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    56
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    57
  def write_config(configs: List[Config])
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    58
  {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    59
    File.write(global_config,
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    60
      configs.map(config => config.name + ":" + config.root.implode).mkString("", "\n", "\n"))
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    61
  }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    62
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    63
  def get_config(name: String): Config =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    64
    read_config().find(config => config.name == name) getOrElse
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    65
      error("Bad Isabelle/Phabricator installation " + quote(name))
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    66
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    67
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    68
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    69
  /** setup **/
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    70
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    71
  def phabricator_setup(
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    72
    options: Options,
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    73
    name: String = default_name,
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    74
    prefix: String = "",
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    75
    root: String = "",
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    76
    repo: String = "",
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    77
    progress: Progress = No_Progress)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    78
  {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    79
    /* system environment */
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    80
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    81
    Linux.check_system_root()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    82
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    83
    Linux.package_update(progress = progress)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    84
    Linux.check_reboot_required()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    85
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    86
    Linux.package_install(packages, progress = progress)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    87
    Linux.check_reboot_required()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    88
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    89
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    90
    /* basic installation */
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    91
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    92
    val prefix_name = proper_string(prefix) getOrElse default_prefix(name)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    93
    val root_path = if (root.nonEmpty) Path.explode(root) else default_root(options, name)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    94
    val repo_path = if (repo.nonEmpty) Path.explode(repo) else default_repo(options, name)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    95
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    96
    val configs = read_config()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    97
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    98
    for (config <- configs if config.name == name) {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
    99
      error("Duplicate Phabricator installation " + quote(name) + " in " + config.root)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   100
    }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   101
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   102
    if (!Isabelle_System.bash("mkdir -p " + File.bash_path(root_path)).ok) {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   103
      error("Failed to create root directory " + root_path)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   104
    }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   105
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   106
    progress.bash(cwd = root_path.file, echo = true,
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   107
      script = """
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   108
        set -e
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   109
        chown """ + Bash.string(options.string("phabricator_www_user")) + """ .
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   110
        chmod 755 .
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   111
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   112
        git clone https://github.com/phacility/libphutil.git
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   113
        git clone https://github.com/phacility/arcanist.git
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   114
        git clone https://github.com/phacility/phabricator.git
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   115
      """).check
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   116
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   117
    val config = Config(name, root_path)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   118
    write_config(configs ::: List(config))
70968
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   119
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   120
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   121
    /* Apache setup */
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   122
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   123
    progress.echo("Apache setup...")
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   124
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   125
    val apache_root = Path.explode(options.string("phabricator_apache_root"))
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   126
    val apache_sites = apache_root + Path.explode("sites-available")
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   127
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   128
    if (!apache_sites.is_dir) error("Bad Apache sites directory " + apache_sites)
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   129
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   130
    File.write(apache_sites + Path.basic(prefix_name + ".conf"),
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   131
"""<VirtualHost *:80>
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   132
    #ServerName: "lvh.me" is an alias for "localhost" for testing
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   133
    ServerName """ + prefix_name + """.lvh.me
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   134
    ServerAdmin webmaster@localhost
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   135
    DocumentRoot """ + config.www_root.implode + """
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   136
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   137
    ErrorLog ${APACHE_LOG_DIR}/error.log
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   138
    RewriteEngine on
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   139
    RewriteRule ^(.*)$  /index.php?__path__=$1  [B,L,QSA]
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   140
</VirtualHost>
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   141
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   142
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   143
""")
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   144
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   145
    Isabelle_System.bash("""
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   146
      set -e
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   147
      a2enmod rewrite
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   148
      a2ensite """ + Bash.string(prefix_name) + """
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   149
      systemctl restart apache2
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   150
""").check
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   151
46847076477c Apache setup;
wenzelm
parents: 70967
diff changeset
   152
    progress.echo("\nDONE\nWeb configuration via http://" + prefix_name + ".lvh.me")
70967
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   153
  }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   154
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   155
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   156
  /* Isabelle tool wrapper */
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   157
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   158
  val isabelle_tool1 =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   159
    Isabelle_Tool("phabricator_setup", "setup Phabricator server on Ubuntu Linux", args =>
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   160
    {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   161
      var options = Options.init()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   162
      var prefix = ""
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   163
      var root = ""
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   164
      var repo = ""
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   165
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   166
      val getopts =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   167
        Getopts("""
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   168
Usage: isabelle phabricator_setup [OPTIONS] [NAME]
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   169
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   170
  Options are:
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   171
    -R DIR       repository directory (default: """ + default_repo(options, "NAME") + """)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   172
    -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   173
    -p PREFIX    prefix for derived names (default: """ + default_prefix("NAME") + """)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   174
    -r DIR       installation root directory (default: """ + default_root(options, "NAME") + """)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   175
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   176
  Install Phabricator as Ubuntu LAMP application (Linux, Apache, MySQL, PHP).
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   177
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   178
  Slogan: "Discuss. Plan. Code. Review. Test.
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   179
  Every application your project needs, all in one tool."
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   180
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   181
  The installation NAME (default: """ + quote(default_name) + """) is mapped to
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   182
  a regular Unix user and used for public SSH access.
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   183
""",
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   184
          "R:" -> (arg => repo = arg),
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   185
          "o:" -> (arg => options = options + arg),
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   186
          "p:" -> (arg => prefix = arg),
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   187
          "r:" -> (arg => root = arg))
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   188
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   189
      val more_args = getopts(args)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   190
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   191
      val name =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   192
        more_args match {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   193
          case Nil => default_name
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   194
          case List(name) => name
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   195
          case _ => getopts.usage()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   196
        }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   197
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   198
      val progress = new Console_Progress
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   199
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   200
      phabricator_setup(options, name, prefix = prefix, root = root, repo = repo,
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   201
        progress = progress)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   202
    })
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   203
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   204
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   205
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   206
  /** update **/
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   207
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   208
  def phabricator_update(name: String, progress: Progress = No_Progress)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   209
  {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   210
    Linux.check_system_root()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   211
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   212
    ???
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   213
  }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   214
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   215
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   216
  /* Isabelle tool wrapper */
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   217
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   218
  val isabelle_tool2 =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   219
    Isabelle_Tool("phabricator_update", "update Phabricator server installation", args =>
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   220
    {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   221
      val getopts =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   222
        Getopts("""
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   223
Usage: isabelle phabricator_update [NAME]
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   224
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   225
  Update Phabricator installation, with lookup of NAME (default + """ + quote(default_name) + """)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   226
  in """ + global_config + "\n")
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   227
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   228
      val more_args = getopts(args)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   229
      val name =
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   230
        more_args match {
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   231
          case Nil => default_name
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   232
          case List(name) => name
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   233
          case _ => getopts.usage()
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   234
        }
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   235
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   236
      val progress = new Console_Progress
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   237
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   238
      phabricator_update(name, progress = progress)
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   239
    })
79736ffe77c3 some support for Phabricator server;
wenzelm
parents:
diff changeset
   240
}