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,43 @@ 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' ]
23
28
try :
24
- parser = getParser (leaf )
29
+ parser = getParser (abspath )
25
30
except UserWarning :
26
31
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
+
33
+ fname = file_blame ['path' ]
32
34
parser .readFile (fname )
33
35
entities , emap = parser .parse ()
34
- self .blame [leaf ] = {}
36
+ self .blame [abspath ] = {}
35
37
for e in entities :
36
38
if isinstance (e , Junk ):
37
39
continue
38
- blines = blames [
40
+ entity_lines = file_blame [ 'lines' ] [
39
41
(e .value_position ()[0 ] - 1 ):e .value_position (- 1 )[0 ]
40
42
]
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
43
+ # ignore timezone
44
+ entity_lines .sort (key = lambda blame : - blame ['date' ][0 ])
45
+ line_blame = entity_lines [0 ]
46
+ user = line_blame ['user' ]
47
+ timestamp = line_blame ['date' ][0 ] # ignore timezone
45
48
if user not in self .users :
46
49
self .users .append (user )
47
50
userid = self .users .index (user )
48
- self .blame [leaf ][e .key ] = [userid , timestamp ]
51
+ self .blame [abspath ][e .key ] = [userid , timestamp ]
49
52
50
53
if __name__ == '__main__' :
51
54
parser = argparse .ArgumentParser ()
0 commit comments