|
- import std.stdio;
- import std.file;
- import std.conv;
- import std.process;
- import std.array;
- import std.algorithm;
-
- bool run_script(string script_command){
- try{
- writeln("calling::: " ~ script_command);
- auto cont = executeShell(script_command);
- if(cont.status != 0) {
- writeln("failed to run script command" ~cont.output);
- //return "Failed";
- return false;
- } else {
- writeln("script output " ~ cont.output);
- return true;
- }
- } catch (Exception e) {
- writeln("Failed to execute script");
- return false;
- }
- }
-
- int main(string[] args) {
- writeln(args.length);
- if(args.length <= 1){
- writeln("You must provide a repo: fetch git.dreamphase.net/username/repo.git");
- return 1;
- }
- auto repo = args[1];
- if(repo == "clean"){
- try{
- if(getcwd() ~"/external/".exists){
- writeln("Removing all repos::\r\n");
- auto files = dirEntries(getcwd() ~"/external/", SpanMode.shallow).array();
- writeln(files);
- foreach (fpath; files) {
- auto delete_split = to!string(fpath).split("/");
- auto delete_path = getcwd() ~ "/" ~ delete_split[$-1];
- string clean_script = "rm " ~ delete_path;
- run_script(clean_script);
- clean_script = "rm " ~ delete_path ~ ".d";
- run_script(clean_script);
- }
- string clean_script = "rm -rf external/";
- run_script(clean_script);
- return 0;
- } else {
- writeln("Nothing to clean. `external` path doesn't exist.");
- return 1;
- }
- } catch (Exception e){
- writeln("Unable to clean");
- writeln(e.msg); // "error"
- writeln(e.file); // __FILE__
- writeln(e.line); // __LINE__ - 7
- }
- }
- try{
- writeln("Trying to fetcht: \r\n" ~ repo);
- string clone_script = "mkdir -p external >> /dev/null && cd external && git clone " ~ repo;
- auto result = run_script(clone_script);
- writeln("Clone output:: \r\n" ~result);
- writeln("repo has been cloned, setting up link.");
-
- auto repo_split = repo.split("/");
- auto package_name = repo_split[repo_split.length-1].replace(".git","");
- writeln("Package name: " ~ package_name);
-
- string package_base = getcwd() ~ "/external/" ~ package_name ~ "/source/";
- if(package_base.exists){
- auto files = dirEntries(package_base, SpanMode.shallow).array();
- writeln("PACKAGE path: \r\n");
- writeln(files);
- if(files.length >1){
- writeln("Unable to locate package internals.");
-
- return 1;
- }
- auto package_path = to!string(files[0]);
- if(!package_path.canFind(".d")){
- //package_path = package_path ~ "/package.d";
- auto auto_package_name = package_path.split("/")[$-1];
- string link_script = "ln -s " ~ package_path.replace(".d","") ~ " " ~ auto_package_name;
- auto link_result = run_script(link_script);
- } else {
- string link_script = "ln -s " ~ package_path ~ " " ~ package_name ~ ".d";
- auto link_result = run_script(link_script);
- }
- } else {
- writeln("Unable to locate package internals.");
- return 1;
- }
- } catch (Exception e){
- writeln(e.msg); // "error"
- writeln(e.file); // __FILE__
- writeln(e.line); // __LINE__ - 7
- }
- return 0;
- }
|