{"action":"created","comment":{"url":"https://api.github.com/repos/aws/aws-cli/pulls/comments/90059183","pull_request_review_id":10428167,"id":90059183,"diff_hunk":"@@ -0,0 +1,147 @@\n+# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n+#\n+# Licensed under the Apache License, Version 2.0 (the \"License\"). You\n+# may not use this file except in compliance with the License. A copy of\n+# the License is located at\n+#\n+#     http://aws.amazon.com/apache2.0/\n+#\n+# or in the \"license\" file accompanying this file. This file is\n+# distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n+# ANY KIND, either express or implied. See the License for the specific\n+# language governing permissions and limitations under the License.\n+import os\n+\n+from awscli.testutils import mock\n+from awscli.testutils import FileCreator\n+from awscli.testutils import BaseAWSCommandParamsTest\n+\n+\n+class TestAliases(BaseAWSCommandParamsTest):\n+    def setUp(self):\n+        super(TestAliases, self).setUp()\n+        self.files = FileCreator()\n+        self.alias_file = self.files.create_file('alias', '[toplevel]\\n')\n+\n+        # TODO: If an environment variable is ever exposed to\n+        # modify the alias file location, remove this patch\n+        # and use that environment variable because patching of specific\n+        # classes properties should be avoided for functional tests but\n+        # there is not really any other way to hook in...\n+        self.alias_file_location_patch = mock.patch(\n+            'awscli.alias.AliasLoader.ALIAS_FILENAME', self.alias_file)\n+        self.alias_file_location_patch.start()\n+\n+    def tearDown(self):\n+        super(TestAliases, self).tearDown()\n+        self.files.remove_all()\n+        self.alias_file_location_patch.stop()\n+\n+    def add_alias(self, alias_name, alias_value):\n+        with open(self.alias_file, 'a+') as f:\n+            f.write('%s = %s\\n' % (alias_name, alias_value))\n+\n+    def test_subcommand_alias(self):\n+        self.add_alias('my-alias', 'ec2 describe-regions')\n+        cmdline = 'my-alias'\n+        self.assert_params_for_cmd(cmdline, {})\n+        self.assertEqual(len(self.operations_called), 1)\n+        self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')\n+\n+    def test_subcommand_alias_with_additonal_params(self):\n+        self.add_alias(\n+            'my-alias', 'ec2 describe-regions --region-names us-east-1')\n+        cmdline = 'my-alias'\n+        self.assert_params_for_cmd(cmdline, {'RegionNames': ['us-east-1']})\n+        self.assertEqual(len(self.operations_called), 1)\n+        self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')\n+\n+    def test_subcommand_alias_then_additonal_params(self):\n+        self.add_alias('my-alias', 'ec2')\n+        cmdline = 'my-alias describe-regions --region-names us-east-1'\n+        self.assert_params_for_cmd(cmdline, {'RegionNames': ['us-east-1']})\n+        self.assertEqual(len(self.operations_called), 1)\n+        self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')\n+\n+    def test_subcommand_alias_with_global_params(self):\n+        self.add_alias(\n+            'my-alias',\n+            'ec2 describe-regions --query Regions[].RegionName --output text')\n+        self.parsed_responses = [\n+            {\n+                'Regions': [\n+                    {\n+                        'Endpoint': 'ec2.us-east-1.amazonaws.com',\n+                        'RegionName': 'us-east-1'\n+                    }\n+                ]\n+            }\n+        ]\n+        cmdline = 'my-alias'\n+        stdout, _, _ = self.assert_params_for_cmd(cmdline, {})\n+        self.assertEqual(len(self.operations_called), 1)\n+        self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')\n+        self.assertEqual(stdout.strip('\\n'), 'us-east-1')\n+\n+    def test_subcommand_alias_then_global_params(self):\n+        self.add_alias('my-alias', 'ec2 describe-regions')\n+        self.parsed_responses = [\n+            {\n+                'Regions': [\n+                    {\n+                        'Endpoint': 'ec2.us-east-1.amazonaws.com',\n+                        'RegionName': 'us-east-1'\n+                    }\n+                ]\n+            }\n+        ]\n+        cmdline = 'my-alias '\n+        cmdline += '--query=Regions[].RegionName '\n+        cmdline += '--output=text'\n+        stdout, _, _ = self.assert_params_for_cmd(cmdline, {})\n+        self.assertEqual(len(self.operations_called), 1)\n+        self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')\n+        self.assertEqual(stdout.strip('\\n'), 'us-east-1')\n+\n+    def test_global_params_then_subcommand_alias(self):\n+        self.add_alias('my-alias', 'ec2 describe-regions')\n+        self.parsed_responses = [\n+            {\n+                'Regions': [\n+                    {\n+                        'Endpoint': 'ec2.us-east-1.amazonaws.com',\n+                        'RegionName': 'us-east-1'\n+                    }\n+                ]\n+            }\n+        ]\n+        cmdline = '--query=Regions[].RegionName '\n+        cmdline += '--output=text '\n+        cmdline += 'my-alias'\n+        stdout, _, _ = self.assert_params_for_cmd(cmdline, {})\n+        self.assertEqual(len(self.operations_called), 1)\n+        self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')\n+        self.assertEqual(stdout.strip('\\n'), 'us-east-1')\n+\n+    def test_alias_overrides_builtin_command(self):\n+        self.add_alias('ec2', 's3api')\n+        cmdline = 'ec2 list-buckets'\n+        self.assert_params_for_cmd(cmdline, {})\n+        self.assertEqual(len(self.operations_called), 1)\n+        self.assertEqual(self.operations_called[0][0].name, 'ListBuckets')\n+\n+    def test_external_alias(self):\n+        # The external alias is tested by using mkdir; a command that\n+        # is universal for the various OS's we support\n+        directory_to_make = os.path.join(self.files.rootdir, 'newdir')\n+        self.add_alias('mkdir', '!mkdir %s' % directory_to_make)\n+        self.run_cmd('mkdir')\n+        self.assertTrue(os.path.isdir(directory_to_make))\n+\n+    def test_external_alias_then_additonal_args(self):\n+        # The external alias is tested by using mkdir; a command that\n+        # is universal for the various OS's we support\n+        directory_to_make = os.path.join(self.files.rootdir, 'newdir')\n+        self.add_alias('mkdir', '!mkdir')\n+        self.run_cmd('mkdir %s' % directory_to_make)\n+        self.assertTrue(os.path.isdir(directory_to_make))","path":"tests/functional/test_alias.py","position":147,"original_position":147,"commit_id":"a65953f3ede8df27dc3bcd5ed9acc921c546ec95","original_commit_id":"a65953f3ede8df27dc3bcd5ed9acc921c546ec95","user":{"login":"jamesls","id":368057,"avatar_url":"https://avatars.githubusercontent.com/u/368057?v=3","gravatar_id":"","url":"https://api.github.com/users/jamesls","html_url":"https://github.com/jamesls","followers_url":"https://api.github.com/users/jamesls/followers","following_url":"https://api.github.com/users/jamesls/following{/other_user}","gists_url":"https://api.github.com/users/jamesls/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesls/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesls/subscriptions","organizations_url":"https://api.github.com/users/jamesls/orgs","repos_url":"https://api.github.com/users/jamesls/repos","events_url":"https://api.github.com/users/jamesls/events{/privacy}","received_events_url":"https://api.github.com/users/jamesls/received_events","type":"User","site_admin":false},"body":"It would also be nice to have a posix specific test for the IIFE aliases (as they're one of the more powerful use cases for aliases so it would be good to verify they work).","created_at":"2016-11-29T17:22:12Z","updated_at":"2016-11-29T17:22:12Z","html_url":"https://github.com/aws/aws-cli/pull/2287#discussion_r90059183","pull_request_url":"https://api.github.com/repos/aws/aws-cli/pulls/2287","_links":{"self":{"href":"https://api.github.com/repos/aws/aws-cli/pulls/comments/90059183"},"html":{"href":"https://github.com/aws/aws-cli/pull/2287#discussion_r90059183"},"pull_request":{"href":"https://api.github.com/repos/aws/aws-cli/pulls/2287"}}},"pull_request":{"url":"https://api.github.com/repos/aws/aws-cli/pulls/2287","id":94414198,"html_url":"https://github.com/aws/aws-cli/pull/2287","diff_url":"https://github.com/aws/aws-cli/pull/2287.diff","patch_url":"https://github.com/aws/aws-cli/pull/2287.patch","issue_url":"https://api.github.com/repos/aws/aws-cli/issues/2287","number":2287,"state":"open","locked":false,"title":"Add support for aliases","user":{"login":"kyleknap","id":4605355,"avatar_url":"https://avatars.githubusercontent.com/u/4605355?v=3","gravatar_id":"","url":"https://api.github.com/users/kyleknap","html_url":"https://github.com/kyleknap","followers_url":"https://api.github.com/users/kyleknap/followers","following_url":"https://api.github.com/users/kyleknap/following{/other_user}","gists_url":"https://api.github.com/users/kyleknap/gists{/gist_id}","starred_url":"https://api.github.com/users/kyleknap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kyleknap/subscriptions","organizations_url":"https://api.github.com/users/kyleknap/orgs","repos_url":"https://api.github.com/users/kyleknap/repos","events_url":"https://api.github.com/users/kyleknap/events{/privacy}","received_events_url":"https://api.github.com/users/kyleknap/received_events","type":"User","site_admin":false},"body":"Important to note that the tests will not pass until this PR gets merged: https://github.com/boto/botocore/pull/1088\r\n\r\nThis pull request adds alias support to the CLI (like git aliases). To define an alias, you need an ``~/.aws/cli/alias`` file, which is an INI file that defines aliases and their values. Here is an example of an alias file:\r\n```\r\n[toplevel]\r\nmy-alias = ec2 describe-instances\r\n```\r\nWith this alias now, a user can type into the CLI:\r\n```\r\n$ aws my-alias\r\n```\r\nwhich will translate to running (from the same process):\r\n```\r\n$ aws ec2 describe-instances\r\n```\r\n\r\nExternal aliases can also be defined which let users leverage functionality from their shell. So if the alias file had the following definition:\r\n```\r\n[toplevel]\r\nls = !ls\r\n```\r\nSo if a user types the following into the CLI:\r\n```\r\n$ aws ls\r\n```\r\nit will translate to running (in a subprocess):\r\n```\r\n$ ls\r\n```\r\n\r\nPast these examples, here are some important features/limitations that should be noted:\r\n\r\n* The ``~/.aws/cli/alias`` file only has support for the ``[toplevel]`` section. Any other sections, will be ignored.\r\n* Aliases defined under the ``[toplevel]`` section will only be applied at the service command level.\r\n* Aliases can defined using multiple lines for readability:\r\n  ```\r\n  [toplevel]\r\n  my-alias = \r\n     ec2 describe-regions \\\r\n        --query Regions\r\n  ls =\r\n     f() {\r\n        ls .\r\n     }; f\r\n  ```\r\n* Global and operation-level parameters can be provided inside of the alias. However ``--debug`` and ``--profile`` are not supported as their value gets set higher up the CLI stack and affect many of the other global parameters. In the case that those parameters are provided, the CLI will throw an error.\r\n* Arguments entered past the alias will be appended to the expanded alias value.\r\n* For subcommand aliases (i.e. not prefixed with ``!``), they must reference a service command and that service command must exist.\r\n* Aliases are undocumented. So if you type ``help`` after a subcommand alias it will proxy to the command it it references.\r\n\r\nIt is also important to that this PR does not add support for:\r\n* Auto-completeing aliases\r\n* Commands for setting and getting aliases\r\n\r\nThose should come in subsequent pull requests.\r\n\r\ncc @jamesls @JordonPhillips @stealthycoin ","created_at":"2016-11-18T18:38:43Z","updated_at":"2016-11-29T17:24:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"70140fbb71dc35965297607692d845ae3085738a","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/aws/aws-cli/pulls/2287/commits","review_comments_url":"https://api.github.com/repos/aws/aws-cli/pulls/2287/comments","review_comment_url":"https://api.github.com/repos/aws/aws-cli/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aws/aws-cli/issues/2287/comments","statuses_url":"https://api.github.com/repos/aws/aws-cli/statuses/a65953f3ede8df27dc3bcd5ed9acc921c546ec95","head":{"label":"kyleknap:alias-v2","ref":"alias-v2","sha":"a65953f3ede8df27dc3bcd5ed9acc921c546ec95","user":{"login":"kyleknap","id":4605355,"avatar_url":"https://avatars.githubusercontent.com/u/4605355?v=3","gravatar_id":"","url":"https://api.github.com/users/kyleknap","html_url":"https://github.com/kyleknap","followers_url":"https://api.github.com/users/kyleknap/followers","following_url":"https://api.github.com/users/kyleknap/following{/other_user}","gists_url":"https://api.github.com/users/kyleknap/gists{/gist_id}","starred_url":"https://api.github.com/users/kyleknap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kyleknap/subscriptions","organizations_url":"https://api.github.com/users/kyleknap/orgs","repos_url":"https://api.github.com/users/kyleknap/repos","events_url":"https://api.github.com/users/kyleknap/events{/privacy}","received_events_url":"https://api.github.com/users/kyleknap/received_events","type":"User","site_admin":false},"repo":{"id":12092925,"name":"aws-cli","full_name":"kyleknap/aws-cli","owner":{"login":"kyleknap","id":4605355,"avatar_url":"https://avatars.githubusercontent.com/u/4605355?v=3","gravatar_id":"","url":"https://api.github.com/users/kyleknap","html_url":"https://github.com/kyleknap","followers_url":"https://api.github.com/users/kyleknap/followers","following_url":"https://api.github.com/users/kyleknap/following{/other_user}","gists_url":"https://api.github.com/users/kyleknap/gists{/gist_id}","starred_url":"https://api.github.com/users/kyleknap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kyleknap/subscriptions","organizations_url":"https://api.github.com/users/kyleknap/orgs","repos_url":"https://api.github.com/users/kyleknap/repos","events_url":"https://api.github.com/users/kyleknap/events{/privacy}","received_events_url":"https://api.github.com/users/kyleknap/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kyleknap/aws-cli","description":"Universal Command Line Interface for Amazon Web Services","fork":true,"url":"https://api.github.com/repos/kyleknap/aws-cli","forks_url":"https://api.github.com/repos/kyleknap/aws-cli/forks","keys_url":"https://api.github.com/repos/kyleknap/aws-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kyleknap/aws-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kyleknap/aws-cli/teams","hooks_url":"https://api.github.com/repos/kyleknap/aws-cli/hooks","issue_events_url":"https://api.github.com/repos/kyleknap/aws-cli/issues/events{/number}","events_url":"https://api.github.com/repos/kyleknap/aws-cli/events","assignees_url":"https://api.github.com/repos/kyleknap/aws-cli/assignees{/user}","branches_url":"https://api.github.com/repos/kyleknap/aws-cli/branches{/branch}","tags_url":"https://api.github.com/repos/kyleknap/aws-cli/tags","blobs_url":"https://api.github.com/repos/kyleknap/aws-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kyleknap/aws-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kyleknap/aws-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/kyleknap/aws-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kyleknap/aws-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/kyleknap/aws-cli/languages","stargazers_url":"https://api.github.com/repos/kyleknap/aws-cli/stargazers","contributors_url":"https://api.github.com/repos/kyleknap/aws-cli/contributors","subscribers_url":"https://api.github.com/repos/kyleknap/aws-cli/subscribers","subscription_url":"https://api.github.com/repos/kyleknap/aws-cli/subscription","commits_url":"https://api.github.com/repos/kyleknap/aws-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/kyleknap/aws-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/kyleknap/aws-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/kyleknap/aws-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/kyleknap/aws-cli/contents/{+path}","compare_url":"https://api.github.com/repos/kyleknap/aws-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kyleknap/aws-cli/merges","archive_url":"https://api.github.com/repos/kyleknap/aws-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kyleknap/aws-cli/downloads","issues_url":"https://api.github.com/repos/kyleknap/aws-cli/issues{/number}","pulls_url":"https://api.github.com/repos/kyleknap/aws-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/kyleknap/aws-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/kyleknap/aws-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kyleknap/aws-cli/labels{/name}","releases_url":"https://api.github.com/repos/kyleknap/aws-cli/releases{/id}","deployments_url":"https://api.github.com/repos/kyleknap/aws-cli/deployments","created_at":"2013-08-13T21:03:11Z","updated_at":"2014-07-28T21:42:02Z","pushed_at":"2016-11-28T22:56:41Z","git_url":"git://github.com/kyleknap/aws-cli.git","ssh_url":"git@github.com:kyleknap/aws-cli.git","clone_url":"https://github.com/kyleknap/aws-cli.git","svn_url":"https://github.com/kyleknap/aws-cli","homepage":null,"size":9343,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"aws:develop","ref":"develop","sha":"bce1b5c3b8f23576be823b77a99c43ea9b12709d","user":{"login":"aws","id":2232217,"avatar_url":"https://avatars.githubusercontent.com/u/2232217?v=3","gravatar_id":"","url":"https://api.github.com/users/aws","html_url":"https://github.com/aws","followers_url":"https://api.github.com/users/aws/followers","following_url":"https://api.github.com/users/aws/following{/other_user}","gists_url":"https://api.github.com/users/aws/gists{/gist_id}","starred_url":"https://api.github.com/users/aws/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aws/subscriptions","organizations_url":"https://api.github.com/users/aws/orgs","repos_url":"https://api.github.com/users/aws/repos","events_url":"https://api.github.com/users/aws/events{/privacy}","received_events_url":"https://api.github.com/users/aws/received_events","type":"Organization","site_admin":false},"repo":{"id":6780767,"name":"aws-cli","full_name":"aws/aws-cli","owner":{"login":"aws","id":2232217,"avatar_url":"https://avatars.githubusercontent.com/u/2232217?v=3","gravatar_id":"","url":"https://api.github.com/users/aws","html_url":"https://github.com/aws","followers_url":"https://api.github.com/users/aws/followers","following_url":"https://api.github.com/users/aws/following{/other_user}","gists_url":"https://api.github.com/users/aws/gists{/gist_id}","starred_url":"https://api.github.com/users/aws/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aws/subscriptions","organizations_url":"https://api.github.com/users/aws/orgs","repos_url":"https://api.github.com/users/aws/repos","events_url":"https://api.github.com/users/aws/events{/privacy}","received_events_url":"https://api.github.com/users/aws/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aws/aws-cli","description":"Universal Command Line Interface for Amazon Web Services","fork":false,"url":"https://api.github.com/repos/aws/aws-cli","forks_url":"https://api.github.com/repos/aws/aws-cli/forks","keys_url":"https://api.github.com/repos/aws/aws-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aws/aws-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aws/aws-cli/teams","hooks_url":"https://api.github.com/repos/aws/aws-cli/hooks","issue_events_url":"https://api.github.com/repos/aws/aws-cli/issues/events{/number}","events_url":"https://api.github.com/repos/aws/aws-cli/events","assignees_url":"https://api.github.com/repos/aws/aws-cli/assignees{/user}","branches_url":"https://api.github.com/repos/aws/aws-cli/branches{/branch}","tags_url":"https://api.github.com/repos/aws/aws-cli/tags","blobs_url":"https://api.github.com/repos/aws/aws-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aws/aws-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aws/aws-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/aws/aws-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aws/aws-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/aws/aws-cli/languages","stargazers_url":"https://api.github.com/repos/aws/aws-cli/stargazers","contributors_url":"https://api.github.com/repos/aws/aws-cli/contributors","subscribers_url":"https://api.github.com/repos/aws/aws-cli/subscribers","subscription_url":"https://api.github.com/repos/aws/aws-cli/subscription","commits_url":"https://api.github.com/repos/aws/aws-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/aws/aws-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/aws/aws-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/aws/aws-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/aws/aws-cli/contents/{+path}","compare_url":"https://api.github.com/repos/aws/aws-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aws/aws-cli/merges","archive_url":"https://api.github.com/repos/aws/aws-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aws/aws-cli/downloads","issues_url":"https://api.github.com/repos/aws/aws-cli/issues{/number}","pulls_url":"https://api.github.com/repos/aws/aws-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/aws/aws-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/aws/aws-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aws/aws-cli/labels{/name}","releases_url":"https://api.github.com/repos/aws/aws-cli/releases{/id}","deployments_url":"https://api.github.com/repos/aws/aws-cli/deployments","created_at":"2012-11-20T16:07:36Z","updated_at":"2016-11-29T10:10:21Z","pushed_at":"2016-11-28T22:56:42Z","git_url":"git://github.com/aws/aws-cli.git","ssh_url":"git@github.com:aws/aws-cli.git","clone_url":"https://github.com/aws/aws-cli.git","svn_url":"https://github.com/aws/aws-cli","homepage":null,"size":13497,"stargazers_count":4361,"watchers_count":4361,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":695,"mirror_url":null,"open_issues_count":192,"forks":695,"open_issues":192,"watchers":4361,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/aws/aws-cli/pulls/2287"},"html":{"href":"https://github.com/aws/aws-cli/pull/2287"},"issue":{"href":"https://api.github.com/repos/aws/aws-cli/issues/2287"},"comments":{"href":"https://api.github.com/repos/aws/aws-cli/issues/2287/comments"},"review_comments":{"href":"https://api.github.com/repos/aws/aws-cli/pulls/2287/comments"},"review_comment":{"href":"https://api.github.com/repos/aws/aws-cli/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aws/aws-cli/pulls/2287/commits"},"statuses":{"href":"https://api.github.com/repos/aws/aws-cli/statuses/a65953f3ede8df27dc3bcd5ed9acc921c546ec95"}}}}
{"actor":{"display_login":"jamesls"}}