X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=GitRepo.vala;h=73866d7a45dc4ef6c6c922d46a32bcdb40de9b79;hb=e7a1befa41aa9d046b8f05ee7bad4fa69943355c;hp=3c258357f9ba886c4d03ce6bec6a5f510ebdb87b;hpb=c8bc028311655fb453141768779b772a063f4b2c;p=gitlive diff --git a/GitRepo.vala b/GitRepo.vala index 3c258357..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( @@ -956,28 +966,73 @@ public class GitRepo : Object } - public void doUpdate() + public async void doUpdate() { - // update the branches.. + 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; + } + 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(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(); @@ -986,9 +1041,9 @@ public class GitRepo : Object GLib.debug("Unkown call after load = %s", update_all_after); break; } - } + }); } - + }