about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authornfnty <git@nfnty.se>2016-02-08 13:40:09 +0100
committernfnty <git@nfnty.se>2016-02-08 13:48:04 +0100
commitf38066d3bf60659c2cd45e7ba1ea4b7434e653cd (patch)
treedea8864cf18e6c80fb8204ec69364855f253b164
parenta366c4ae69dc8b6f5958468c8c0ba0c58d85312a (diff)
downloadranger-f38066d3bf60659c2cd45e7ba1ea4b7434e653cd.tar.gz
VCS: hg: Use json template
-rw-r--r--ranger/ext/vcs/hg.py52
1 files changed, 20 insertions, 32 deletions
diff --git a/ranger/ext/vcs/hg.py b/ranger/ext/vcs/hg.py
index c4b04282..fa74bfb5 100644
--- a/ranger/ext/vcs/hg.py
+++ b/ranger/ext/vcs/hg.py
@@ -27,16 +27,7 @@ class Hg(Vcs):
 
     def _log(self, refspec=None, maxres=None, filelist=None):
 
-        args = [
-            'log', '--template',
-            '\\{'
-            '\\x00short\\x00:\\x00{rev}\\x00,'
-            '\\x00revid\\x00:\\x00{node}\\x00,'
-            '\\x00author\\x00:\\x00{author}\\x00,'
-            '\\x00date\\x00:\\x00{date}\\x00,'
-            '\\x00summary\\x00:\\x00{desc}\\x00'
-            '}\\n'
-        ]
+        args = ['log', '--template', 'json']
         if refspec:
             args += ['--limit', '1', '--rev', refspec]
         elif maxres:
@@ -52,11 +43,14 @@ class Hg(Vcs):
             return None
 
         log = []
-        for line in output\
-                .replace('\\', '\\\\').replace('"', '\\"').replace('\x00', '"').split('\n'):
-            line = json.loads(line)
-            line['date'] = datetime.fromtimestamp(float(line['date'].split('-')[0]))
-            log.append(line)
+        for entry in json.loads(output):
+            new = {}
+            new['short'] = entry['rev']
+            new['revid'] = entry['node']
+            new['author'] = entry['user']
+            new['date'] = datetime.fromtimestamp(entry['date'][0])
+            new['summary'] = entry['desc']
+            log.append(new)
         return log
 
     def _remote_url(self):
@@ -95,31 +89,25 @@ class Hg(Vcs):
         statuses = set()
 
         # Paths with status
-        output = self._run(['status', '--all', '--print0']).rstrip('\x00')
-        if not output:
-            return 'sync'
-        for line in output.split('\x00'):
-            code = line[0]
-            if code == 'C':
+        for entry in json.loads(self._run(['status', '--all', '--template', 'json'])):
+            if entry['status'] == 'C':
                 continue
-            statuses.add(self._status_translate(code))
+            statuses.add(self._status_translate(entry['status']))
 
-        for status in self.DIRSTATUSES:
-            if status in statuses:
-                return status
+        if statuses:
+            for status in self.DIRSTATUSES:
+                if status in statuses:
+                    return status
         return 'sync'
 
     def data_status_subpaths(self):
         statuses = {}
 
         # Paths with status
-        output = self._run(['status', '--all', '--print0']).rstrip('\x00')
-        if output:
-            for line in output.split('\x00'):
-                code, path = line[0], line[2:]
-                if code == 'C':
-                    continue
-                statuses[os.path.normpath(path)] = self._status_translate(code)
+        for entry in json.loads(self._run(['status', '--all', '--template', 'json'])):
+            if entry['status'] == 'C':
+                continue
+            statuses[os.path.normpath(entry['path'])] = self._status_translate(entry['status'])
 
         return statuses
 
/akspecs/ranger/commit/TODO?h=v1.2.1&id=757e1f5562709d3a625ea9258a3602502577d324'>757e1f55 ^
277ecc9e ^
9983328c ^
33cb688a ^
a1274aba ^
b42eb058 ^
b13518af ^
316ff5a9 ^
fc486c60 ^
b4934e42 ^
2c1d2db0 ^
291ca616 ^
50845f37 ^
039c03ef ^
af6658b3 ^
efe2d7a3 ^
f0df3fa5 ^
a986e2bd ^

3fe38754 ^

6a8d5d23 ^
aad61455 ^
7a268c8b ^

efdc7b16 ^
636f69d3 ^
d3c262a9 ^
4be8b401 ^



d955e3f0 ^
75013dc7 ^
67bb838c ^
a808a661 ^
bba8d293 ^
2a64495f ^
5e449699 ^
8895b130 ^

7b04e507 ^
87db0130 ^
dd4a4145 ^
8f2f1767 ^
db1721dd ^
aea5cf92 ^
b624bd94 ^
69d1220f ^
6099d9a3 ^
9207e83c ^
f7db061b ^
6099d9a3 ^
6f43de0a ^




fca1fc4f ^
f70ee6b2 ^
0db4c9b2 ^
b2d63ef5 ^
291ca616 ^
d994d0d6 ^
01c89bb5 ^
c776804d ^
dab4db44 ^

34c131ef ^
66c5bb93 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93