X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=GitRepo.vala;h=7985e816c877b8a16b09de7c31aa5545c5380b0c;hb=2a885208574bafbac4d552d554898d1d520ae789;hp=a072592724890adc74579337dd4b5b9c8d71607d;hpb=9e641e366549656621a3e4fc4950b62c4b395650;p=gitlive diff --git a/GitRepo.vala b/GitRepo.vala index a0725927..7985e816 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -21,6 +21,7 @@ public class GitRepo : Object public bool has_local_changes = false; public string git_status; public string git_diff; + public string ahead_or_behind = ""; public Gee.HashMap ignore_files; public GitBranch currentBranch; @@ -130,9 +131,7 @@ public class GitRepo : Object } return list_cache; - - } public static GitRepo get(string path) @@ -177,14 +176,29 @@ public class GitRepo : Object 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_autocommit () + public bool is_managed() { + // 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); + } + // otherwise see if unmanaged is set to disable it.. + return !FileUtils.test(this.gitdir + "/.gitlive-unmanaged" , FileTest.EXISTS); + + } + + + public bool is_autocommit () + { return !FileUtils.test(this.gitdir + "/.gitlive-disable-autocommit" , FileTest.EXISTS); } public void set_autocommit(bool val) @@ -206,6 +220,11 @@ public class GitRepo : Object public bool is_auto_branch () { + if (this.name == "gitlog") { + return false; + } + // check remote... + return FileUtils.test(this.gitdir + "/.gitlive-enable-auto-branch" , FileTest.EXISTS); } @@ -253,12 +272,19 @@ public class GitRepo : Object var r = this.git({ "status" , "--porcelain" }); this.git_status = r; this.has_local_changes = r.length > 0; + + var rs = this.git({ "status" , "-sb" }); + + this.ahead_or_behind = rs.contains("[ahead") ? "A" : (rs.contains("[behind") ? "B" : ""); + + this.git_diff = this.git({ "diff" , "HEAD", "--no-color" }); } public void loadBranches() { + GitBranch.loadBranches(this); } @@ -751,16 +777,17 @@ public class GitRepo : Object //if (File.exists(this.repo + '/.git/config')) { //env.push("GITPATH=" + this.repo ); //} - - + var cfg = new SpawnConfig(this.git_working_dir , args , env); //cfg.debug = true; // may throw error... var sp = new Spawn(cfg); - - GLib.debug( "GOT: %s" , sp.output); + // diff output is a bit big.. + if (args_in[0] != "diff") { + GLib.debug( "GOT: %s" , sp.output); + } // parse output for some commands ? return sp.output; } @@ -838,14 +865,18 @@ public class GitRepo : Object public static void updateAll(string after) { - update_all_after = after; - var tr = GitRepo.singleton().cache; - + update_all_after = after; + var tr = GitRepo.singleton().cache; - update_all_total = tr.size; - foreach(var repo in tr.values) { - repo.update_async(updateAllCallback); - } + + update_all_total = tr.size; + foreach(var repo in tr.values) { + if (!repo.is_managed()) { + update_all_total--; + continue; + } + repo.update_async(updateAllCallback); + } } public static void updateAllCallback(GitRepo repo, int err, string res)