sync
[gitlive] / GitRepo.vala
index e18872b..3c25835 100644 (file)
@@ -25,7 +25,9 @@ public class GitRepo : Object
     public string ahead_or_behind = "";
     
     public Gee.HashMap<string,bool> ignore_files;
-    public GitBranch currentBranch;
+     
+    public GitBranch  currentBranch;
+    
     public Gee.HashMap<string,GitBranch> branches; // accessed in GitBranch..
        public RooTicket? activeTicket;
     public Gee.HashMap<string,GitRepo> cache;
@@ -48,7 +50,7 @@ public class GitRepo : Object
     */
     public static int indexOf( Array<GitRepo> repos, string gitpath) {
         // make a fake object to compare against..
-        var test_repo = GitRepo.get(gitpath);
+        var test_repo = GitRepo.get_sync(gitpath);
         
         for(var i =0; i < repos.length; i++) {
             if (repos.index(i).gitdir == test_repo.gitdir) {
@@ -128,7 +130,7 @@ public class GitRepo : Object
                 continue;
             }
             
-               var rep =  GitRepo.get(  sp );
+               var rep =  GitRepo.get_sync(  sp );
                list_cache.append_val(rep);             
             
         }
@@ -137,13 +139,39 @@ public class GitRepo : Object
          
        }
        
-       public static GitRepo get(string path) 
+       public  static GitRepo get_sync(string path) 
        {
+               GitRepo ret;
                var cache = GitRepo.singleton().cache;
                if (cache.has_key(path)) {
-                       return cache.get(path);
+                       ret =  cache.get(path);
+               } else {
+                       ret =  new GitRepo(path);
                }
-               return new GitRepo(path);
+               return ret;
+       }
+        
+       public static  async  GitRepo? get(string path) 
+       {
+               
+               SourceFunc callback = GitRepo.get.callback;
+               GitRepo ret = null;
+               ThreadFunc<bool> run = () => {
+                       
+                       var cache = GitRepo.singleton().cache;
+                       if (cache.has_key(path)) {
+                               ret =  cache.get(path);
+                       } else {
+                               ret =  new GitRepo(path);
+                       }
+                       Idle.add((owned) callback);
+               return true;
+                       
+               };
+               new Thread<bool>("thread-new-gitrepo", run);
+               yield;
+               return ret;
+               
        }
        
     private GitRepo.single() {
@@ -927,7 +955,43 @@ public class GitRepo : Object
     
     }
     
+    
+    public void doUpdate()
+    {
+       // update the branches..
+       
+    
+    }
+    
+       
+       public static void updateAllAsync(string after)
+       {
+               var done = 0;
+               
+               var tr =  GitRepo.singleton().cache;
+         
+       var update_all_total = tr.size;
+       foreach(var repo  in tr.values) {
+                       repo.doUpdate.begin((obj, res) => {
+                               GitRepo.updateRepo.end(res);
+                               done++;
+                               if (update_all_total != done) {
+                                       return;
+                               }
+                               switch (after) {
+                                       case "show_clones":
+                                               Clones.singleton().show();
+                                               break;
+                                       default:
+                                               GLib.debug("Unkown call after load = %s", update_all_after);            
+                                               break;
+                               }
+                       }
+               }
+                
+       
+       }
+       
         
     
  
@@ -958,6 +1022,9 @@ public class GitRepo : Object
         } 
                GLib.debug("calls total = %d", (int) update_all_total);
     }
+    
+    
+    
     public static void  updateAllCallback(GitRepo repo, int err, string res)
     {
        repo.loadBranches();