Re: [StGit PATCH 9/9] Use the default git colouring scheme rather than specific scripts

Subsystems: the rest

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [StGit PATCH 9/9] Use the default git colouring scheme rather than specific scripts

From: Samuel Tardieu <hidden>
Date: 2016-06-15 22:46:41

Author: Samuel Tardieu [off-list ref]
Date:   Wed Apr 29 13:45:06 2009 +0200

Load the whole config at once and cache it for future use

The whole configuration files are read using

  git config --list --null

and cached for future lookups.

Signed-off-by: Samuel Tardieu <redacted>
---
quoted
quoted
quoted
quoted
"Karl" == Karl Hasselström [off-list ref] writes:
Karl> But config.get() should be dirt cheap, because we should be
Karl> reading in all the config values at once the first time we need
Karl> one of them. But as I recall we don't currently do that, so my
Karl> one-liner might not be so clever after all ...

Something like this may be useful then.

  Sam
diff --git a/stgit/config.py b/stgit/config.py
index dbca5fb..c40756c 100644
--- a/stgit/config.py
+++ b/stgit/config.py
@@ -40,25 +40,31 @@ class GitConfig:
         'stgit.shortnr':	 '5'
         }
 
-    __cache={}
+    __cache = None
+
+    def load(self):
+        """Load the whole configuration in __cache unless it has been
+        done already."""
+        if self.__cache is not None:
+            return
+        self.__cache = {}
+        lines = Run('git', 'config', '--list', '--null').raw_output()
+        for line in filter(None, lines.split('\0')):
+            key, value = line.split('\n', 1)
+            self.__cache.setdefault(key, []).append(value)
 
     def get(self, name):
-        if self.__cache.has_key(name):
-            return self.__cache[name]
-        try:
-            value = Run('git', 'config', '--get', name).output_one_line()
-        except RunException:
-            value = self.__defaults.get(name, None)
-        self.__cache[name] = value
-        return value
+        self.load()
+        if name not in self.__cache:
+            self.__cache[name] = [self.__defaults.get(name, None)]
+        return self.__cache[name][0]
 
     def getall(self, name):
-        if self.__cache.has_key(name):
+        self.load()
+        try:
             return self.__cache[name]
-        values = Run('git', 'config', '--get-all', name
-                     ).returns([0, 1]).output_lines()
-        self.__cache[name] = values
-        return values
+        except KeyError:
+            return []
 
     def getint(self, name):
         value = self.get(name)

Re: [StGit PATCH 9/9] Use the default git colouring scheme rather than specific scripts

From: Karl Hasselström <hidden>
Date: 2016-06-15 22:46:41

On 2009-04-29 13:48:29 +0200, Samuel Tardieu wrote:
Something like this may be useful then.
Yes, exactly.

-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help