123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164(*
* OWL - an OCaml numerical library for scientific computing
* Copyright (c) 2016-2018 Liang Wang <liang.wang@cl.cam.ac.uk>
*)openOwlletdir=Owl_zoo_path.dirletevalcmd=cmd|>Lexing.from_string|>!Toploop.parse_toplevel_phrase|>Toploop.execute_phrasetrueFormat.err_formatter|>ignoreletpreprocessscript=letprefix="."^(Filename.basenamescript)inlettmp_script=Filename.temp_fileprefix".ml"inletcontent="#!/usr/bin/env owl\n"^"#use \"topfind\"\n"^"#require \"owl\"\n"^"#require \"owl-zoo\"\n"^"let load_file = Owl_zoo_cmd.load_file;;\n"^Printf.sprintf"#use \"%s\"\n"scriptinOwl_io.write_filetmp_scriptcontent;tmp_scriptletremove_gistgid=letpath=dir^"/"^gid^"/"inletcmd=Printf.sprintf"rm -rf %s"pathinletret=Sys.commandcmdinifret=0then(Owl_zoo_ver.removegid;Owl_log.debug"owl-zoo: %s removed"gid)elseOwl_log.debug"owl-zoo: Error remvoing gist %s"gidletupload_gistgist_dir=Owl_log.debug"owl-zoo: %s uploading"gist_dir;letcmd=Printf.sprintf"owl_upload_gist.sh %s"gist_dirinSys.commandcmd|>ignore;letgist_arr=Owl_io.read_file(gist_dir^"/gist.id")ingist_arr.(0)letdownload_gist?vidgid=letvid=matchvidwith|Somea->a|None->Owl_zoo_ver.get_remote_vidgidinif(Owl_zoo_ver.existgidvid)=truethenOwl_log.info"owl-zoo: %s/%s cached"gidvidelse(Owl_log.debug"owl-zoo: %s/%s missing; downloading"gidvid;letcmd=Printf.sprintf"owl_download_gist.sh %s %s"gidvidinletret=Sys.commandcmdinifret=0then(Owl_zoo_ver.updategidvid)elseOwl_log.debug"owl-zoo: Error downloading gist %s%s"gidvid)letlist_gistgid=letpath=dir^"/"^gidinOwl_log.debug"owl-zoo: %s"path;letcmd=Printf.sprintf"owl_list_gist.sh %s"pathinSys.commandcmd|>ignoreletupdate_gistgids=letgids=ifArray.lengthgids=0thenSys.readdirdirelsegidsinOwl_log.debug"owl-zoo: updating %i gists"Array.(lengthgids);Array.iterdownload_gistgidsletshow_infogist=letgid,vid,_,_=Owl_zoo_ver.parse_gist_stringgistinletdir=Owl_zoo_path.gist_pathgidvidinletfiles=Sys.readdirdir|>Array.fold_left(funas->a^s^" ")""inletreadme=dir^"/#readme.md"inletinfo_s=ifSys.file_existsreadmethen(Owl_io.read_filereadme|>Array.fold_left(funas->a^s^"\n")"")else"missing #readme.md"inletinfo=Printf.sprintf"[gid] %s\n"gid^Printf.sprintf"[vid] %s\n"vid^Printf.sprintf"[path] %s\n"dir^Printf.sprintf"[url] %s\n"("https://gist.github.com/"^gid^"/"^vid)^Printf.sprintf"[files] %s\n"files^Printf.sprintf"[info] %s"info_sinprint_endlineinfoletquery_pathgist=letgid,vid,_,_=tryOwl_zoo_ver.parse_gist_stringgistwithOwl_exception.ZOO_ILLEGAL_GIST_NAME->"","",0.,trueinOwl_zoo_path.extend_zoo_path~gid~vid""(* f is a file name in the gist, e.g., #readme.md *)letload_file?(gist="")f=letpath=(query_pathgist)^finOwl_io.read_file_stringpathletrunargsscript=letnew_script=preprocessscriptinToploop.initialize_toplevel_env();Toploop.run_scriptFormat.std_formatternew_scriptargs|>ignoreletrun_gistgist=lettmp_script=Filename.temp_file"zoo_tmp"".ml"inletcontent=Printf.sprintf"\n#zoo \"%s\"\n"gistinOwl_io.write_filetmp_scriptcontent;run[|""|]tmp_script|>ignoreletprint_info()=letinfo="Owl's Zoo System\n\n"^"Usage: \n"^" owl [utop options] [script-file]\texecute an Owl script\n"^" owl -upload [gist-directory]\t\tupload code snippet to gist\n"^" owl -download [gist-id] [ver-id]\tdownload code snippet from gist; download the latest version if ver-id not specified\n"^" owl -remove [gist-id]\t\t\tremove a cached gist\n"^" owl -update [gist-ids]\t\tupdate (all if not specified) gists\n"^" owl -run [gist-name]\t\t\trun a self-contained gist\n"^" owl -info [gist-name]\t\t\tshow the basic information of a gist\n"^" owl -list [gist-id]\t\t\tlist all cached versions of a gist; all the cached gists if not specified\n"^" owl -help\t\t\t\tprint out help information\n"inprint_endlineinfoletstart_toplevel()=print_info();Toploop.initialize_toplevel_env();eval"#use \"topfind\";;";eval"Topfind.don't_load_deeply [\"compiler-libs.toplevel\"];;";eval"#require \"owl\";;";eval"#require \"owl-zoo\";;";eval"#require \"owl-top\";;";Toploop.loopFormat.std_formatter