mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 17:27:53 +03:00
1137cc5743
Summary: It's super-useful to know the difference between "Accepted (You need to go and click the land button)" and "Accepted (We're just waiting for the land system to do its thing, no work for you right now)" Alternative approach in D8074898 Reviewed By: mitrandir77 Differential Revision: D8074794 fbshipit-source-id: fdfda64e3a542518b8609e3a415d8cb3156373cf
130 lines
4.4 KiB
Perl
130 lines
4.4 KiB
Perl
Setup
|
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> arcconfig=$TESTDIR/../hgext/extlib/phabricator/arcconfig.py
|
|
> phabstatus=
|
|
> smartlog=
|
|
> EOF
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ touch foo
|
|
$ hg ci -qAm 'Differential Revision: https://phabricator.fb.com/D1'
|
|
|
|
With an invalid arc configuration
|
|
|
|
$ hg log -T '{phabstatus}\n' -r .
|
|
arcconfig configuration problem. No diff information can be provided.
|
|
Error info: no .arcconfig found
|
|
Error
|
|
|
|
Configure arc...
|
|
|
|
$ echo '{}' > .arcrc
|
|
$ echo '{"config" : {"default" : "https://a.com/api"}, "hosts" : {"https://a.com/api/" : { "user" : "testuser", "cert" : "garbage_cert"}}}' > .arcconfig
|
|
|
|
And now with bad responses:
|
|
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg log -T '{phabstatus}\n' -r .
|
|
Error talking to phabricator. No diff information can be provided.
|
|
Error info: Unexpected graphql response format
|
|
Error
|
|
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{"errors": [{"message": "failed, yo"}]}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg log -T '{phabstatus}\n' -r .
|
|
Error talking to phabricator. No diff information can be provided.
|
|
Error info: failed, yo
|
|
Error
|
|
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{"data": {"query": [{"results": {"nodes": null}}]}}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg log -T '{phabstatus}\n' -r .
|
|
Error talking to phabricator. No diff information can be provided.
|
|
Error info: Unexpected graphql response format
|
|
Error
|
|
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{"data": {"query": [{"results": null}]}}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg log -T '{phabstatus}\n' -r .
|
|
Error talking to phabricator. No diff information can be provided.
|
|
Error info: Unexpected graphql response format
|
|
Error
|
|
|
|
Missing status field is treated as an error
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{"data": {"query": [{"results": {"nodes": [
|
|
> {"number": 1, "created_time": 0, "updated_time": 2}
|
|
> ]}}]}}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg log -T '{phabstatus}\n' -r .
|
|
Error talking to phabricator. No diff information can be provided.
|
|
Error info: Unexpected graphql response format
|
|
Error
|
|
|
|
If the diff is landing, show "Landing" in place of the status name
|
|
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{"data": {"query": [{"results": {"nodes": [
|
|
> {"number": 1, "diff_status_name": "Accepted",
|
|
> "created_time": 0, "updated_time": 2, "is_landing": true}
|
|
> ]}}]}}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg log -T '{phabstatus}\n' -r .
|
|
Landing
|
|
|
|
And finally, the success case
|
|
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{"data": {"query": [{"results": {"nodes": [
|
|
> {"number": 1, "diff_status_name": "Needs Review",
|
|
> "created_time": 0, "updated_time": 2, "is_landing": false}
|
|
> ]}}]}}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg log -T '{phabstatus}\n' -r .
|
|
Needs Review
|
|
|
|
Make sure the code works without the smartlog extensions
|
|
|
|
$ cat > $TESTTMP/mockduit << EOF
|
|
> [{"data": {"query": [{"results": {"nodes": [
|
|
> {"number": 1, "diff_status_name": "Needs Review",
|
|
> "created_time": 0, "updated_time": 2, "is_landing": false}
|
|
> ]}}]}}]
|
|
> EOF
|
|
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg --config 'extensions.smartlog=!' log -T '{phabstatus}\n' -r .
|
|
Needs Review
|
|
|
|
Make sure the template keywords are documented correctly
|
|
|
|
$ hg help templates | egrep 'phabstatus|syncstatus'
|
|
phabstatus String. Return the diff approval status for a given hg rev
|
|
syncstatus String. Return whether the local revision is in sync with
|
|
|
|
Make sure we get decent error messages when .arcrc is missing credential
|
|
information. We intentionally do not use HG_ARC_CONDUIT_MOCK for this test,
|
|
so it tries to parse the (empty) arc config files.
|
|
|
|
$ echo '{}' > .arcrc
|
|
$ echo '{}' > .arcconfig
|
|
$ hg log -T '{phabstatus}\n' -r .
|
|
arcconfig configuration problem. No diff information can be provided.
|
|
Error info: arcrc is missing user credentials for host None. use "arc install-certificate" to fix.
|
|
Error
|
|
|
|
Make sure we get an error message if .arcrc is not proper JSON (for example
|
|
due to trailing commas). We do not use HG_ARC_CONDUIT_MOCK for this test,
|
|
in order for it to parse the badly formatted arc config file.
|
|
|
|
$ echo '{,}' > ../.arcrc
|
|
$ hg log -T '{phabstatus}\n' -r .
|
|
arcconfig configuration problem. No diff information can be provided.
|
|
Error info: Configuration file $TESTTMP/.arcrc is not a proper JSON file.
|
|
Error
|