annotate tests/test-import-context.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 f2719b387380
children 75be14993fda
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12825
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
1 Test applying context diffs
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
2
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
3 $ cat > writepatterns.py <<EOF
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
4 > import sys
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
5 >
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
6 > path = sys.argv[1]
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
7 > lasteol = sys.argv[2] == '1'
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
8 > patterns = sys.argv[3:]
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
9 >
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
10 > fp = file(path, 'wb')
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
11 > for i, pattern in enumerate(patterns):
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
12 > count = int(pattern[0:-1])
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
13 > char = pattern[-1] + '\n'
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
14 > if not lasteol and i == len(patterns) - 1:
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
15 > fp.write((char*count)[:-1])
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
16 > else:
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
17 > fp.write(char*count)
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
18 > fp.close()
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
19 > EOF
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
20 $ cat > cat.py <<EOF
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
21 > import sys
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
22 > sys.stdout.write(repr(file(sys.argv[1], 'rb').read()) + '\n')
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
23 > EOF
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
24
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
25 Initialize the test repository
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
26
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
27 $ hg init repo
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
28 $ cd repo
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
29 $ python ../writepatterns.py a 0 5A 1B 5C 1D
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
30 $ python ../writepatterns.py b 1 1A 1B
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
31 $ python ../writepatterns.py c 1 5A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
32 $ python ../writepatterns.py d 1 5A 1B
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
33 $ hg add
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
34 adding a
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
35 adding b
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
36 adding c
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
37 adding d
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
38 $ hg ci -m addfiles
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
39
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
40 Add file, missing a last end of line
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
41
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
42 $ hg import --no-commit - <<EOF
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
43 > *** /dev/null 2010-10-16 18:05:49.000000000 +0200
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
44 > --- b/newnoeol 2010-10-16 18:23:26.000000000 +0200
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
45 > ***************
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
46 > *** 0 ****
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
47 > --- 1,2 ----
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
48 > + a
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
49 > + b
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
50 > \ No newline at end of file
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
51 > *** a/a Sat Oct 16 16:35:51 2010
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
52 > --- b/a Sat Oct 16 16:35:51 2010
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
53 > ***************
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
54 > *** 3,12 ****
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
55 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
56 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
57 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
58 > ! B
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
59 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
60 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
61 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
62 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
63 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
64 > ! D
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
65 > \ No newline at end of file
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
66 > --- 3,13 ----
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
67 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
68 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
69 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
70 > ! E
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
71 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
72 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
73 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
74 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
75 > C
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
76 > ! F
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
77 > ! F
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
78 >
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
79 > *** a/b 2010-10-16 18:40:38.000000000 +0200
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
80 > --- /dev/null 2010-10-16 18:05:49.000000000 +0200
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
81 > ***************
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
82 > *** 1,2 ****
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
83 > - A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
84 > - B
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
85 > --- 0 ----
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
86 > *** a/c Sat Oct 16 21:34:26 2010
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
87 > --- b/c Sat Oct 16 21:34:27 2010
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
88 > ***************
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
89 > *** 3,5 ****
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
90 > --- 3,7 ----
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
91 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
92 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
93 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
94 > + B
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
95 > + B
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
96 > *** a/d Sat Oct 16 21:47:20 2010
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
97 > --- b/d Sat Oct 16 21:47:22 2010
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
98 > ***************
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
99 > *** 2,6 ****
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
100 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
101 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
102 > A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
103 > - A
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
104 > - B
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
105 > --- 2,4 ----
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
106 > EOF
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
107 applying patch from stdin
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
108 $ hg st
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
109 M a
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
110 M c
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
111 M d
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
112 A newnoeol
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
113 R b
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
114
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
115 What's in a
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
116
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
117 $ python ../cat.py a
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
118 'A\nA\nA\nA\nA\nE\nC\nC\nC\nC\nC\nF\nF\n'
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
119 $ python ../cat.py newnoeol
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
120 'a\nb'
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
121 $ python ../cat.py c
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
122 'A\nA\nA\nA\nA\nB\nB\n'
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
123 $ python ../cat.py d
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
124 'A\nA\nA\nA\n'
61f48581d8ef Test applying context diffs
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
125
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 12825
diff changeset
126 $ cd ..