summary refs log tree commit diff stats
diff options
context:
space:
mode:
-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
 
the previous revision' href='/punk/doc/blame/core/linux.html?id=2bb12b769f5af47829276f81d7554cb5b7522ff8'>^
94e429f ^

8d53fb6 ^

94e429f ^

8d53fb6 ^





94e429f ^

94e429f ^


8d53fb6 ^
94e429f ^


8d53fb6 ^

94e429f ^


8d53fb6 ^
94e429f ^
8d53fb6 ^
94e429f ^

8d53fb6 ^
94e429f ^

8d53fb6 ^
94e429f ^






8d53fb6 ^




94e429f ^



94e429f ^

8d53fb6 ^




94e429f ^

94e429f ^

6f2d2fd ^













94e429f ^

8d53fb6 ^
94e429f ^

6f2d2fd ^


94e429f ^

8d53fb6 ^
e2fd026 ^
94e429f ^
183caad ^
94e429f ^




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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132