# HG changeset patch # User Yuya Nishihara # Date 1546158717 -32400 # Node ID 46e0563c67dbe8b693c07ea93420b41c6d1a5947 # Parent 517a51d9cd7fa88c12eb952391192ef6b079c855# Parent f4113489e4d493ffb0aa6c3c58454dc7e3b82e83 merge with stable diff -r 517a51d9cd7f -r 46e0563c67db hgext/phabricator.py --- a/hgext/phabricator.py Thu Dec 27 15:19:46 2018 -0800 +++ b/hgext/phabricator.py Sun Dec 30 17:31:57 2018 +0900 @@ -155,6 +155,8 @@ """ flatparams = util.sortdict() def process(prefix, obj): + if isinstance(obj, bool): + obj = {True: b'true', False: b'false'}[obj] # Python -> PHP form items = {list: enumerate, dict: lambda x: x.items()}.get(type(obj)) if items is None: flatparams[prefix] = obj diff -r 517a51d9cd7f -r 46e0563c67db mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c Thu Dec 27 15:19:46 2018 -0800 +++ b/mercurial/cext/revlog.c Sun Dec 30 17:31:57 2018 +0900 @@ -967,6 +967,7 @@ static inline int index_baserev(indexObject *self, int rev) { const char *data; + int result; if (rev >= self->length) { PyObject *tuple = @@ -975,15 +976,23 @@ if (!pylong_to_long(PyTuple_GET_ITEM(tuple, 3), &ret)) { return -2; } - return (int)ret; + result = (int)ret; } else { data = index_deref(self, rev); if (data == NULL) { return -2; } - return getbe32(data + 16); + result = getbe32(data + 16); } + if (result > rev) { + PyErr_Format( + PyExc_ValueError, + "corrupted revlog, revision base above revision: %d, %d", + rev, result); + return -2; + } + return result; } static PyObject *index_deltachain(indexObject *self, PyObject *args) diff -r 517a51d9cd7f -r 46e0563c67db tests/phabricator/phab-conduit.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/phabricator/phab-conduit.json Sun Dec 30 17:31:57 2018 +0900 @@ -0,0 +1,73 @@ +{ + "interactions": [ + { + "response": { + "status": { + "message": "OK", + "code": 200 + }, + "headers": { + "content-type": [ + "application/json" + ], + "date": [ + "Fri, 21 Dec 2018 22:19:11 GMT" + ], + "x-content-type-options": [ + "nosniff" + ], + "cache-control": [ + "no-store" + ], + "strict-transport-security": [ + "max-age=0; includeSubdomains; preload" + ], + "x-frame-options": [ + "Deny" + ], + "set-cookie": [ + "phsid=A%2Fdv22bpksbdis3vfeksluagfslhfojblbnkro7we4; expires=Wed, 20-Dec-2023 22:19:11 GMT; Max-Age=157680000; path=/; domain=phab.mercurial-scm.org; secure; httponly" + ], + "x-xss-protection": [ + "1; mode=block" + ], + "expires": [ + "Sat, 01 Jan 2000 00:00:00 GMT" + ], + "transfer-encoding": [ + "chunked" + ], + "server": [ + "Apache/2.4.10 (Debian)" + ] + }, + "body": { + "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}" + } + }, + "request": { + "method": "POST", + "headers": { + "accept": [ + "application/mercurial-0.1" + ], + "content-type": [ + "application/x-www-form-urlencoded" + ], + "content-length": [ + "70" + ], + "host": [ + "phab.mercurial-scm.org" + ], + "user-agent": [ + "mercurial/proto-1.0 (Mercurial 4.8.1+564-6f483b107eb5+20181221)" + ] + }, + "uri": "https://phab.mercurial-scm.org//api/user.search", + "body": "constraints%5BisBot%5D=true&api.token=cli-hahayouwish" + } + } + ], + "version": 1 +} \ No newline at end of file diff -r 517a51d9cd7f -r 46e0563c67db tests/test-phabricator.t --- a/tests/test-phabricator.t Thu Dec 27 15:19:46 2018 -0800 +++ b/tests/test-phabricator.t Sun Dec 30 17:31:57 2018 +0900 @@ -65,6 +65,27 @@ D4597 - created - 1a5640df7bbf: create beta for phabricator test saved backup bundle to $TESTTMP/repo/.hg/strip-backup/1a5640df7bbf-6daf3e6e-phabsend.hg + $ hg debugcallconduit user.search --test-vcr "$VCR/phab-conduit.json" < { + > "constraints": { + > "isBot": true + > } + > } + > EOF + { + "cursor": { + "after": null, + "before": null, + "limit": 100, + "order": null + }, + "data": [], + "maps": {}, + "query": { + "queryKey": null + } + } + Template keywords $ hg log -T'{rev} {phabreview|json}\n' 1 {"id": "D4597", "url": "https://phab.mercurial-scm.org/D4597"}