Changeset 1321

Show
Ignore:
Timestamp:
09/29/06 07:26:23 (2 years ago)
Author:
hvr
Message:

GitPlugin:

performance improvements

addresses #746

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gitplugin/0.10/gitplugin/git_fs.py

    r1319 r1321  
    3232        def __init__(self, path, log): 
    3333                self.gitrepo = path 
    34                 self.git = PyGIT.GIT(path) 
     34                self.git = PyGIT.Storage(path) 
    3535                Repository.__init__(self, "git:"+path, None, log) 
    3636 
     
    111111 
    112112class GitNode(Node): 
    113         def __init__(self, git, path, rev): 
     113        def __init__(self, git, path, rev, tree_ls_info=None): 
    114114                self.git = git 
    115                 self.sha = rev; 
    116                 self.perm = None; 
     115                self.sha = rev 
     116                self.perm = None 
     117                self.data_len = None 
     118                 
    117119                kind = Node.DIRECTORY 
    118120                p = path.strip('/') 
    119121                if p != "": 
    120                         [(self.perm,k,self.sha,fn)]=git.tree_ls(rev, p) 
     122                        if tree_ls_info: 
     123                                (self.perm,k,self.sha,fn)=tree_ls_info 
     124                        else: 
     125                                [(self.perm,k,self.sha,fn)]=git.tree_ls(rev, p) 
    121126                        rev=self.git.last_change(rev, p) 
    122127                        if k=='tree': 
     
    153158                if p != '': p = p + '/' 
    154159                for e in self.git.tree_ls(self.rev, p): 
    155                         yield GitNode(self.git, e[3], self.rev
     160                        yield GitNode(self.git, e[3], self.rev, e
    156161         
    157162        def get_content_type(self): 
     
    162167        def get_content_length(self): 
    163168                if self.isfile: 
    164                         return len(self.get_content().read()) 
     169                        if not self.data_len: 
     170                                self.data_len = self.git.get_obj_size(self.sha) 
     171                        return self.data_len 
    165172                return None 
    166173 
  • gitplugin/0.10/gitplugin/PyGIT.py

    r1319 r1321  
    1515import os, re 
    1616 
    17 class GIT: 
     17class GitError(Exception): 
     18    pass 
     19 
     20class Storage: 
    1821    def __init__(self,repo): 
    1922        self.repo = repo 
    2023 
    2124    def _git_call_f(self,cmd): 
    22         #print cmd 
     25        #print "GIT: "+cmd 
    2326        (input, output, error) = os.popen3('GIT_DIR="%s" %s' % (self.repo,cmd)) 
    2427        return output 
     
    5255    def get_file(self, sha): 
    5356        return self._git_call_f("git-cat-file blob "+sha) 
     57 
     58    def get_obj_size(self, sha): 
     59        return int(self._git_call("git-cat-file -s "+sha).strip()) 
    5460 
    5561    def parents(self, sha):