src/Pure/System/components.scala
author wenzelm
Mon, 03 Dec 2018 22:07:23 +0100
changeset 69398 0698ded5caf1
parent 69395 d1c4a1dee9e7
child 69401 7a1b7b737c02
permissions -rw-r--r--
Components.download similar to "isabelle components", but without unpacking;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69395
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Admin/components.scala
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     3
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     4
Isabelle system components.
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     5
*/
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     6
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     7
package isabelle
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     8
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
     9
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    10
object Components
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    11
{
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    12
  /* component collections */
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    13
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    14
  def admin(dir: Path): Path = dir + Path.explode("Admin/components")
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    15
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    16
  def contrib(dir: Path = Path.current, name: String = ""): Path =
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    17
    dir + Path.explode("contrib") + Path.explode(name)
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    18
69398
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    19
  def download(dir: Path, names: List[String], progress: Progress = No_Progress)
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    20
  {
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    21
    Isabelle_System.mkdirs(dir)
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    22
    for (name <- names) {
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    23
      val archive = name + ".tar.gz"
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    24
      val target = dir + Path.explode(archive)
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    25
      if (!target.is_file) {
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    26
        val remote = Isabelle_System.getenv("ISABELLE_COMPONENT_REPOSITORY") + "/" + archive
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    27
        progress.echo("Getting " + quote(remote))
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    28
        Bytes.write(target, Url.read_bytes(Url(remote)))
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    29
      }
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    30
    }
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    31
  }
0698ded5caf1 Components.download similar to "isabelle components", but without unpacking;
wenzelm
parents: 69395
diff changeset
    32
69395
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    33
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    34
  /* component directory content */
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    35
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    36
  def settings(dir: Path): Path = dir + Path.explode("etc/settings")
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    37
  def components(dir: Path): Path = dir + Path.explode("etc/components")
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    38
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    39
  def check_dir(dir: Path): Boolean =
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    40
    settings(dir).is_file || components(dir).is_file
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    41
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    42
  def read_components(dir: Path): List[String] =
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    43
    split_lines(File.read(components(dir))).filter(_.nonEmpty)
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    44
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    45
  def write_components(dir: Path, lines: List[String]): Unit =
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    46
    File.write(components(dir), terminate_lines(lines))
d1c4a1dee9e7 more explicit support for Isabelle system components;
wenzelm
parents:
diff changeset
    47
}