X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=GitRepo.vala;h=73866d7a45dc4ef6c6c922d46a32bcdb40de9b79;hb=556661ee18a4b114d63e652935773a54362a4af1;hp=cdadaed6c15264355abf448341c6dc3d39255bd2;hpb=f6d641bd29e59f4a380f29022b2d7002035618bc;p=gitlive diff --git a/GitRepo.vala b/GitRepo.vala index cdadaed6..73866d7a 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -26,7 +26,17 @@ public class GitRepo : Object public Gee.HashMap ignore_files; - public GitBranch currentBranch; + public GitBranch _currentBranch; + public GitBranch getCurrentBranch() { + if (this._currentBranch == null) { + this.loadBranches(); + } + if (this._currentBranch == null) { + GLib.error("could not work out current branch?"); + } + return this._currentBranch; + } + public Gee.HashMap branches; // accessed in GitBranch.. public RooTicket? activeTicket; @@ -168,7 +178,7 @@ public class GitRepo : Object return true; }; - new Thread("thread-new-gitrepo", run); + new Thread("thread-new-gitrepo-" + path, run); yield; return ret; @@ -222,7 +232,7 @@ public class GitRepo : Object public bool is_master_branch() { // special branches that do not allow autopushing now... - return this.currentBranch.name == "master" || this.currentBranch.name == "roojs"; + return this.getCurrentBranch().name == "master" || this.getCurrentBranch().name == "roojs"; } public void init_config() @@ -382,7 +392,7 @@ public class GitRepo : Object continue; } commitrevs += commitrevs.length > 0 ? " " : ""; - commitrevs += repo.currentBranch.lastrev; + commitrevs += repo.getCurrentBranch().lastrev; } } if (sucess && action == "CLOSE") { @@ -402,7 +412,7 @@ public class GitRepo : Object if (action == "CLOSE" || action == "LEAVE") { try { - var oldbranch = this.currentBranch.name; + var oldbranch = this.getCurrentBranch().name; this.setActiveTicket(null, master); string [] cmd = { "merge", "--squash", oldbranch }; this.git( cmd ); @@ -438,7 +448,7 @@ public class GitRepo : Object string[] cmd = { "merge", master}; this.git( cmd ); var notification = new Notify.Notification( - "Merged code from %s to %s".printf(master,this.currentBranch.name), + "Merged code from %s to %s".printf(master,this.getCurrentBranch().name), "", "dialog-information" @@ -454,7 +464,7 @@ public class GitRepo : Object } if (action == "EXIT") { try { - var oldbranch = this.currentBranch.name; + var oldbranch = this.getCurrentBranch().name; this.setActiveTicket(null, master); this.loadBranches(); var notification = new Notify.Notification( @@ -958,7 +968,7 @@ public class GitRepo : Object public async void doUpdate() { - SourceFunc callback = GitRepo.get.callback; + SourceFunc callback = this.doUpdate.callback; GitRepo ret = null; ThreadFunc run = () => { @@ -967,7 +977,7 @@ public class GitRepo : Object this.loadBranches(); //GLib.debug("connecting '%s'", r.get_url()); - string[] far = {} + string[] far = {}; foreach(var br in this.branches.values) { if (br.remote == "" || br.remoterev == br.lastrev) { continue; @@ -975,45 +985,54 @@ public class GitRepo : Object far += ("+refs/heads/" + br.name + ":refs/remotes/" + br.remote); } if (far.length > 0) { + GLib.debug("PUlling %s", this.name); var r = this.repo.lookup_remote("origin"); - r.connect(Ggit.Direction.FETCH, new GitCallbacks, null, null); + r.connect(Ggit.Direction.FETCH, new GitCallbacks(this), null, null); var options = new Ggit.FetchOptions(); - //options.set_remote_callbacks(this.callbacks); + options.set_remote_callbacks( new GitCallbacks(this)); r.download(far, options); } - repo.loadStatus(); - + this.loadStatus(); + Idle.add((owned) callback); return true; }; - new Thread("thread-new-gitrepo", run); + new Thread("thread-new-gitpull-" + this.name, run); yield; - return ret; - - - - - + } 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(); @@ -1022,7 +1041,7 @@ public class GitRepo : Object GLib.debug("Unkown call after load = %s", update_all_after); break; } - } + }); }