[gedit-plugins] git: Prevent trying to find a git repository for every file in a directory



commit 2a7bb64ba4bf61cb0a4435e46370639f637e3894
Author: Garrett Regier <garrettregier gmail com>
Date:   Sun Aug 17 16:39:03 2014 -0700

    git: Prevent trying to find a git repository for every file in a directory
    
    Instead just cache the failure, this also means that we don't use
    the weakref value dict anymore and instead rely on the window's
    focus-in-event handler to clear all the cache. This allows a user
    to come back into gedit and for all of the repositories to be
    rediscovered, who know maybe the user ran `git init`.

 plugins/git/git/appactivatable.py    |   10 +++++++---
 plugins/git/git/windowactivatable.py |    2 ++
 2 files changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/plugins/git/git/appactivatable.py b/plugins/git/git/appactivatable.py
index 6dc4cde..217643f 100644
--- a/plugins/git/git/appactivatable.py
+++ b/plugins/git/git/appactivatable.py
@@ -19,8 +19,6 @@
 
 from gi.repository import GLib, GObject, Gio, Gedit, Ggit
 
-import weakref
-
 
 class GitAppActivatable(GObject.Object, Gedit.AppActivatable):
     app = GObject.property(type=Gedit.App)
@@ -35,7 +33,7 @@ class GitAppActivatable(GObject.Object, Gedit.AppActivatable):
         GitAppActivatable.__instance = self
 
     def do_activate(self):
-        self.__repos = weakref.WeakValueDictionary()
+        self.__repos = {}
 
     def do_deactivate(self):
         self.__repos = None
@@ -44,6 +42,9 @@ class GitAppActivatable(GObject.Object, Gedit.AppActivatable):
     def get_instance(cls):
         return cls.__instance
 
+    def clear_repositories(self):
+        self.__repos = {}
+
     def get_repository(self, location, is_dir):
         dir_location = location if is_dir else location.get_parent()
         dir_uri = dir_location.get_uri()
@@ -64,6 +65,9 @@ class GitAppActivatable(GObject.Object, Gedit.AppActivatable):
             repo_file = Ggit.Repository.discover(location)
 
         except GLib.Error:
+            # Prevent trying to find a git repository
+            # for every file in this directory
+            self.__repos[dir_uri] = None
             return None
 
         repo_uri = repo_file.get_parent().get_uri()
diff --git a/plugins/git/git/windowactivatable.py b/plugins/git/git/windowactivatable.py
index 3769171..3bff179 100644
--- a/plugins/git/git/windowactivatable.py
+++ b/plugins/git/git/windowactivatable.py
@@ -203,6 +203,8 @@ class GitWindowActivatable(GObject.Object, Gedit.WindowActivatable):
             self.git_status_thread.push(repo, location)
 
     def focus_in_event(self, window, event):
+        self.app_activatable.clear_repositories()
+
         for view_activatable in self.view_activatables:
             view_activatable.update()
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]