annotate tests/test-hgwebdirsym.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 7a9cbb315d84
children 4d2b9b304ad0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 17017
diff changeset
1 #require serve symlink
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
2
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 17017
diff changeset
3 Tests whether or not hgwebdir properly handles various symlink topologies.
17015
73d20de5f30b tests: add missing no-outer-repo requirements
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
4
73d20de5f30b tests: add missing no-outer-repo requirements
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
5 hide outer repo
73d20de5f30b tests: add missing no-outer-repo requirements
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
6 $ hg init
73d20de5f30b tests: add missing no-outer-repo requirements
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
7
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
8 $ hg init a
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
9 $ echo a > a/a
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
10 $ hg --cwd a ci -Ama -d'1 0'
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
11 adding a
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
12 $ mkdir webdir
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
13 $ cd webdir
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
14 $ hg init b
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
15 $ echo b > b/b
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
16 $ hg --cwd b ci -Amb -d'2 0'
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
17 adding b
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
18 $ hg init c
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
19 $ echo c > c/c
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
20 $ hg --cwd c ci -Amc -d'3 0'
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
21 adding c
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
22 $ ln -s ../a al
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
23 $ ln -s ../webdir circle
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
24 $ root=`pwd`
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
25 $ cd ..
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
26 $ cat > collections.conf <<EOF
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
27 > [collections]
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
28 > $root=$root
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
29 > EOF
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
30 $ hg serve -p $HGPORT -d --pid-file=hg.pid --webdir-conf collections.conf \
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
31 > -A access-collections.log -E error-collections.log
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
32 $ cat hg.pid >> $DAEMON_PIDS
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
33
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
34 should succeed
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
35
17017
953faba28e91 tests: prepare get-with-headers.py for MSYS
Mads Kiilerich <mads@kiilerich.com>
parents: 17015
diff changeset
36 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '?style=raw'
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
37 200 Script output follows
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
38
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
39
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
40 /al/
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
41 /b/
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
42 /c/
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
43
17017
953faba28e91 tests: prepare get-with-headers.py for MSYS
Mads Kiilerich <mads@kiilerich.com>
parents: 17015
diff changeset
44 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'al/file/tip/a?style=raw'
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
45 200 Script output follows
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
46
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
47 a
17017
953faba28e91 tests: prepare get-with-headers.py for MSYS
Mads Kiilerich <mads@kiilerich.com>
parents: 17015
diff changeset
48 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'b/file/tip/b?style=raw'
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
49 200 Script output follows
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
50
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
51 b
17017
953faba28e91 tests: prepare get-with-headers.py for MSYS
Mads Kiilerich <mads@kiilerich.com>
parents: 17015
diff changeset
52 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'c/file/tip/c?style=raw'
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
53 200 Script output follows
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
54
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
55 c
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
56
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
57 should fail
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
58
17017
953faba28e91 tests: prepare get-with-headers.py for MSYS
Mads Kiilerich <mads@kiilerich.com>
parents: 17015
diff changeset
59 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'circle/al/file/tip/a?style=raw'
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
60 404 Not Found
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
61
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
62
13066
86888ae9ce90 hgwebdir: fix incorrect index generation for invalid paths (issue2023)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12444
diff changeset
63 error: repository circle/al/file/tip/a not found
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
64 [1]
17017
953faba28e91 tests: prepare get-with-headers.py for MSYS
Mads Kiilerich <mads@kiilerich.com>
parents: 17015
diff changeset
65 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'circle/b/file/tip/a?style=raw'
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
66 404 Not Found
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
67
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
68
13066
86888ae9ce90 hgwebdir: fix incorrect index generation for invalid paths (issue2023)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12444
diff changeset
69 error: repository circle/b/file/tip/a not found
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
70 [1]
17017
953faba28e91 tests: prepare get-with-headers.py for MSYS
Mads Kiilerich <mads@kiilerich.com>
parents: 17015
diff changeset
71 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'circle/c/file/tip/a?style=raw'
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
72 404 Not Found
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
73
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
74
13066
86888ae9ce90 hgwebdir: fix incorrect index generation for invalid paths (issue2023)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12444
diff changeset
75 error: repository circle/c/file/tip/a not found
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
76 [1]
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
77
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
78 collections errors
6341
63bdfcc3eaaf test: Add tests for webdir symlinks and walkrepos.
Eric Hopper <hopper@omnifarious.org>
parents:
diff changeset
79
12444
a4c19a900794 tests: unify test-hgwebdirsym
Matt Mackall <mpm@selenic.com>
parents: 6341
diff changeset
80 $ cat error-collections.log