Mercurial > hg
annotate tests/test-install.t @ 24545:9e0c67e84896
json: implement {tags} template
Tags is pretty easy to implement. Let's start there.
The output is slightly different from `hg tags -Tjson`. For reference,
the CLI has the following output:
[
{
"node": "e2049974f9a23176c2addb61d8f5b86e0d620490",
"rev": 29880,
"tag": "tip",
"type": ""
},
...
]
Our output has the format:
{
"node": "0aeb19ea57a6d223bacddda3871cb78f24b06510",
"tags": [
{
"node": "e2049974f9a23176c2addb61d8f5b86e0d620490",
"tag": "tag1",
"date": [1427775457.0, 25200]
},
...
]
}
"rev" is omitted because it isn't a reliable identifier. We shouldn't
be exposing them in web APIs and giving the impression it remotely
resembles a stable identifier. Perhaps we could one day hide this behind
a config option (it might be useful to expose when running servers
locally).
The "type" of the tag isn't defined because this information isn't yet
exposed to the hgweb templater (it could be in a follow-up) and because
it is questionable whether different types should be exposed at all.
(Should the web interface really be exposing "local" tags?)
We use an object for the outer type instead of Array for a few reasons.
First, it is extensible. If we ever need to throw more global properties
into the output, we can do that without breaking backwards compatibility
(property additions should be backwards compatible). Second, uniformity
in web APIs is nice. Having everything return objects seems much saner than
a mix of array and object. Third, there are security issues with arrays
in older browsers. The JSON web services world almost never uses arrays
as the main type for this reason.
Another possibly controversial part about this patch is how dates are
defined. While JSON has a Date type, it is based on the JavaScript Date
type, which is widely considered a pile of garbage. It is a non-starter
for this reason.
Many of Mercurial's built-in date filters drop seconds resolution. So
that's a non-starter as well, since we want the API to be lossless where
possible. rfc3339date, rfc822date, isodatesec, and date are all lossless.
However, they each require the client to perform string parsing on top of
JSON decoding. While date parsing libraries are pretty ubiquitous, some
languages don't have them out of the box. However, pretty much every
programming language can deal with UNIX timestamps (which are just
integers or floats). So, we choose to use Mercurial's internal date
representation, which in JSON is modeled as float seconds since UNIX
epoch and an integer timezone offset from UTC (keep in mind
JavaScript/JSON models all "Numbers" as double prevision floating point
numbers, so there isn't a difference between ints and floats in JSON).
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 31 Mar 2015 14:52:21 -0700 |
parents | f1dfef0a9352 |
children | be4915009b09 |
rev | line source |
---|---|
4365
46280c004f22
change tests to use simplemerge by default
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3846
diff
changeset
|
1 hg debuginstall |
11917
b03cf2349a80
tests: unify test-install
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
9734
diff
changeset
|
2 $ hg debuginstall |
16934
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
3 checking encoding (ascii)... |
20741
f1dfef0a9352
debuginstall: change showing to checking for consistency and future checking
Matt Mackall <mpm@selenic.com>
parents:
20740
diff
changeset
|
4 checking Python executable (*) (glob) |
f1dfef0a9352
debuginstall: change showing to checking for consistency and future checking
Matt Mackall <mpm@selenic.com>
parents:
20740
diff
changeset
|
5 checking Python version (2.*) (glob) |
17392
bdd248666dbc
debuginstall: show directory for Python lib
Adrian Buehlmann <adrian@cadifra.com>
parents:
16934
diff
changeset
|
6 checking Python lib (*lib*)... (glob) |
16934
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
7 checking installed modules (*mercurial)... (glob) |
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
8 checking templates (*mercurial?templates)... (glob) |
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
9 checking commit editor... |
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
10 checking username... |
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
11 no problems detected |
9734
36c388a1aa51
commands: call ui.username carefully in debuginstall
Martin Geisler <mg@lazybytes.net>
parents:
4365
diff
changeset
|
12 |
11917
b03cf2349a80
tests: unify test-install
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
9734
diff
changeset
|
13 hg debuginstall with no username |
b03cf2349a80
tests: unify test-install
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
9734
diff
changeset
|
14 $ HGUSER= hg debuginstall |
16934
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
15 checking encoding (ascii)... |
20741
f1dfef0a9352
debuginstall: change showing to checking for consistency and future checking
Matt Mackall <mpm@selenic.com>
parents:
20740
diff
changeset
|
16 checking Python executable (*) (glob) |
f1dfef0a9352
debuginstall: change showing to checking for consistency and future checking
Matt Mackall <mpm@selenic.com>
parents:
20740
diff
changeset
|
17 checking Python version (2.*) (glob) |
17392
bdd248666dbc
debuginstall: show directory for Python lib
Adrian Buehlmann <adrian@cadifra.com>
parents:
16934
diff
changeset
|
18 checking Python lib (*lib*)... (glob) |
16934
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
19 checking installed modules (*mercurial)... (glob) |
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
20 checking templates (*mercurial?templates)... (glob) |
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
21 checking commit editor... |
0c9c41e53f1a
debuginstall: lowercase status messages
Martin Geisler <mg@aragost.com>
parents:
15447
diff
changeset
|
22 checking username... |
20574
5614f8cf0861
ui: suggest config --edit when no username is set
Matt Mackall <mpm@selenic.com>
parents:
17392
diff
changeset
|
23 no username supplied |
12084 | 24 (specify a username in your configuration file) |
11917
b03cf2349a80
tests: unify test-install
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
9734
diff
changeset
|
25 1 problems detected, please check your install! |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
12084
diff
changeset
|
26 [1] |