X-Git-Url: http://git.roojs.org/?p=gitlive;a=blobdiff_plain;f=GitRepo.vala;h=6954437cd13cc3971096b4128846e211125717ef;hp=91feb4c82fb703ccf740808f525dbdefd07affd0;hb=72a4edfbda67d0bf3eb93a91c28c4084945ddae5;hpb=4879313d9a4fffaa84198dc31c5aba384614bc15 diff --git a/GitRepo.vala b/GitRepo.vala index 91feb4c8..6954437c 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -19,6 +19,7 @@ public class GitRepo : Object public string git_working_dir; public bool debug = false; public bool has_local_changes = false; + public string host = ""; public string git_status; public string git_diff; public string ahead_or_behind = ""; @@ -28,6 +29,7 @@ public class GitRepo : Object public Gee.HashMap branches; // accessed in GitBranch.. public RooTicket? activeTicket; public Gee.HashMap cache; + public Gee.HashMap config_cache; @@ -154,7 +156,8 @@ public class GitRepo : Object * */ - private GitRepo(string path) { + private GitRepo(string path) + { // cal parent? this.name = File.new_for_path(path).get_basename(); this.ignore_files = new Gee.HashMap(); @@ -171,93 +174,110 @@ public class GitRepo : Object if ( !cache.has_key(path) ) { cache.set( path, this); } + + var r = this.git({ "remote" , "get-url" , "--push" , "origin"}); + var uri = new Soup.URI(r); + this.host = uri.get_host(); + this.init_config(); + this.loadBranches(); this.loadActiveTicket(); this.loadStatus(); } - public bool is_wip_branch() + public bool is_master_branch() { - return this.currentBranch.name.has_prefix("wip_"); + // special branches that do not allow autopushing now... + return this.currentBranch.name == "master" || this.currentBranch.name == "roojs"; } - - public bool is_managed() + public void init_config() { - // is it a roojs origin? - var r = this.git({ "remote" , "get-url" , "--push" , "origin"}); - var uri = new Soup.URI(r); - if (uri.get_host() != "git.roojs.com") { // we can only push to this url. -- unless we have forced it to be managed. - return FileUtils.test(this.gitdir + "/.gitlive-managed" , FileTest.EXISTS); + this.config_cache = new Gee.HashMap(); + // managed = + if (this.get_config("managed") == "") { + this.set_config("managed", this.host == "git.roojs.com" ? "1" : "0"); + } + if (this.get_config("autocommit") == "") { + this.set_config("autocommit", this.host == "git.roojs.com" ? "1" : "0"); + } + if (this.get_config("autopush") == "") { + this.set_config("autopush", this.host == "git.roojs.com" ? "1" : "0"); + } + + } + + + + public string get_config(string key) { + + if (this.config_cache.has_key(key)) { + //GLib.debug("get_config %s = '%s'", key, this.config_cache.get(key)); + return this.config_cache.get(key); + } + try { + var ret = this.git({ "config" , "gitlive." + key }).strip(); + this.config_cache.set(key, ret); + //GLib.debug("get_config %s = '%s'", key, ret); + return ret; + } catch (Error e) { + this.config_cache.set(key, ""); + //GLib.debug("get_config (fail) %s = '%s'", key, ""); + return ""; // happens when there is nothing set... } - // otherwise see if unmanaged is set to disable it.. - return !FileUtils.test(this.gitdir + "/.gitlive-unmanaged" , FileTest.EXISTS); + } + public void set_config(string key, string value) { + this.git({ "config" , "gitlive." + key, value }); + this.config_cache.set(key,value); + } + + public bool is_managed() + { + return this.get_config("managed") == "1"; } public bool is_autocommit () - { - return !FileUtils.test(this.gitdir + "/.gitlive-disable-autocommit" , FileTest.EXISTS); + { + return this.get_config("autocommit") == "1"; } + public void set_autocommit(bool val) { - - var cur = this.is_autocommit(); - GLib.debug("SET auto commit : %s <= %s", val ? "ON" : "OFF", cur ? "ON" : "OFF"); - if (cur == val) { - return; // no change.. - } - if (!val) { - FileUtils.set_contents(this.gitdir + "/.gitlive-disable-autocommit" , "x"); - } else { - // it exists... - FileUtils.remove(this.gitdir + "/.gitlive-disable-autocommit" ); - } + this.set_config("autocommit", val ? "1" : "0"); } public bool is_auto_branch () { - return FileUtils.test(this.gitdir + "/.gitlive-enable-auto-branch" , FileTest.EXISTS); + if (this.name == "gitlog") { + return false; + } + // check remote... + if (this.is_managed()) { + return true; + } + return false; + + } public void set_auto_branch(bool val) { - - var cur = this.is_auto_branch(); - GLib.debug("SET auto branch : %s <= %s", val ? "ON" : "OFF", cur ? "ON" : "OFF"); - - if (cur == val) { - return; // no change.. - } - if (val) { - FileUtils.set_contents(this.gitdir + "/.gitlive-enable-auto-branch" , "x"); - } else { - // it exists... - FileUtils.remove(this.gitdir + "/.gitlive-enable-auto-branch" ); + if (this.name == "gitlog") { + return; } + this.set_config("managed", val ? "1" : "0"); } public bool is_autopush () { - return !FileUtils.test(this.gitdir + "/.gitlive-disable-autopush" , FileTest.EXISTS); + return this.get_config("autopush") == "1"; } public void set_autopush(bool val) { - - var cur = this.is_autopush(); - GLib.debug("SET auto push : %s <= %s", val ? "ON" : "OFF", cur ? "ON" : "OFF"); - if (cur == val) { - return; // no change.. - } - if (!val) { - FileUtils.set_contents(this.gitdir + "/.gitlive-disable-autopush" , ""); - } else { - // it exists... - FileUtils.remove(this.gitdir + "/.gitlive-disable-autopush" ); - } - + this.set_config("autopush", val ? "1" : "0"); } @@ -410,11 +430,8 @@ public class GitRepo : Object public void loadActiveTicket() { this.activeTicket = null; - if (!FileUtils.test(this.gitdir + "/.gitlive-active-ticket" , FileTest.EXISTS)) { - return; - } - string ticket_id; - FileUtils.get_contents(this.gitdir + "/.gitlive-active-ticket" , out ticket_id); + var ticket_id = this.get_config("ticket"); + if (ticket_id.length < 1) { return; } @@ -427,14 +444,11 @@ public class GitRepo : Object public bool setActiveTicket(RooTicket? ticket, string branchname) { + this.set_config("ticket", ""); if (!this.createBranchNamed(branchname)) { return false; } - if (ticket != null) { - FileUtils.set_contents(this.gitdir + "/.gitlive-active-ticket" , ticket.id); - } else { - FileUtils.remove(this.gitdir + "/.gitlive-active-ticket" ); - } + this.set_config("ticket", ticket == null ? "": ticket.id); this.activeTicket = ticket; return true; } @@ -778,6 +792,8 @@ public class GitRepo : Object // may throw error... var sp = new Spawn(cfg); + //GLib.debug( "GOT result: %d" , sp.result); + // diff output is a bit big.. if (args_in[0] != "diff") { GLib.debug( "GOT: %s" , sp.output); @@ -871,7 +887,7 @@ public class GitRepo : Object } repo.update_async(updateAllCallback); } - + GLib.debug("calls total = %d", (int) update_all_total); } public static void updateAllCallback(GitRepo repo, int err, string res) { @@ -879,14 +895,19 @@ public class GitRepo : Object repo.loadStatus(); update_all_total--; + GLib.debug("calls remaining = %d", (int)update_all_total); if (update_all_total > 0 ) { + return; } + GLib.debug("call after load = %s", update_all_after); + switch (update_all_after) { case "show_clones": Clones.singleton().show(); break; default: + GLib.debug("Unkown call after load = %s", update_all_after); break; } return;