Changeset 3197

Show
Ignore:
Timestamp:
02/08/08 05:25:47 (10 months ago)
Author:
hvr
Message:

GitPlugin: implemented "blame"/annotate support for 0.11

Files:

Legend:

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

    r3187 r3197  
    149149 
    150150        def get_node(self, path, rev=None): 
    151                 #print "get_node", path, rev 
    152151                return GitNode(self.git, path, rev) 
    153152 
     
    220219        def __init__(self, git, path, rev, tree_ls_info=None): 
    221220                self.git = git 
    222                 self.sha = rev 
     221                self.sha = None 
    223222                self.perm = None 
    224223                self.data_len = None 
     
    235234 
    236235                        if tree_ls_info != None: 
    237                                 (self.perm,k,self.sha,fn) = tree_ls_info 
     236                                (self.perm, k, self.sha, fn) = tree_ls_info 
    238237                        else: 
    239238                                k = 'blob' 
    240239 
    241                         rev=self.git.last_change(rev, p) 
     240                        rev = self.git.last_change(rev, p) # FIXME 
    242241 
    243242                        if k=='tree': 
     
    265264                return {} 
    266265 
     266        def get_annotations(self): 
     267                p = self.path.strip('/') 
     268                if not self.isfile: 
     269                        return 
     270 
     271                result = [] 
     272                for brev,blineno in self.git.blame(self.rev, p): 
     273                        result.append(brev) 
     274 
     275                return result 
     276 
    267277        def get_entries(self): 
    268                 if self.isfile: 
    269                         return 
    270278                if not self.isdir: 
    271279                        return 
  • gitplugin/0.11/gitplugin/PyGIT.py

    r3188 r3197  
    365365        return rev2 in self.children_recursive(rev1) 
    366366 
     367    def blame(self, commit_sha, path): 
     368        in_metadata = False 
     369        for line in self._git_call_f("git-blame -p -- '%s' %s" \ 
     370                                         % (path, commit_sha)).readlines(): 
     371            assert line 
     372            if in_metadata: 
     373                in_metadata = line[0] != '\t' 
     374            else: 
     375                split_line = line.split() 
     376                if len(split_line) == 4: 
     377                    (sha, orig_lineno, lineno, group_size) = split_line 
     378                else: 
     379                    (sha, orig_lineno, lineno) = split_line 
     380 
     381                assert len(sha) == 40 
     382                yield (sha, lineno) 
     383                in_metadata = True 
     384 
     385        assert not in_metadata 
     386 
    367387    def last_change(self, sha, path): 
    368388        for rev in self._git_call_f("git-rev-list --max-count=1 %s -- '%s'" % (sha,path)).readlines():