NewBranch.bjs
[gitlive] / GitRepo.vala
index d216464..21cf4de 100644 (file)
@@ -168,7 +168,7 @@ public class GitRepo : Object
                return true;
                        
                };
-               new Thread<bool>("thread-new-gitrepo", run);
+               new Thread<bool>("thread-new-gitrepo-" + path, run);
                yield;
                return ret;
                
@@ -958,46 +958,71 @@ public class GitRepo : Object
     
     public async void doUpdate()
     {
-       // update the branches..
-       this.loadBranches();
+       SourceFunc callback = this.doUpdate.callback;
+               GitRepo ret = null;
+               ThreadFunc<bool> 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);
-               }
-               repo.loadStatus();
-               
-               
+                       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<bool>("thread-new-gitpull-" + this.name, run);
+               yield;
+                  
        
     }
     
        
        public static void updateAllAsync(string after)
        {
-               var done = 0;
+               
+               var doing = new  Gee.HashMap<string,bool>();;
                
                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();
@@ -1006,7 +1031,7 @@ public class GitRepo : Object
                                                GLib.debug("Unkown call after load = %s", update_all_after);            
                                                break;
                                }
-                       }
+                       });
                }