diff options
Diffstat (limited to 'examples/tomo-install/tomo-install.tm')
| -rw-r--r-- | examples/tomo-install/tomo-install.tm | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/examples/tomo-install/tomo-install.tm b/examples/tomo-install/tomo-install.tm deleted file mode 100644 index e9838859..00000000 --- a/examples/tomo-install/tomo-install.tm +++ /dev/null @@ -1,84 +0,0 @@ -use shell_v1.0 -use patterns_v1.0 - -_USAGE := " - tomo-install file.tm... -" - -_HELP := " - tomo-install: a tool for installing libraries for the Tomo language - Usage: $_USAGE -" - -func find_urls(path:Path -> [Text]) - urls : @[Text] - if path.is_directory() - for f in path.children() - urls.insert_all(find_urls(f)) - else if path.is_file() and path.extension() == ".tm" - for line in path.by_line()! - if captures := line.pattern_captures($Pat/use{space}{url}/) or line.pattern_captures($Pat/{id}{space}:={space}use{space}{url}/) - urls.insert(captures[-1]) - return urls - -func main(paths:[Path]) - if paths.length == 0 - paths = [(./)] - - urls := (++: find_urls(p) for p in paths) or [] - - github_token := (~/.config/tomo/github-token).read() - - (~/.local/share/tomo/installed).create_directory() - (~/.local/share/tomo/lib).create_directory() - - for url in urls - original_url := url - url_without_protocol := url.trim_pattern($Pat"http{0-1 s}://", right=no) - hash := $Shell@(echo -n @url_without_protocol | sha256sum).get_output()!.slice(to=32) - if (~/.local/share/tomo/installed/$hash).is_directory() - say("Already installed: $url") - skip - - alias : Text? - curl_flags := ["-L"] - if github := url_without_protocol.pattern_captures($Pat"github.com/{!/}/{!/}#{..}") - user := github[1] - repo := github[2] - tag := github[3] - url = "https://api.github.com/repos/$user/$repo/tarball/$tag" - alias = "$(repo.without_prefix("tomo-")).$(tag).$(user)" - if github_token - curl_flags ++= ["-H", "Authorization: Bearer $github_token"] - curl_flags ++= [ - "-H", "Accept: application/vnd.github+json", - "-H", "X-GitHub-Api-Version: 2022-11-28", - ] - - (~/.local/share/tomo/downloads/$hash).create_directory() - say($Shell@` - set -euo pipefail - cd ~/.local/share/tomo/downloads/@hash - curl @curl_flags @url | tar xz -C ~/.local/share/tomo/installed --strip-components=1 --one-top-level=@hash - echo @original_url > ~/.local/share/tomo/installed/@hash/source.url - tomo -L ~/.local/share/tomo/installed/@hash - if [ "`uname -s`" = "Darwin" ]; then - ln -f -s ../installed/@hash/lib@hash.dylib ~/.local/share/tomo/lib/lib@hash.dylib - else - ln -f -s ../installed/@hash/lib@hash.so ~/.local/share/tomo/lib/lib@hash.so - fi - `.get_output()!) - - if alias - say($Shell( - set -exuo pipefail - ln -f -s @hash ~/.local/share/tomo/installed/@alias - if [ "`uname -s`" = "Darwin" ]; then - ln -f -s lib@hash.dylib ~/.local/share/tomo/lib/lib@alias.dylib - else - ln -f -s lib@hash.so ~/.local/share/tomo/lib/lib@alias.so - fi - ).get_output()!) - - say("\[1]Installed $url!\[]") - |
