1
1
import argparse
2
- import os
3
2
import json
4
3
import hglib
5
4
from hglib .util import b , cmdbuilder
@@ -13,39 +12,44 @@ def __init__(self, repopath):
13
12
self .blame = {}
14
13
15
14
def main (self ):
16
- for manifestline in self .client .manifest ():
17
- leaf = manifestline [- 1 ]
18
- self .handleFile (leaf )
15
+ args = cmdbuilder (
16
+ b ('annotate' ), self .client .root (), d = True , u = True , T = 'json' )
17
+ blame_json = '' .join (self .client .rawcommand (args ))
18
+ file_blames = json .loads (blame_json )
19
+
20
+ for file_blame in file_blames :
21
+ self .handleFile (file_blame )
22
+
19
23
return {'authors' : self .users ,
20
24
'blame' : self .blame }
21
25
22
- def handleFile (self , leaf ):
26
+ def handleFile (self , file_blame ):
27
+ abspath = file_blame ['abspath' ]
28
+
23
29
try :
24
- parser = getParser (leaf )
30
+ parser = getParser (abspath )
25
31
except UserWarning :
26
32
return
27
- args = cmdbuilder (b ('annotate' ), d = True , u = True , T = 'json' ,
28
- * ['path:' + leaf ])
29
- blame_json = '' .join (self .client .rawcommand (args ))
30
- blames = json .loads (blame_json )
31
- fname = os .path .join (self .client .root (), leaf )
32
- parser .readFile (fname )
33
+
34
+ self .blame [abspath ] = {}
35
+
36
+ parser .readFile (file_blame ['path' ])
33
37
entities , emap = parser .parse ()
34
- self .blame [leaf ] = {}
35
38
for e in entities :
36
39
if isinstance (e , Junk ):
37
40
continue
38
- blines = blames [
41
+ entity_lines = file_blame [ 'lines' ] [
39
42
(e .value_position ()[0 ] - 1 ):e .value_position (- 1 )[0 ]
40
43
]
41
- blines .sort (key = lambda blame : - blame ['date' ][0 ]) # ignore timezone
42
- blame = blines [0 ]
43
- user = blame ['user' ]
44
- timestamp = blame ['date' ][0 ] # ignore timezone
44
+ # ignore timezone
45
+ entity_lines .sort (key = lambda blame : - blame ['date' ][0 ])
46
+ line_blame = entity_lines [0 ]
47
+ user = line_blame ['user' ]
48
+ timestamp = line_blame ['date' ][0 ] # ignore timezone
45
49
if user not in self .users :
46
50
self .users .append (user )
47
51
userid = self .users .index (user )
48
- self .blame [leaf ][e .key ] = [userid , timestamp ]
52
+ self .blame [abspath ][e .key ] = [userid , timestamp ]
49
53
50
54
if __name__ == '__main__' :
51
55
parser = argparse .ArgumentParser ()
0 commit comments