##// END OF EJS Templates
templater: fix age filter to state the obvious on future timestamps
Dirkjan Ochtman -
r7682:9c8bbae0 default
parent child Browse files
Show More
@@ -1,184 +1,186
1 # template-filters.py - common template expansion filters
1 # template-filters.py - common template expansion filters
2 #
2 #
3 # Copyright 2005-2008 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2008 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms
5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference.
6 # of the GNU General Public License, incorporated herein by reference.
7
7
8 import cgi, re, os, time, urllib, textwrap
8 import cgi, re, os, time, urllib, textwrap
9 import util, templater
9 import util, templater
10
10
11 agescales = [("second", 1),
11 agescales = [("second", 1),
12 ("minute", 60),
12 ("minute", 60),
13 ("hour", 3600),
13 ("hour", 3600),
14 ("day", 3600 * 24),
14 ("day", 3600 * 24),
15 ("week", 3600 * 24 * 7),
15 ("week", 3600 * 24 * 7),
16 ("month", 3600 * 24 * 30),
16 ("month", 3600 * 24 * 30),
17 ("year", 3600 * 24 * 365)]
17 ("year", 3600 * 24 * 365)]
18
18
19 agescales.reverse()
19 agescales.reverse()
20
20
21 def age(date):
21 def age(date):
22 '''turn a (timestamp, tzoff) tuple into an age string.'''
22 '''turn a (timestamp, tzoff) tuple into an age string.'''
23
23
24 def plural(t, c):
24 def plural(t, c):
25 if c == 1:
25 if c == 1:
26 return t
26 return t
27 return t + "s"
27 return t + "s"
28 def fmt(t, c):
28 def fmt(t, c):
29 return "%d %s" % (c, plural(t, c))
29 return "%d %s" % (c, plural(t, c))
30
30
31 now = time.time()
31 now = time.time()
32 then = date[0]
32 then = date[0]
33 if then > now:
34 return 'in the future'
35
33 delta = max(1, int(now - then))
36 delta = max(1, int(now - then))
34
35 for t, s in agescales:
37 for t, s in agescales:
36 n = delta / s
38 n = delta / s
37 if n >= 2 or s == 1:
39 if n >= 2 or s == 1:
38 return fmt(t, n)
40 return fmt(t, n)
39
41
40 para_re = None
42 para_re = None
41 space_re = None
43 space_re = None
42
44
43 def fill(text, width):
45 def fill(text, width):
44 '''fill many paragraphs.'''
46 '''fill many paragraphs.'''
45 global para_re, space_re
47 global para_re, space_re
46 if para_re is None:
48 if para_re is None:
47 para_re = re.compile('(\n\n|\n\\s*[-*]\\s*)', re.M)
49 para_re = re.compile('(\n\n|\n\\s*[-*]\\s*)', re.M)
48 space_re = re.compile(r' +')
50 space_re = re.compile(r' +')
49
51
50 def findparas():
52 def findparas():
51 start = 0
53 start = 0
52 while True:
54 while True:
53 m = para_re.search(text, start)
55 m = para_re.search(text, start)
54 if not m:
56 if not m:
55 w = len(text)
57 w = len(text)
56 while w > start and text[w-1].isspace(): w -= 1
58 while w > start and text[w-1].isspace(): w -= 1
57 yield text[start:w], text[w:]
59 yield text[start:w], text[w:]
58 break
60 break
59 yield text[start:m.start(0)], m.group(1)
61 yield text[start:m.start(0)], m.group(1)
60 start = m.end(1)
62 start = m.end(1)
61
63
62 return "".join([space_re.sub(' ', textwrap.fill(para, width)) + rest
64 return "".join([space_re.sub(' ', textwrap.fill(para, width)) + rest
63 for para, rest in findparas()])
65 for para, rest in findparas()])
64
66
65 def firstline(text):
67 def firstline(text):
66 '''return the first line of text'''
68 '''return the first line of text'''
67 try:
69 try:
68 return text.splitlines(1)[0].rstrip('\r\n')
70 return text.splitlines(1)[0].rstrip('\r\n')
69 except IndexError:
71 except IndexError:
70 return ''
72 return ''
71
73
72 def nl2br(text):
74 def nl2br(text):
73 '''replace raw newlines with xhtml line breaks.'''
75 '''replace raw newlines with xhtml line breaks.'''
74 return text.replace('\n', '<br/>\n')
76 return text.replace('\n', '<br/>\n')
75
77
76 def obfuscate(text):
78 def obfuscate(text):
77 text = unicode(text, util._encoding, 'replace')
79 text = unicode(text, util._encoding, 'replace')
78 return ''.join(['&#%d;' % ord(c) for c in text])
80 return ''.join(['&#%d;' % ord(c) for c in text])
79
81
80 def domain(author):
82 def domain(author):
81 '''get domain of author, or empty string if none.'''
83 '''get domain of author, or empty string if none.'''
82 f = author.find('@')
84 f = author.find('@')
83 if f == -1: return ''
85 if f == -1: return ''
84 author = author[f+1:]
86 author = author[f+1:]
85 f = author.find('>')
87 f = author.find('>')
86 if f >= 0: author = author[:f]
88 if f >= 0: author = author[:f]
87 return author
89 return author
88
90
89 def person(author):
91 def person(author):
90 '''get name of author, or else username.'''
92 '''get name of author, or else username.'''
91 f = author.find('<')
93 f = author.find('<')
92 if f == -1: return util.shortuser(author)
94 if f == -1: return util.shortuser(author)
93 return author[:f].rstrip()
95 return author[:f].rstrip()
94
96
95 def indent(text, prefix):
97 def indent(text, prefix):
96 '''indent each non-empty line of text after first with prefix.'''
98 '''indent each non-empty line of text after first with prefix.'''
97 lines = text.splitlines()
99 lines = text.splitlines()
98 num_lines = len(lines)
100 num_lines = len(lines)
99 def indenter():
101 def indenter():
100 for i in xrange(num_lines):
102 for i in xrange(num_lines):
101 l = lines[i]
103 l = lines[i]
102 if i and l.strip():
104 if i and l.strip():
103 yield prefix
105 yield prefix
104 yield l
106 yield l
105 if i < num_lines - 1 or text.endswith('\n'):
107 if i < num_lines - 1 or text.endswith('\n'):
106 yield '\n'
108 yield '\n'
107 return "".join(indenter())
109 return "".join(indenter())
108
110
109 def permissions(flags):
111 def permissions(flags):
110 if "l" in flags:
112 if "l" in flags:
111 return "lrwxrwxrwx"
113 return "lrwxrwxrwx"
112 if "x" in flags:
114 if "x" in flags:
113 return "-rwxr-xr-x"
115 return "-rwxr-xr-x"
114 return "-rw-r--r--"
116 return "-rw-r--r--"
115
117
116 def xmlescape(text):
118 def xmlescape(text):
117 text = (text
119 text = (text
118 .replace('&', '&amp;')
120 .replace('&', '&amp;')
119 .replace('<', '&lt;')
121 .replace('<', '&lt;')
120 .replace('>', '&gt;')
122 .replace('>', '&gt;')
121 .replace('"', '&quot;')
123 .replace('"', '&quot;')
122 .replace("'", '&#39;')) # &apos; invalid in HTML
124 .replace("'", '&#39;')) # &apos; invalid in HTML
123 return re.sub('[\x00-\x08\x0B\x0C\x0E-\x1F]', ' ', text)
125 return re.sub('[\x00-\x08\x0B\x0C\x0E-\x1F]', ' ', text)
124
126
125 _escapes = [
127 _escapes = [
126 ('\\', '\\\\'), ('"', '\\"'), ('\t', '\\t'), ('\n', '\\n'),
128 ('\\', '\\\\'), ('"', '\\"'), ('\t', '\\t'), ('\n', '\\n'),
127 ('\r', '\\r'), ('\f', '\\f'), ('\b', '\\b'),
129 ('\r', '\\r'), ('\f', '\\f'), ('\b', '\\b'),
128 ]
130 ]
129
131
130 def json(obj):
132 def json(obj):
131 if obj is None or obj is False or obj is True:
133 if obj is None or obj is False or obj is True:
132 return {None: 'null', False: 'false', True: 'true'}[obj]
134 return {None: 'null', False: 'false', True: 'true'}[obj]
133 elif isinstance(obj, int) or isinstance(obj, float):
135 elif isinstance(obj, int) or isinstance(obj, float):
134 return str(obj)
136 return str(obj)
135 elif isinstance(obj, str):
137 elif isinstance(obj, str):
136 for k, v in _escapes:
138 for k, v in _escapes:
137 obj = obj.replace(k, v)
139 obj = obj.replace(k, v)
138 return '"%s"' % obj
140 return '"%s"' % obj
139 elif isinstance(obj, unicode):
141 elif isinstance(obj, unicode):
140 return json(obj.encode('utf-8'))
142 return json(obj.encode('utf-8'))
141 elif hasattr(obj, 'keys'):
143 elif hasattr(obj, 'keys'):
142 out = []
144 out = []
143 for k, v in obj.iteritems():
145 for k, v in obj.iteritems():
144 s = '%s: %s' % (json(k), json(v))
146 s = '%s: %s' % (json(k), json(v))
145 out.append(s)
147 out.append(s)
146 return '{' + ', '.join(out) + '}'
148 return '{' + ', '.join(out) + '}'
147 elif hasattr(obj, '__iter__'):
149 elif hasattr(obj, '__iter__'):
148 out = []
150 out = []
149 for i in obj:
151 for i in obj:
150 out.append(json(i))
152 out.append(json(i))
151 return '[' + ', '.join(out) + ']'
153 return '[' + ', '.join(out) + ']'
152 else:
154 else:
153 raise TypeError('cannot encode type %s' % obj.__class__.__name__)
155 raise TypeError('cannot encode type %s' % obj.__class__.__name__)
154
156
155 filters = {
157 filters = {
156 "addbreaks": nl2br,
158 "addbreaks": nl2br,
157 "basename": os.path.basename,
159 "basename": os.path.basename,
158 "age": age,
160 "age": age,
159 "date": lambda x: util.datestr(x),
161 "date": lambda x: util.datestr(x),
160 "domain": domain,
162 "domain": domain,
161 "email": util.email,
163 "email": util.email,
162 "escape": lambda x: cgi.escape(x, True),
164 "escape": lambda x: cgi.escape(x, True),
163 "fill68": lambda x: fill(x, width=68),
165 "fill68": lambda x: fill(x, width=68),
164 "fill76": lambda x: fill(x, width=76),
166 "fill76": lambda x: fill(x, width=76),
165 "firstline": firstline,
167 "firstline": firstline,
166 "tabindent": lambda x: indent(x, '\t'),
168 "tabindent": lambda x: indent(x, '\t'),
167 "hgdate": lambda x: "%d %d" % x,
169 "hgdate": lambda x: "%d %d" % x,
168 "isodate": lambda x: util.datestr(x, '%Y-%m-%d %H:%M %1%2'),
170 "isodate": lambda x: util.datestr(x, '%Y-%m-%d %H:%M %1%2'),
169 "isodatesec": lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2'),
171 "isodatesec": lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2'),
170 "obfuscate": obfuscate,
172 "obfuscate": obfuscate,
171 "permissions": permissions,
173 "permissions": permissions,
172 "person": person,
174 "person": person,
173 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2"),
175 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2"),
174 "rfc3339date": lambda x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2"),
176 "rfc3339date": lambda x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2"),
175 "short": lambda x: x[:12],
177 "short": lambda x: x[:12],
176 "shortdate": util.shortdate,
178 "shortdate": util.shortdate,
177 "stringify": templater.stringify,
179 "stringify": templater.stringify,
178 "strip": lambda x: x.strip(),
180 "strip": lambda x: x.strip(),
179 "urlescape": lambda x: urllib.quote(x),
181 "urlescape": lambda x: urllib.quote(x),
180 "user": lambda x: util.shortuser(x),
182 "user": lambda x: util.shortuser(x),
181 "stringescape": lambda x: x.encode('string_escape'),
183 "stringescape": lambda x: x.encode('string_escape'),
182 "xmlescape": xmlescape,
184 "xmlescape": xmlescape,
183 "json": json,
185 "json": json,
184 }
186 }
@@ -1,126 +1,130
1 #!/bin/sh
1 #!/bin/sh
2
2
3 hg init a
3 hg init a
4 cd a
4 cd a
5 echo a > a
5 echo a > a
6 hg add a
6 hg add a
7 echo line 1 > b
7 echo line 1 > b
8 echo line 2 >> b
8 echo line 2 >> b
9 hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
9 hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
10 hg add b
10 hg add b
11 echo other 1 > c
11 echo other 1 > c
12 echo other 2 >> c
12 echo other 2 >> c
13 echo >> c
13 echo >> c
14 echo other 3 >> c
14 echo other 3 >> c
15 hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
15 hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
16 hg add c
16 hg add c
17 hg commit -m 'no person' -d '1200000 0' -u 'other@place'
17 hg commit -m 'no person' -d '1200000 0' -u 'other@place'
18 echo c >> c
18 echo c >> c
19 hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
19 hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
20 echo foo > .hg/branch
20 echo foo > .hg/branch
21 hg commit -m 'new branch' -d '1400000 0' -u 'person'
21 hg commit -m 'new branch' -d '1400000 0' -u 'person'
22 hg co -q 3
22 hg co -q 3
23 echo other 4 >> d
23 echo other 4 >> d
24 hg add d
24 hg add d
25 hg commit -m 'new head' -d '1500000 0' -u 'person'
25 hg commit -m 'new head' -d '1500000 0' -u 'person'
26 hg merge -q foo
26 hg merge -q foo
27 hg commit -m 'merge' -d '1500001 0' -u 'person'
27 hg commit -m 'merge' -d '1500001 0' -u 'person'
28 # second branch starting at nullrev
28 # second branch starting at nullrev
29 hg update null
29 hg update null
30 echo second > second
30 echo second > second
31 hg add second
31 hg add second
32 hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
32 hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
33 echo third > third
34 hg add third
35 hg commit -m third -d "2020-01-01 10:01"
33
36
34 # make sure user/global hgrc does not affect tests
37 # make sure user/global hgrc does not affect tests
35 echo '[ui]' > .hg/hgrc
38 echo '[ui]' > .hg/hgrc
36 echo 'logtemplate =' >> .hg/hgrc
39 echo 'logtemplate =' >> .hg/hgrc
37 echo 'style =' >> .hg/hgrc
40 echo 'style =' >> .hg/hgrc
38
41
39 echo '# default style is like normal output'
42 echo '# default style is like normal output'
40 echo '# normal'
43 echo '# normal'
41 hg log > log.out
44 hg log > log.out
42 hg log --style default > style.out
45 hg log --style default > style.out
43 diff log.out style.out
46 diff log.out style.out
44 echo '# verbose'
47 echo '# verbose'
45 hg log -v > log.out
48 hg log -v > log.out
46 hg log -v --style default > style.out
49 hg log -v --style default > style.out
47 diff log.out style.out
50 diff log.out style.out
48 echo '# debug'
51 echo '# debug'
49 hg log --debug > log.out
52 hg log --debug > log.out
50 hg log --debug --style default > style.out
53 hg log --debug --style default > style.out
51 diff log.out style.out
54 diff log.out style.out
52
55
53 echo '# revision with no copies (used to print a traceback)'
56 echo '# revision with no copies (used to print a traceback)'
54 hg tip -v --template '\n'
57 hg tip -v --template '\n'
55
58
56 echo '# compact style works'
59 echo '# compact style works'
57 hg log --style compact
60 hg log --style compact
58 hg log -v --style compact
61 hg log -v --style compact
59 hg log --debug --style compact
62 hg log --debug --style compact
60
63
61 echo '# error if style not readable'
64 echo '# error if style not readable'
62 touch q
65 touch q
63 chmod 0 q
66 chmod 0 q
64 hg log --style ./q
67 hg log --style ./q
65
68
66 echo '# error if no style'
69 echo '# error if no style'
67 hg log --style notexist
70 hg log --style notexist
68
71
69 echo '# error if style missing key'
72 echo '# error if style missing key'
70 echo 'q = q' > t
73 echo 'q = q' > t
71 hg log --style ./t
74 hg log --style ./t
72
75
73 echo '# error if include fails'
76 echo '# error if include fails'
74 echo 'changeset = q' >> t
77 echo 'changeset = q' >> t
75 hg log --style ./t
78 hg log --style ./t
76
79
77 echo '# include works'
80 echo '# include works'
78 rm q
81 rm q
79 echo '{rev}' > q
82 echo '{rev}' > q
80 hg log --style ./t
83 hg log --style ./t
81
84
82 echo '# ui.style works'
85 echo '# ui.style works'
83 echo '[ui]' > .hg/hgrc
86 echo '[ui]' > .hg/hgrc
84 echo 'style = t' >> .hg/hgrc
87 echo 'style = t' >> .hg/hgrc
85 hg log
88 hg log
86
89
87 echo '# issue338'
90 echo '# issue338'
88 hg log --style=changelog > changelog
91 hg log --style=changelog > changelog
89 cat changelog
92 cat changelog
90
93
91 echo "# keys work"
94 echo "# keys work"
92 for key in author branches date desc file_adds file_dels file_mods \
95 for key in author branches date desc file_adds file_dels file_mods \
93 files manifest node parents rev tags; do
96 files manifest node parents rev tags; do
94 for mode in '' --verbose --debug; do
97 for mode in '' --verbose --debug; do
95 hg log $mode --template "$key$mode: {$key}\n"
98 hg log $mode --template "$key$mode: {$key}\n"
96 done
99 done
97 done
100 done
98
101
99 echo '# filters work'
102 echo '# filters work'
100 hg log --template '{author|domain}\n'
103 hg log --template '{author|domain}\n'
101 hg log --template '{author|person}\n'
104 hg log --template '{author|person}\n'
102 hg log --template '{author|user}\n'
105 hg log --template '{author|user}\n'
103 hg log --template '{date|age}\n' > /dev/null || exit 1
106 hg log --template '{date|age}\n' > /dev/null || exit 1
107 hg log -l1 --template '{date|age}\n'
104 hg log --template '{date|date}\n'
108 hg log --template '{date|date}\n'
105 hg log --template '{date|isodate}\n'
109 hg log --template '{date|isodate}\n'
106 hg log --template '{date|isodatesec}\n'
110 hg log --template '{date|isodatesec}\n'
107 hg log --template '{date|rfc822date}\n'
111 hg log --template '{date|rfc822date}\n'
108 hg log --template '{desc|firstline}\n'
112 hg log --template '{desc|firstline}\n'
109 hg log --template '{node|short}\n'
113 hg log --template '{node|short}\n'
110 hg log --template '<changeset author="{author|xmlescape}"/>\n'
114 hg log --template '<changeset author="{author|xmlescape}"/>\n'
111
115
112 echo '# formatnode filter works'
116 echo '# formatnode filter works'
113 echo '# quiet'
117 echo '# quiet'
114 hg -q log -r 0 --template '#node|formatnode#\n'
118 hg -q log -r 0 --template '#node|formatnode#\n'
115 echo '# normal'
119 echo '# normal'
116 hg log -r 0 --template '#node|formatnode#\n'
120 hg log -r 0 --template '#node|formatnode#\n'
117 echo '# verbose'
121 echo '# verbose'
118 hg -v log -r 0 --template '#node|formatnode#\n'
122 hg -v log -r 0 --template '#node|formatnode#\n'
119 echo '# debug'
123 echo '# debug'
120 hg --debug log -r 0 --template '#node|formatnode#\n'
124 hg --debug log -r 0 --template '#node|formatnode#\n'
121
125
122 echo '# error on syntax'
126 echo '# error on syntax'
123 echo 'x = "f' >> t
127 echo 'x = "f' >> t
124 hg log
128 hg log
125
129
126 echo '# done'
130 echo '# done'
@@ -1,573 +1,640
1 created new head
1 created new head
2 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
2 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
3 created new head
3 created new head
4 # default style is like normal output
4 # default style is like normal output
5 # normal
5 # normal
6 # verbose
6 # verbose
7 # debug
7 # debug
8 # revision with no copies (used to print a traceback)
8 # revision with no copies (used to print a traceback)
9
9
10 # compact style works
10 # compact style works
11 7[tip]:-1 29114dbae42b 1970-01-12 13:46 +0000 user
11 8[tip] 946e2bd9c565 2020-01-01 10:01 +0000 test
12 third
13
14 7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
12 second
15 second
13
16
14 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
17 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
15 merge
18 merge
16
19
17 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
20 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
18 new head
21 new head
19
22
20 4 32a18f097fcc 1970-01-17 04:53 +0000 person
23 4 32a18f097fcc 1970-01-17 04:53 +0000 person
21 new branch
24 new branch
22
25
23 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
26 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
24 no user, no domain
27 no user, no domain
25
28
26 2 97054abb4ab8 1970-01-14 21:20 +0000 other
29 2 97054abb4ab8 1970-01-14 21:20 +0000 other
27 no person
30 no person
28
31
29 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
32 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
30 other 1
33 other 1
31
34
32 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
35 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
33 line 1
36 line 1
34
37
35 7[tip]:-1 29114dbae42b 1970-01-12 13:46 +0000 user
38 8[tip] 946e2bd9c565 2020-01-01 10:01 +0000 test
39 third
40
41 7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
36 second
42 second
37
43
38 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
44 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
39 merge
45 merge
40
46
41 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
47 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
42 new head
48 new head
43
49
44 4 32a18f097fcc 1970-01-17 04:53 +0000 person
50 4 32a18f097fcc 1970-01-17 04:53 +0000 person
45 new branch
51 new branch
46
52
47 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
53 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
48 no user, no domain
54 no user, no domain
49
55
50 2 97054abb4ab8 1970-01-14 21:20 +0000 other
56 2 97054abb4ab8 1970-01-14 21:20 +0000 other
51 no person
57 no person
52
58
53 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
59 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
54 other 1
60 other 1
55
61
56 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
62 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
57 line 1
63 line 1
58
64
59 7[tip]:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 user
65 8[tip]:7,-1 946e2bd9c565 2020-01-01 10:01 +0000 test
66 third
67
68 7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 user
60 second
69 second
61
70
62 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
71 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
63 merge
72 merge
64
73
65 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
74 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
66 new head
75 new head
67
76
68 4:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person
77 4:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person
69 new branch
78 new branch
70
79
71 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
80 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
72 no user, no domain
81 no user, no domain
73
82
74 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other
83 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other
75 no person
84 no person
76
85
77 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
86 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
78 other 1
87 other 1
79
88
80 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
89 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
81 line 1
90 line 1
82
91
83 # error if style not readable
92 # error if style not readable
84 abort: Permission denied: ./q
93 abort: Permission denied: ./q
85 # error if no style
94 # error if no style
86 abort: style not found: notexist
95 abort: style not found: notexist
87 # error if style missing key
96 # error if style missing key
88 abort: ./t: no key named 'changeset'
97 abort: ./t: no key named 'changeset'
89 # error if include fails
98 # error if include fails
90 abort: template file ./q: Permission denied
99 abort: template file ./q: Permission denied
91 # include works
100 # include works
101 8
92 7
102 7
93 6
103 6
94 5
104 5
95 4
105 4
96 3
106 3
97 2
107 2
98 1
108 1
99 0
109 0
100 # ui.style works
110 # ui.style works
111 8
101 7
112 7
102 6
113 6
103 5
114 5
104 4
115 4
105 3
116 3
106 2
117 2
107 1
118 1
108 0
119 0
109 # issue338
120 # issue338
121 2020-01-01 test <test>
122
123 * third:
124 third
125 [946e2bd9c565] [tip]
126
110 1970-01-12 User Name <user@hostname>
127 1970-01-12 User Name <user@hostname>
111
128
112 * second:
129 * second:
113 second
130 second
114 [29114dbae42b] [tip]
131 [29114dbae42b]
115
132
116 1970-01-18 person <person>
133 1970-01-18 person <person>
117
134
118 * merge
135 * merge
119 [c7b487c6c50e]
136 [c7b487c6c50e]
120
137
121 * d:
138 * d:
122 new head
139 new head
123 [13207e5a10d9]
140 [13207e5a10d9]
124
141
125 1970-01-17 person <person>
142 1970-01-17 person <person>
126
143
127 * new branch
144 * new branch
128 [32a18f097fcc]
145 [32a18f097fcc]
129
146
130 1970-01-16 person <person>
147 1970-01-16 person <person>
131
148
132 * c:
149 * c:
133 no user, no domain
150 no user, no domain
134 [10e46f2dcbf4]
151 [10e46f2dcbf4]
135
152
136 1970-01-14 other <other@place>
153 1970-01-14 other <other@place>
137
154
138 * c:
155 * c:
139 no person
156 no person
140 [97054abb4ab8]
157 [97054abb4ab8]
141
158
142 1970-01-13 A. N. Other <other@place>
159 1970-01-13 A. N. Other <other@place>
143
160
144 * b:
161 * b:
145 other 1 other 2
162 other 1 other 2
146
163
147 other 3
164 other 3
148 [b608e9d1a3f0]
165 [b608e9d1a3f0]
149
166
150 1970-01-12 User Name <user@hostname>
167 1970-01-12 User Name <user@hostname>
151
168
152 * a:
169 * a:
153 line 1 line 2
170 line 1 line 2
154 [1e4e1b8f71e0]
171 [1e4e1b8f71e0]
155
172
156 # keys work
173 # keys work
174 author: test
157 author: User Name <user@hostname>
175 author: User Name <user@hostname>
158 author: person
176 author: person
159 author: person
177 author: person
160 author: person
178 author: person
161 author: person
179 author: person
162 author: other@place
180 author: other@place
163 author: A. N. Other <other@place>
181 author: A. N. Other <other@place>
164 author: User Name <user@hostname>
182 author: User Name <user@hostname>
183 author--verbose: test
165 author--verbose: User Name <user@hostname>
184 author--verbose: User Name <user@hostname>
166 author--verbose: person
185 author--verbose: person
167 author--verbose: person
186 author--verbose: person
168 author--verbose: person
187 author--verbose: person
169 author--verbose: person
188 author--verbose: person
170 author--verbose: other@place
189 author--verbose: other@place
171 author--verbose: A. N. Other <other@place>
190 author--verbose: A. N. Other <other@place>
172 author--verbose: User Name <user@hostname>
191 author--verbose: User Name <user@hostname>
192 author--debug: test
173 author--debug: User Name <user@hostname>
193 author--debug: User Name <user@hostname>
174 author--debug: person
194 author--debug: person
175 author--debug: person
195 author--debug: person
176 author--debug: person
196 author--debug: person
177 author--debug: person
197 author--debug: person
178 author--debug: other@place
198 author--debug: other@place
179 author--debug: A. N. Other <other@place>
199 author--debug: A. N. Other <other@place>
180 author--debug: User Name <user@hostname>
200 author--debug: User Name <user@hostname>
181 branches:
201 branches:
182 branches:
202 branches:
183 branches:
203 branches:
204 branches:
184 branches: foo
205 branches: foo
185 branches:
206 branches:
186 branches:
207 branches:
187 branches:
208 branches:
188 branches:
209 branches:
189 branches--verbose:
210 branches--verbose:
190 branches--verbose:
211 branches--verbose:
191 branches--verbose:
212 branches--verbose:
213 branches--verbose:
192 branches--verbose: foo
214 branches--verbose: foo
193 branches--verbose:
215 branches--verbose:
194 branches--verbose:
216 branches--verbose:
195 branches--verbose:
217 branches--verbose:
196 branches--verbose:
218 branches--verbose:
197 branches--debug:
219 branches--debug:
198 branches--debug:
220 branches--debug:
199 branches--debug:
221 branches--debug:
222 branches--debug:
200 branches--debug: foo
223 branches--debug: foo
201 branches--debug:
224 branches--debug:
202 branches--debug:
225 branches--debug:
203 branches--debug:
226 branches--debug:
204 branches--debug:
227 branches--debug:
228 date: 1577872860.00
205 date: 1000000.00
229 date: 1000000.00
206 date: 1500001.00
230 date: 1500001.00
207 date: 1500000.00
231 date: 1500000.00
208 date: 1400000.00
232 date: 1400000.00
209 date: 1300000.00
233 date: 1300000.00
210 date: 1200000.00
234 date: 1200000.00
211 date: 1100000.00
235 date: 1100000.00
212 date: 1000000.00
236 date: 1000000.00
237 date--verbose: 1577872860.00
213 date--verbose: 1000000.00
238 date--verbose: 1000000.00
214 date--verbose: 1500001.00
239 date--verbose: 1500001.00
215 date--verbose: 1500000.00
240 date--verbose: 1500000.00
216 date--verbose: 1400000.00
241 date--verbose: 1400000.00
217 date--verbose: 1300000.00
242 date--verbose: 1300000.00
218 date--verbose: 1200000.00
243 date--verbose: 1200000.00
219 date--verbose: 1100000.00
244 date--verbose: 1100000.00
220 date--verbose: 1000000.00
245 date--verbose: 1000000.00
246 date--debug: 1577872860.00
221 date--debug: 1000000.00
247 date--debug: 1000000.00
222 date--debug: 1500001.00
248 date--debug: 1500001.00
223 date--debug: 1500000.00
249 date--debug: 1500000.00
224 date--debug: 1400000.00
250 date--debug: 1400000.00
225 date--debug: 1300000.00
251 date--debug: 1300000.00
226 date--debug: 1200000.00
252 date--debug: 1200000.00
227 date--debug: 1100000.00
253 date--debug: 1100000.00
228 date--debug: 1000000.00
254 date--debug: 1000000.00
255 desc: third
229 desc: second
256 desc: second
230 desc: merge
257 desc: merge
231 desc: new head
258 desc: new head
232 desc: new branch
259 desc: new branch
233 desc: no user, no domain
260 desc: no user, no domain
234 desc: no person
261 desc: no person
235 desc: other 1
262 desc: other 1
236 other 2
263 other 2
237
264
238 other 3
265 other 3
239 desc: line 1
266 desc: line 1
240 line 2
267 line 2
268 desc--verbose: third
241 desc--verbose: second
269 desc--verbose: second
242 desc--verbose: merge
270 desc--verbose: merge
243 desc--verbose: new head
271 desc--verbose: new head
244 desc--verbose: new branch
272 desc--verbose: new branch
245 desc--verbose: no user, no domain
273 desc--verbose: no user, no domain
246 desc--verbose: no person
274 desc--verbose: no person
247 desc--verbose: other 1
275 desc--verbose: other 1
248 other 2
276 other 2
249
277
250 other 3
278 other 3
251 desc--verbose: line 1
279 desc--verbose: line 1
252 line 2
280 line 2
281 desc--debug: third
253 desc--debug: second
282 desc--debug: second
254 desc--debug: merge
283 desc--debug: merge
255 desc--debug: new head
284 desc--debug: new head
256 desc--debug: new branch
285 desc--debug: new branch
257 desc--debug: no user, no domain
286 desc--debug: no user, no domain
258 desc--debug: no person
287 desc--debug: no person
259 desc--debug: other 1
288 desc--debug: other 1
260 other 2
289 other 2
261
290
262 other 3
291 other 3
263 desc--debug: line 1
292 desc--debug: line 1
264 line 2
293 line 2
294 file_adds: third
265 file_adds: second
295 file_adds: second
266 file_adds:
296 file_adds:
267 file_adds: d
297 file_adds: d
268 file_adds:
298 file_adds:
269 file_adds:
299 file_adds:
270 file_adds: c
300 file_adds: c
271 file_adds: b
301 file_adds: b
272 file_adds: a
302 file_adds: a
303 file_adds--verbose: third
273 file_adds--verbose: second
304 file_adds--verbose: second
274 file_adds--verbose:
305 file_adds--verbose:
275 file_adds--verbose: d
306 file_adds--verbose: d
276 file_adds--verbose:
307 file_adds--verbose:
277 file_adds--verbose:
308 file_adds--verbose:
278 file_adds--verbose: c
309 file_adds--verbose: c
279 file_adds--verbose: b
310 file_adds--verbose: b
280 file_adds--verbose: a
311 file_adds--verbose: a
312 file_adds--debug: third
281 file_adds--debug: second
313 file_adds--debug: second
282 file_adds--debug:
314 file_adds--debug:
283 file_adds--debug: d
315 file_adds--debug: d
284 file_adds--debug:
316 file_adds--debug:
285 file_adds--debug:
317 file_adds--debug:
286 file_adds--debug: c
318 file_adds--debug: c
287 file_adds--debug: b
319 file_adds--debug: b
288 file_adds--debug: a
320 file_adds--debug: a
289 file_dels:
321 file_dels:
290 file_dels:
322 file_dels:
291 file_dels:
323 file_dels:
292 file_dels:
324 file_dels:
293 file_dels:
325 file_dels:
294 file_dels:
326 file_dels:
295 file_dels:
327 file_dels:
296 file_dels:
328 file_dels:
329 file_dels:
330 file_dels--verbose:
297 file_dels--verbose:
331 file_dels--verbose:
298 file_dels--verbose:
332 file_dels--verbose:
299 file_dels--verbose:
333 file_dels--verbose:
300 file_dels--verbose:
334 file_dels--verbose:
301 file_dels--verbose:
335 file_dels--verbose:
302 file_dels--verbose:
336 file_dels--verbose:
303 file_dels--verbose:
337 file_dels--verbose:
304 file_dels--verbose:
338 file_dels--verbose:
305 file_dels--debug:
339 file_dels--debug:
306 file_dels--debug:
340 file_dels--debug:
307 file_dels--debug:
341 file_dels--debug:
308 file_dels--debug:
342 file_dels--debug:
309 file_dels--debug:
343 file_dels--debug:
310 file_dels--debug:
344 file_dels--debug:
311 file_dels--debug:
345 file_dels--debug:
312 file_dels--debug:
346 file_dels--debug:
347 file_dels--debug:
348 file_mods:
313 file_mods:
349 file_mods:
314 file_mods:
350 file_mods:
315 file_mods:
351 file_mods:
316 file_mods:
352 file_mods:
317 file_mods: c
353 file_mods: c
318 file_mods:
354 file_mods:
319 file_mods:
355 file_mods:
320 file_mods:
356 file_mods:
321 file_mods--verbose:
357 file_mods--verbose:
322 file_mods--verbose:
358 file_mods--verbose:
323 file_mods--verbose:
359 file_mods--verbose:
324 file_mods--verbose:
360 file_mods--verbose:
361 file_mods--verbose:
325 file_mods--verbose: c
362 file_mods--verbose: c
326 file_mods--verbose:
363 file_mods--verbose:
327 file_mods--verbose:
364 file_mods--verbose:
328 file_mods--verbose:
365 file_mods--verbose:
329 file_mods--debug:
366 file_mods--debug:
330 file_mods--debug:
367 file_mods--debug:
331 file_mods--debug:
368 file_mods--debug:
332 file_mods--debug:
369 file_mods--debug:
370 file_mods--debug:
333 file_mods--debug: c
371 file_mods--debug: c
334 file_mods--debug:
372 file_mods--debug:
335 file_mods--debug:
373 file_mods--debug:
336 file_mods--debug:
374 file_mods--debug:
375 files: third
337 files: second
376 files: second
338 files:
377 files:
339 files: d
378 files: d
340 files:
379 files:
341 files: c
380 files: c
342 files: c
381 files: c
343 files: b
382 files: b
344 files: a
383 files: a
384 files--verbose: third
345 files--verbose: second
385 files--verbose: second
346 files--verbose:
386 files--verbose:
347 files--verbose: d
387 files--verbose: d
348 files--verbose:
388 files--verbose:
349 files--verbose: c
389 files--verbose: c
350 files--verbose: c
390 files--verbose: c
351 files--verbose: b
391 files--verbose: b
352 files--verbose: a
392 files--verbose: a
393 files--debug: third
353 files--debug: second
394 files--debug: second
354 files--debug:
395 files--debug:
355 files--debug: d
396 files--debug: d
356 files--debug:
397 files--debug:
357 files--debug: c
398 files--debug: c
358 files--debug: c
399 files--debug: c
359 files--debug: b
400 files--debug: b
360 files--debug: a
401 files--debug: a
402 manifest: 8:8a0d8faab8b2
361 manifest: 7:f2dbc354b94e
403 manifest: 7:f2dbc354b94e
362 manifest: 6:91015e9dbdd7
404 manifest: 6:91015e9dbdd7
363 manifest: 5:4dc3def4f9b4
405 manifest: 5:4dc3def4f9b4
364 manifest: 4:90ae8dda64e1
406 manifest: 4:90ae8dda64e1
365 manifest: 3:cb5a1327723b
407 manifest: 3:cb5a1327723b
366 manifest: 2:6e0e82995c35
408 manifest: 2:6e0e82995c35
367 manifest: 1:4e8d705b1e53
409 manifest: 1:4e8d705b1e53
368 manifest: 0:a0c8bcbbb45c
410 manifest: 0:a0c8bcbbb45c
411 manifest--verbose: 8:8a0d8faab8b2
369 manifest--verbose: 7:f2dbc354b94e
412 manifest--verbose: 7:f2dbc354b94e
370 manifest--verbose: 6:91015e9dbdd7
413 manifest--verbose: 6:91015e9dbdd7
371 manifest--verbose: 5:4dc3def4f9b4
414 manifest--verbose: 5:4dc3def4f9b4
372 manifest--verbose: 4:90ae8dda64e1
415 manifest--verbose: 4:90ae8dda64e1
373 manifest--verbose: 3:cb5a1327723b
416 manifest--verbose: 3:cb5a1327723b
374 manifest--verbose: 2:6e0e82995c35
417 manifest--verbose: 2:6e0e82995c35
375 manifest--verbose: 1:4e8d705b1e53
418 manifest--verbose: 1:4e8d705b1e53
376 manifest--verbose: 0:a0c8bcbbb45c
419 manifest--verbose: 0:a0c8bcbbb45c
420 manifest--debug: 8:8a0d8faab8b2eee97dcfccabbcb18f413c9d097b
377 manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
421 manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
378 manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
422 manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
379 manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
423 manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
380 manifest--debug: 4:90ae8dda64e1a876c792bccb9af66284f6018363
424 manifest--debug: 4:90ae8dda64e1a876c792bccb9af66284f6018363
381 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
425 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
382 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
426 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
383 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
427 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
384 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
428 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
429 node: 946e2bd9c565394777d74d9669045b39e856e3ea
385 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
430 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
386 node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
431 node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
387 node: 13207e5a10d9fd28ec424934298e176197f2c67f
432 node: 13207e5a10d9fd28ec424934298e176197f2c67f
388 node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
433 node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
389 node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
434 node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
390 node: 97054abb4ab824450e9164180baf491ae0078465
435 node: 97054abb4ab824450e9164180baf491ae0078465
391 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
436 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
392 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
437 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
438 node--verbose: 946e2bd9c565394777d74d9669045b39e856e3ea
393 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
439 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
394 node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
440 node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
395 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
441 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
396 node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
442 node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
397 node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
443 node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
398 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
444 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
399 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
445 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
400 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
446 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
447 node--debug: 946e2bd9c565394777d74d9669045b39e856e3ea
401 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
448 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
402 node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
449 node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
403 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
450 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
404 node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
451 node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
405 node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
452 node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
406 node--debug: 97054abb4ab824450e9164180baf491ae0078465
453 node--debug: 97054abb4ab824450e9164180baf491ae0078465
407 node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
454 node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
408 node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
455 node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
456 parents:
409 parents: -1:000000000000
457 parents: -1:000000000000
410 parents: 5:13207e5a10d9 4:32a18f097fcc
458 parents: 5:13207e5a10d9 4:32a18f097fcc
411 parents: 3:10e46f2dcbf4
459 parents: 3:10e46f2dcbf4
412 parents:
460 parents:
413 parents:
461 parents:
414 parents:
462 parents:
415 parents:
463 parents:
416 parents:
464 parents:
465 parents--verbose:
417 parents--verbose: -1:000000000000
466 parents--verbose: -1:000000000000
418 parents--verbose: 5:13207e5a10d9 4:32a18f097fcc
467 parents--verbose: 5:13207e5a10d9 4:32a18f097fcc
419 parents--verbose: 3:10e46f2dcbf4
468 parents--verbose: 3:10e46f2dcbf4
420 parents--verbose:
469 parents--verbose:
421 parents--verbose:
470 parents--verbose:
422 parents--verbose:
471 parents--verbose:
423 parents--verbose:
472 parents--verbose:
424 parents--verbose:
473 parents--verbose:
474 parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
425 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
475 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
426 parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:32a18f097fcccf76ef282f62f8a85b3adf8d13c4
476 parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:32a18f097fcccf76ef282f62f8a85b3adf8d13c4
427 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
477 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
428 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
478 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
429 parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
479 parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
430 parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
480 parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
431 parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
481 parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
432 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
482 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
483 rev: 8
433 rev: 7
484 rev: 7
434 rev: 6
485 rev: 6
435 rev: 5
486 rev: 5
436 rev: 4
487 rev: 4
437 rev: 3
488 rev: 3
438 rev: 2
489 rev: 2
439 rev: 1
490 rev: 1
440 rev: 0
491 rev: 0
492 rev--verbose: 8
441 rev--verbose: 7
493 rev--verbose: 7
442 rev--verbose: 6
494 rev--verbose: 6
443 rev--verbose: 5
495 rev--verbose: 5
444 rev--verbose: 4
496 rev--verbose: 4
445 rev--verbose: 3
497 rev--verbose: 3
446 rev--verbose: 2
498 rev--verbose: 2
447 rev--verbose: 1
499 rev--verbose: 1
448 rev--verbose: 0
500 rev--verbose: 0
501 rev--debug: 8
449 rev--debug: 7
502 rev--debug: 7
450 rev--debug: 6
503 rev--debug: 6
451 rev--debug: 5
504 rev--debug: 5
452 rev--debug: 4
505 rev--debug: 4
453 rev--debug: 3
506 rev--debug: 3
454 rev--debug: 2
507 rev--debug: 2
455 rev--debug: 1
508 rev--debug: 1
456 rev--debug: 0
509 rev--debug: 0
457 tags: tip
510 tags: tip
458 tags:
511 tags:
459 tags:
512 tags:
460 tags:
513 tags:
461 tags:
514 tags:
462 tags:
515 tags:
463 tags:
516 tags:
464 tags:
517 tags:
518 tags:
465 tags--verbose: tip
519 tags--verbose: tip
466 tags--verbose:
520 tags--verbose:
467 tags--verbose:
521 tags--verbose:
468 tags--verbose:
522 tags--verbose:
469 tags--verbose:
523 tags--verbose:
470 tags--verbose:
524 tags--verbose:
471 tags--verbose:
525 tags--verbose:
472 tags--verbose:
526 tags--verbose:
527 tags--verbose:
473 tags--debug: tip
528 tags--debug: tip
474 tags--debug:
529 tags--debug:
475 tags--debug:
530 tags--debug:
476 tags--debug:
531 tags--debug:
477 tags--debug:
532 tags--debug:
478 tags--debug:
533 tags--debug:
479 tags--debug:
534 tags--debug:
480 tags--debug:
535 tags--debug:
536 tags--debug:
481 # filters work
537 # filters work
538
482 hostname
539 hostname
483
540
484
541
485
542
486
543
487 place
544 place
488 place
545 place
489 hostname
546 hostname
547 test
490 User Name
548 User Name
491 person
549 person
492 person
550 person
493 person
551 person
494 person
552 person
495 other
553 other
496 A. N. Other
554 A. N. Other
497 User Name
555 User Name
556 test
498 user
557 user
499 person
558 person
500 person
559 person
501 person
560 person
502 person
561 person
503 other
562 other
504 other
563 other
505 user
564 user
565 in the future
566 Wed Jan 01 10:01:00 2020 +0000
506 Mon Jan 12 13:46:40 1970 +0000
567 Mon Jan 12 13:46:40 1970 +0000
507 Sun Jan 18 08:40:01 1970 +0000
568 Sun Jan 18 08:40:01 1970 +0000
508 Sun Jan 18 08:40:00 1970 +0000
569 Sun Jan 18 08:40:00 1970 +0000
509 Sat Jan 17 04:53:20 1970 +0000
570 Sat Jan 17 04:53:20 1970 +0000
510 Fri Jan 16 01:06:40 1970 +0000
571 Fri Jan 16 01:06:40 1970 +0000
511 Wed Jan 14 21:20:00 1970 +0000
572 Wed Jan 14 21:20:00 1970 +0000
512 Tue Jan 13 17:33:20 1970 +0000
573 Tue Jan 13 17:33:20 1970 +0000
513 Mon Jan 12 13:46:40 1970 +0000
574 Mon Jan 12 13:46:40 1970 +0000
575 2020-01-01 10:01 +0000
514 1970-01-12 13:46 +0000
576 1970-01-12 13:46 +0000
515 1970-01-18 08:40 +0000
577 1970-01-18 08:40 +0000
516 1970-01-18 08:40 +0000
578 1970-01-18 08:40 +0000
517 1970-01-17 04:53 +0000
579 1970-01-17 04:53 +0000
518 1970-01-16 01:06 +0000
580 1970-01-16 01:06 +0000
519 1970-01-14 21:20 +0000
581 1970-01-14 21:20 +0000
520 1970-01-13 17:33 +0000
582 1970-01-13 17:33 +0000
521 1970-01-12 13:46 +0000
583 1970-01-12 13:46 +0000
584 2020-01-01 10:01:00 +0000
522 1970-01-12 13:46:40 +0000
585 1970-01-12 13:46:40 +0000
523 1970-01-18 08:40:01 +0000
586 1970-01-18 08:40:01 +0000
524 1970-01-18 08:40:00 +0000
587 1970-01-18 08:40:00 +0000
525 1970-01-17 04:53:20 +0000
588 1970-01-17 04:53:20 +0000
526 1970-01-16 01:06:40 +0000
589 1970-01-16 01:06:40 +0000
527 1970-01-14 21:20:00 +0000
590 1970-01-14 21:20:00 +0000
528 1970-01-13 17:33:20 +0000
591 1970-01-13 17:33:20 +0000
529 1970-01-12 13:46:40 +0000
592 1970-01-12 13:46:40 +0000
593 Wed, 01 Jan 2020 10:01:00 +0000
530 Mon, 12 Jan 1970 13:46:40 +0000
594 Mon, 12 Jan 1970 13:46:40 +0000
531 Sun, 18 Jan 1970 08:40:01 +0000
595 Sun, 18 Jan 1970 08:40:01 +0000
532 Sun, 18 Jan 1970 08:40:00 +0000
596 Sun, 18 Jan 1970 08:40:00 +0000
533 Sat, 17 Jan 1970 04:53:20 +0000
597 Sat, 17 Jan 1970 04:53:20 +0000
534 Fri, 16 Jan 1970 01:06:40 +0000
598 Fri, 16 Jan 1970 01:06:40 +0000
535 Wed, 14 Jan 1970 21:20:00 +0000
599 Wed, 14 Jan 1970 21:20:00 +0000
536 Tue, 13 Jan 1970 17:33:20 +0000
600 Tue, 13 Jan 1970 17:33:20 +0000
537 Mon, 12 Jan 1970 13:46:40 +0000
601 Mon, 12 Jan 1970 13:46:40 +0000
602 third
538 second
603 second
539 merge
604 merge
540 new head
605 new head
541 new branch
606 new branch
542 no user, no domain
607 no user, no domain
543 no person
608 no person
544 other 1
609 other 1
545 line 1
610 line 1
611 946e2bd9c565
546 29114dbae42b
612 29114dbae42b
547 c7b487c6c50e
613 c7b487c6c50e
548 13207e5a10d9
614 13207e5a10d9
549 32a18f097fcc
615 32a18f097fcc
550 10e46f2dcbf4
616 10e46f2dcbf4
551 97054abb4ab8
617 97054abb4ab8
552 b608e9d1a3f0
618 b608e9d1a3f0
553 1e4e1b8f71e0
619 1e4e1b8f71e0
620 <changeset author="test"/>
554 <changeset author="User Name &lt;user@hostname&gt;"/>
621 <changeset author="User Name &lt;user@hostname&gt;"/>
555 <changeset author="person"/>
622 <changeset author="person"/>
556 <changeset author="person"/>
623 <changeset author="person"/>
557 <changeset author="person"/>
624 <changeset author="person"/>
558 <changeset author="person"/>
625 <changeset author="person"/>
559 <changeset author="other@place"/>
626 <changeset author="other@place"/>
560 <changeset author="A. N. Other &lt;other@place&gt;"/>
627 <changeset author="A. N. Other &lt;other@place&gt;"/>
561 <changeset author="User Name &lt;user@hostname&gt;"/>
628 <changeset author="User Name &lt;user@hostname&gt;"/>
562 # formatnode filter works
629 # formatnode filter works
563 # quiet
630 # quiet
564 1e4e1b8f71e0
631 1e4e1b8f71e0
565 # normal
632 # normal
566 1e4e1b8f71e0
633 1e4e1b8f71e0
567 # verbose
634 # verbose
568 1e4e1b8f71e0
635 1e4e1b8f71e0
569 # debug
636 # debug
570 1e4e1b8f71e05681d422154f5421e385fec3454f
637 1e4e1b8f71e05681d422154f5421e385fec3454f
571 # error on syntax
638 # error on syntax
572 abort: t:3: unmatched quotes
639 abort: t:3: unmatched quotes
573 # done
640 # done
General Comments 0
You need to be logged in to leave comments. Login now