public string git_working_dir;
public bool debug = false;
public bool has_local_changes = false;
-
+ public string git_status;
+ public string git_diff;
+ public string ahead_or_behind = "";
public Gee.HashMap<string,bool> ignore_files;
public GitBranch currentBranch;
}
return list_cache;
-
-
}
public static GitRepo get(string path)
}
+ 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 loadStatus()
{
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);
}
//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;
}
}
+
+
+
+
+ public void update_async(GitAsyncCallback cb)
+ {
+ string[] cmd = { "fetch" , "--all" };
+ this.git_async( cmd , cb);
+
+ }
+
+
static uint update_all_total = 0;
static string update_all_after = "";
-
+
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.length;
- foreach(var repo in tr.values) {
-
-
- repo.update_rsync(updateAllCallback);
- // do not care if it's already in sycn..
-
-
-
- }
+
+ 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)
{
+ repo.loadBranches();
+ repo.loadStatus();
+
update_all_total--;
if (update_all_total > 0 ) {
return;
}
switch (update_all_after) {
case "show_clones":
- // show the clones dialog..
+ Clones.singleton().show();
break;
default:
break;