src/Pure/Admin/component_hugo.scala
changeset 79975 90f4319c8b4f
parent 79974 f0150bc6fea5
equal deleted inserted replaced
79974:f0150bc6fea5 79975:90f4319c8b4f
    15 
    15 
    16   sealed case class Download_Platform(platform_name: String, url_template: String) {
    16   sealed case class Download_Platform(platform_name: String, url_template: String) {
    17     override def toString: String = platform_name
    17     override def toString: String = platform_name
    18 
    18 
    19     def is_windows: Boolean = url_template.contains("windows")
    19     def is_windows: Boolean = url_template.contains("windows")
    20     def url(base_url: String, version: String): String =
    20 
       
    21     def download(base_url: String, version: String): String =
    21       base_url + "/v" + version + "/" + url_template.replace("{V}", version)
    22       base_url + "/v" + version + "/" + url_template.replace("{V}", version)
    22   }
    23   }
    23 
    24 
    24   val platforms: List[Download_Platform] =
    25   val platforms: List[Download_Platform] =
    25     List(
    26     List(
    51 
    52 
    52     for (platform <- platforms) {
    53     for (platform <- platforms) {
    53       val platform_dir =
    54       val platform_dir =
    54         Isabelle_System.make_directory(component_dir.path + Path.basic(platform.platform_name))
    55         Isabelle_System.make_directory(component_dir.path + Path.basic(platform.platform_name))
    55 
    56 
    56       val url = platform.url(base_url, version)
    57       val download = platform.download(base_url, version)
    57       val name = Library.take_suffix(_ != '/', url.toList)._2.mkString
    58       val name =
       
    59         Url.get_base_name(download) getOrElse
       
    60           error("Malformed download name " + quote(download))
    58 
    61 
    59       val exe = Path.basic("hugo").exe_if(platform.is_windows)
    62       val exe = Path.basic("hugo").exe_if(platform.is_windows)
    60 
    63 
    61       Isabelle_System.with_tmp_dir("download", component_dir.path.file) { download_dir =>
    64       Isabelle_System.with_tmp_dir("download", component_dir.path.file) { download_dir =>
    62         Isabelle_System.with_tmp_dir("tmp", component_dir.path.file) { tmp_dir =>
    65         Isabelle_System.with_tmp_dir("tmp", component_dir.path.file) { tmp_dir =>
    63           val archive_file = download_dir + Path.basic(name)
    66           val archive_file = download_dir + Path.basic(name)
    64 
    67 
    65           Isabelle_System.download_file(url, archive_file, progress = progress)
    68           Isabelle_System.download_file(download, archive_file, progress = progress)
    66           Isabelle_System.extract(archive_file, tmp_dir)
    69           Isabelle_System.extract(archive_file, tmp_dir)
    67           Isabelle_System.move_file(tmp_dir + exe, platform_dir)
    70           Isabelle_System.move_file(tmp_dir + exe, platform_dir)
    68           Isabelle_System.move_file(tmp_dir + Path.basic("LICENSE"), component_dir.LICENSE)
    71           Isabelle_System.move_file(tmp_dir + Path.basic("LICENSE"), component_dir.LICENSE)
    69           File.set_executable(platform_dir + exe)
    72           File.set_executable(platform_dir + exe)
    70         }
    73         }
    80 
    83 
    81 
    84 
    82     /* README */
    85     /* README */
    83 
    86 
    84     File.write(component_dir.README,
    87     File.write(component_dir.README,
    85       """This Isabelle components provides a hugo extended """ + version + """.
    88       """This Isabelle components provides hugo extended """ + version + """.
    86 
    89 
    87 See also https://gohugo.io and executables from """ + base_url + """
    90 See also https://gohugo.io and executables from """ + base_url + """
    88 
    91 
    89         Fabian
    92         Fabian Huch
    90         """ + Date.Format.date(Date.now()) + "\n")
    93         """ + Date.Format.date(Date.now()) + "\n")
    91   }
    94   }
    92 
    95 
    93 
    96 
    94   /* Isabelle tool wrapper */
    97   /* Isabelle tool wrapper */