[gedit-plugins] git: Prevent trying to find a git repository for every file in a directory
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit-plugins] git: Prevent trying to find a git repository for every file in a directory
- Date: Fri, 22 Aug 2014 16:44:06 +0000 (UTC)
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]