Partial Fix #5782 - messing around with libgit2-glib
[gitlive] / GitMonitor.vala
index 1b11558..4c79f5e 100644 (file)
@@ -171,24 +171,8 @@ public class GitMonitor : Monitor
 
                                this.monitor(this.top.index(i) );
                        }
-                       StatusIconA.statusicon.resume();
-                   this.paused = false;
-                  
                        
-                       try {
-
-                         
-                               var notification = new Notify.Notification(
-                                       "Git Live",
-                                       "%s\nMonitoring %u Directories".printf(GitMonitor.gitlive, this.monitors.length), 
-                                        "dialog-information"
-                               );
-               
-                               notification.set_timeout(5);
-                               notification.show();
-                       } catch(Error e) {
-                               GLib.debug("Error sending notification to screen: %s",e.message);
-                       }
+                       
                        return false; // do not keep doing this..
 
                });
@@ -197,7 +181,29 @@ public class GitMonitor : Monitor
                
                 
        }
+       int scanning = 0;
+       int scancomplete = 0;
+       public void updateMonitorsComplete()
+       {
+               StatusIconA.statusicon.resume();
+           this.paused = false;
+          
+               
+               try {
 
+                 
+                       var notification = new Notify.Notification(
+                               "Git Live",
+                               "%s\nMonitoring %u Directories".printf(GitMonitor.gitlive, this.monitors.length), 
+                                "dialog-information"
+                       );
+       
+                       notification.set_timeout(5);
+                       notification.show();
+               } catch(Error e) {
+                       GLib.debug("Error sending notification to screen: %s",e.message);
+               }
+       }
 
        public new void stop() {
                StatusIconA.statusicon.pause();
@@ -205,12 +211,18 @@ public class GitMonitor : Monitor
        }
        
        
+       // this is called recursively until we end..
+       
        public override void monitor (string path,  int depth = 0)
        {
                
                //GLib.debug("GitMonitor : monitor %d %s", depth, path);
                //var depth = typeof(depth) == 'number'  ? depth *1 : 0;
                
+               if (depth == 0) {
+                       this.scancomplete = 0;  
+                       this.scanning = 0;      
+               }
                 
                // if we are not at top level.. and there is a .git directory  (it's a submodule .. ignore) 
                if (depth > 1 && FileUtils.test(path + "/.git" , FileTest.IS_DIR)) {
@@ -222,9 +234,17 @@ public class GitMonitor : Monitor
                        if (!FileUtils.test(path + "/.git" , FileTest.IS_DIR)) {
                                return; // skip non-git directories..
                        }
-               
-                       GitRepo.get(path);
-               
+                       this.scanning++;
+                       GitRepo.get.begin(path, (ojb,res) => {
+                               
+                               GitRepo.get.end(res);
+                               base.monitor(path, depth);
+                               this.scanning--;
+                               if (this.scanning == 0 && this.scancomplete == 1) {
+                                       this.updateMonitorsComplete();
+                               }
+                       });
+                       return;
                        // FIXME - check if repo is flagged as not autocommit..
                        //var repo = imports.Scm.Repo.Repo.get(path);
                        //if (!repo || !repo.autocommit()) {
@@ -238,6 +258,11 @@ public class GitMonitor : Monitor
                
                
                base.monitor(path, depth);
+               if (depth == 0) {
+                       this.scancomplete = 1;          
+               }
+               
+               
        }
 
        
@@ -306,7 +331,7 @@ public class GitMonitor : Monitor
                
                        var gitpath = cmd.gitpath; 
                        
-                       var repo = GitRepo.get( gitpath );
+                       var repo = GitRepo.get_sync( gitpath );
                        if ( repo.is_master_branch() && repo.is_auto_branch()) {
                                leave_queued.add(cmd);
                                continue;
@@ -316,7 +341,7 @@ public class GitMonitor : Monitor
                
                        var ix  = GitRepo.indexOf(repo_list,   gitpath);
                        if (ix < 0) {
-                               repo_list.append_val( GitRepo.get( gitpath ));
+                               repo_list.append_val( GitRepo.get_sync( gitpath ));
                                ix = GitRepo.indexOf(repo_list,  cmd.gitpath);
                        }
                        GLib.debug("GitMonitor.runQueue - adding to repolist %d", ix);