X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=GitRepo.vala;h=21cf4de4f52001c238ef28ea8c67f4a3eb91a0f8;hb=01af28a18150e1c30fd20ef32da736c7ceee80ef;hp=aedd8c266ffffd0b924260e819652853c991b7ad;hpb=eb8dace0719110fa4d6ec70275dc9b611e634f18;p=gitlive diff --git a/GitRepo.vala b/GitRepo.vala index aedd8c26..21cf4de4 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -168,7 +168,7 @@ public class GitRepo : Object return true; }; - new Thread("thread-new-gitrepo", run); + new Thread("thread-new-gitrepo-" + path, run); yield; return ret; @@ -956,46 +956,73 @@ public class GitRepo : Object } - public void doUpdate() + public async void doUpdate() { - // update the branches.. - this.loadBranches(); + SourceFunc callback = this.doUpdate.callback; + GitRepo ret = null; + ThreadFunc run = () => { + + + // update the branches.. + this.loadBranches(); - //GLib.debug("connecting '%s'", r.get_url()); - string[] far = {} - foreach(var br in this.branches.values) { - if (br.remote == "" || br.remoterev == br.lastrev) { - continue; + //GLib.debug("connecting '%s'", r.get_url()); + string[] far = {}; + foreach(var br in this.branches.values) { + if (br.remote == "" || br.remoterev == br.lastrev) { + continue; + } + far += ("+refs/heads/" + br.name + ":refs/remotes/" + br.remote); } - far += ("+refs/heads/" + br.name + ":refs/remotes/" + br.remote); - } - if (far.length > 0) { - var r = this.repo.lookup_remote("origin"); - r.connect(Ggit.Direction.FETCH, new GitCallbacks, null, null); - var options = new Ggit.FetchOptions(); - //options.set_remote_callbacks(this.callbacks); - r.download(far, options); - } + if (far.length > 0) { + GLib.debug("PUlling %s", this.name); + var r = this.repo.lookup_remote("origin"); + r.connect(Ggit.Direction.FETCH, new GitCallbacks(this), null, null); + var options = new Ggit.FetchOptions(); + options.set_remote_callbacks( new GitCallbacks(this)); + r.download(far, options); + } + this.loadStatus(); + - + Idle.add((owned) callback); + return true; + + }; + new Thread("thread-new-gitpull-" + this.name, run); + yield; + } public static void updateAllAsync(string after) { - var done = 0; + + + var doing = new Gee.HashMap();; var tr = GitRepo.singleton().cache; - + var update_all_total = tr.size; foreach(var repo in tr.values) { + if (!repo.is_managed()) { + update_all_total--; + continue; + } + doing.set(repo.name, true); repo.doUpdate.begin((obj, res) => { - GitRepo.updateRepo.end(res); - done++; - if (update_all_total != done) { - return; + repo.doUpdate.end(res); + doing.set(repo.name, false); + + foreach(var b in doing.keys) { + if (doing.get(b)) { + GLib.debug("pending: %s", b); + return; + } } + + switch (after) { case "show_clones": Clones.singleton().show(); @@ -1004,9 +1031,9 @@ public class GitRepo : Object GLib.debug("Unkown call after load = %s", update_all_after); break; } - } + }); } - repo.loadStatus(); + }