{"action":"created","comment":{"url":"https://api.github.com/repos/Azure/azure-cli/pulls/comments/89391274","pull_request_review_id":9937261,"id":89391274,"diff_hunk":"@@ -321,6 +321,99 @@ def validate_select(namespace):\n \n # region COMMAND VALIDATORS\n \n+\n+def process_download_batch_parameters(namespace):\n+    \"\"\"Process the parameters for storage blob download command\"\"\"\n+    from azure.cli.command_modules.storage.storage_url_helpers import parse_url\n+\n+    # 1. quick check\n+    if namespace.destination is None:\n+        raise ValueError('Destination parameter is missing.')\n+\n+    if namespace.source is None:\n+        raise ValueError('Source parameter is missing.')\n+\n+    if not os.path.exists(namespace.destination) or not os.path.isdir(namespace.destination):\n+        raise ValueError('Destination folder {} does not exist'.format(namespace.source))\n+\n+    # 2. try to extract account name and container name from source string\n+    storage_desc = parse_url(namespace.source)\n+\n+    if storage_desc.blob is not None:\n+        raise ValueError('incorrect usage: --source should be either container URL or name')\n+\n+    if namespace.account_name is None:\n+        namespace.account_name = storage_desc.account\n+\n+    namespace.source_container_name = storage_desc.container\n+\n+\n+def process_upload_batch_parameters(namespace):\n+    \"\"\"Process the source and destination of storage blob upload command\"\"\"\n+    from azure.cli.command_modules.storage.storage_url_helpers import parse_url\n+\n+    # 1. quick check\n+    if namespace.destination is None:\n+        raise ValueError('incorrect usage: --destination is missing.')\n+\n+    if namespace.source is None:\n+        raise ValueError('incorrect usage: --source is missing.')\n+\n+    if not os.path.exists(namespace.source):\n+        raise ValueError('incorrect usage: source {} does not exist'.format(namespace.source))\n+\n+    if not os.path.isdir(namespace.source):\n+        raise ValueError('incorrect usage: source must be a directory')\n+\n+    # 2. try to extract account name and container name from destination string\n+    storage_desc = parse_url(namespace.destination)\n+\n+    if storage_desc.blob is not None:\n+        raise ValueError('incorrect usage: destination cannot be a blob url')\n+\n+    namespace.destination_container_name = storage_desc.container\n+\n+    if not namespace.account_name:\n+        namespace.account_name = storage_desc.account\n+\n+    # 3. collect the files to be uploaded\n+    namespace.source = os.path.realpath(namespace.source)\n+\n+    if namespace.pattern:\n+        from fnmatch import fnmatch\n+        pattern = os.path.join(namespace.source, namespace.pattern.lstrip('/'))\n+\n+        def _file_selector(file_path):\n+            return fnmatch(file_path, pattern)\n+    else:\n+        def _file_selector(_):\n+            return True\n+\n+    source_files = []\n+\n+    from os import walk\n+    for root, _, files in walk(namespace.source):\n+        #pylint: disable=bad-builtin\n+        filtered = filter(_file_selector, (os.path.join(root, f) for f in files))\n+        source_files += [(path, path[len(namespace.source) + 1:]) for path in filtered]\n+\n+    namespace.source_files = source_files\n+\n+    if namespace.blob_type is None:\n+        vhd_files = [f for f in source_files if f[0].endswith('.vhd')]\n+        if any(vhd_files) and len(vhd_files) == len(source_files):\n+            # when all the listed files are vhd files use page\n+            namespace.blob_type = 'page'\n+        elif any(vhd_files):\n+            # source files contain vhd files but not all of them\n+            raise ValueError('''Fail to guess the required blob type. Type of the files to be\n+            uploaded are not consistent. Default blob type for .vhd files is \"page\", while\n+            others are \"block\". You can solve this problem by either explicitly set the blob\n+            type or ensure the pattern matches a correct set of files.''')\n+        else:\n+            namespace.blob_type = 'block'","path":"src/command_modules/azure-cli-storage/azure/cli/command_modules/storage/_validators.py","position":91,"original_position":94,"commit_id":"2c01a1441ade3a1564518ab944ce328e142dcc7c","original_commit_id":"b3753503a8aeca5e4fc280807b436be147e4fa8e","user":{"login":"troydai","id":1329240,"avatar_url":"https://avatars.githubusercontent.com/u/1329240?v=3","gravatar_id":"","url":"https://api.github.com/users/troydai","html_url":"https://github.com/troydai","followers_url":"https://api.github.com/users/troydai/followers","following_url":"https://api.github.com/users/troydai/following{/other_user}","gists_url":"https://api.github.com/users/troydai/gists{/gist_id}","starred_url":"https://api.github.com/users/troydai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/troydai/subscriptions","organizations_url":"https://api.github.com/users/troydai/orgs","repos_url":"https://api.github.com/users/troydai/repos","events_url":"https://api.github.com/users/troydai/events{/privacy}","received_events_url":"https://api.github.com/users/troydai/received_events","type":"User","site_admin":false},"body":"https://github.com/Azure/azure-cli/issues/1436","created_at":"2016-11-23T20:08:36Z","updated_at":"2016-11-23T20:08:37Z","html_url":"https://github.com/Azure/azure-cli/pull/1428#discussion_r89391274","pull_request_url":"https://api.github.com/repos/Azure/azure-cli/pulls/1428","_links":{"self":{"href":"https://api.github.com/repos/Azure/azure-cli/pulls/comments/89391274"},"html":{"href":"https://github.com/Azure/azure-cli/pull/1428#discussion_r89391274"},"pull_request":{"href":"https://api.github.com/repos/Azure/azure-cli/pulls/1428"}}},"pull_request":{"url":"https://api.github.com/repos/Azure/azure-cli/pulls/1428","id":94964404,"html_url":"https://github.com/Azure/azure-cli/pull/1428","diff_url":"https://github.com/Azure/azure-cli/pull/1428.diff","patch_url":"https://github.com/Azure/azure-cli/pull/1428.patch","issue_url":"https://api.github.com/repos/Azure/azure-cli/issues/1428","number":1428,"state":"open","locked":false,"title":"Introduce batch upload and download for blob","user":{"login":"troydai","id":1329240,"avatar_url":"https://avatars.githubusercontent.com/u/1329240?v=3","gravatar_id":"","url":"https://api.github.com/users/troydai","html_url":"https://github.com/troydai","followers_url":"https://api.github.com/users/troydai/followers","following_url":"https://api.github.com/users/troydai/following{/other_user}","gists_url":"https://api.github.com/users/troydai/gists{/gist_id}","starred_url":"https://api.github.com/users/troydai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/troydai/subscriptions","organizations_url":"https://api.github.com/users/troydai/orgs","repos_url":"https://api.github.com/users/troydai/repos","events_url":"https://api.github.com/users/troydai/events{/privacy}","received_events_url":"https://api.github.com/users/troydai/received_events","type":"User","site_admin":false},"body":"Resolve issue https://github.com/Azure/azure-cli/issues/1432\r\n\r\n```\r\n10:21 $ az storage blob upload-batch -h\r\n\r\nCommand\r\n    az storage blob upload-batch: Upload files to storage container as blobs.\r\n\r\nArguments\r\n    --destination -d [Required]: The string represents the destination of this upload operation. The\r\n                                 source can be the container URL or the container name. When the\r\n                                 source is the container URL, the storage account name will parsed\r\n                                 from the URL.\r\n    --source -s      [Required]: The directory where the files to be uploaded.\r\n    --dryrun                   : Show the summary of the operations to be taken instead of actually\r\n                                 upload the file(s).\r\n    --lease-id                 : Required if the blob has an active lease.\r\n    --metadata                 : Metadata in space-separated key=value pairs. This overwrites any\r\n                                 existing metadata.\r\n    --pattern                  : The pattern is used for files globing. The supported patterns are\r\n                                 '*', '?', '[seq]', and '[!seq]'.\r\n    --timeout                  : Request timeout in seconds. Applies to each call to the service.\r\n    --type -t                  : Defaults to 'page' for *.vhd files, or 'block' otherwise.  Allowed\r\n                                 values: append, block, page.\r\n\r\nContent Control Arguments\r\n    --content-cache-control    : The cache control string.\r\n    --content-disposition      : Conveys additional information about how to process the response\r\n                                 payload, and can also be used to attach additional metadata.\r\n    --content-encoding         : The content encoding type.\r\n    --content-language         : The content language.\r\n    --content-md5              : The content's MD5 hash.\r\n    --content-type             : The content MIME type.\r\n    --max-connections          : Default: 2.\r\n    --maxsize-condition        : The max length in bytes permitted for an append blob.\r\n    --validate-content         : Specifies that an MD5 hash shall be calculated for each chunk of\r\n                                 the blob and verified by the service when the chunk has arrived.\r\n\r\nPre-condition Arguments\r\n    --if-match                 : An ETag value, or the wildcard character (*). Specify this header\r\n                                 to perform the operation only if the resource's ETag matches the\r\n                                 value specified.\r\n    --if-modified-since        : Alter only if modified since supplied UTC datetime\r\n                                 (Y-m-d'T'H:M'Z').\r\n    --if-none-match            : An ETag value, or the wildcard character (*). Specify this header\r\n                                 to perform the operation only if the resource's ETag does not match\r\n                                 the value specified. Specify the wildcard character (*) to perform\r\n                                 the operation only if the resource does not exist, and fail the\r\n                                 operation if it does exist.\r\n    --if-unmodified-since      : Alter only if unmodified since supplied UTC datetime\r\n                                 (Y-m-d'T'H:M'Z').\r\n\r\nStorage Account Arguments\r\n    --account-key              : Storage account key. Must be used in conjunction with storage\r\n                                 account name. Environment variable: AZURE_STORAGE_KEY.\r\n    --account-name             : Storage account name. Must be used in conjunction with either\r\n                                 storage account key or a SAS token. Environment variable:\r\n                                 AZURE_STORAGE_ACCOUNT.\r\n    --connection-string        : Storage account connection string. Environment variable:\r\n                                 AZURE_STORAGE_CONNECTION_STRING.\r\n    --sas-token                : A Shared Access Signature (SAS). Must be used in conjunction with\r\n                                 storage account name. Environment variable:\r\n                                 AZURE_STORAGE_SAS_TOKEN.\r\n\r\nGlobal Arguments\r\n    --debug                    : Increase logging verbosity to show all debug logs.\r\n    --help -h                  : Show this help message and exit.\r\n    --output -o                : Output format.  Allowed values: json, jsonc, list, table, tsv.\r\n                                 Default: json.\r\n    --query                    : JMESPath query string. See http://jmespath.org/ for more\r\n                                 information and examples.\r\n    --verbose                  : Increase logging verbosity. Use --debug for full debug logs.\r\n```\r\n\r\n```\r\n10:15 $ az storage blob download-batch -h\r\n\r\nCommand\r\n    az storage blob download-batch: Download blobs in a container recursively.\r\n\r\nArguments\r\n    --destination -d [Required]: The string represents the destination folder of this download\r\n                                 operation. The folder must exist.\r\n    --source -s      [Required]: The string represents the source of this download operation. The\r\n                                 source can be the container URL or the container name. When the\r\n                                 source is the container URL, the storage account name will parsed\r\n                                 from the URL.\r\n    --pattern                  : The pattern is used for files globing. The supported patterns are\r\n                                 '*', '?', '[seq]', and '[!seq]'.\r\n\r\nStorage Account Arguments\r\n    --account-key              : Storage account key. Must be used in conjunction with storage\r\n                                 account name. Environment variable: AZURE_STORAGE_KEY.\r\n    --account-name             : Storage account name. Must be used in conjunction with either\r\n                                 storage account key or a SAS token. Environment variable:\r\n                                 AZURE_STORAGE_ACCOUNT.\r\n    --connection-string        : Storage account connection string. Environment variable:\r\n                                 AZURE_STORAGE_CONNECTION_STRING.\r\n    --sas-token                : A Shared Access Signature (SAS). Must be used in conjunction with\r\n                                 storage account name. Environment variable:\r\n                                 AZURE_STORAGE_SAS_TOKEN.\r\n\r\nGlobal Arguments\r\n    --debug                    : Increase logging verbosity to show all debug logs.\r\n    --help -h                  : Show this help message and exit.\r\n    --output -o                : Output format.  Allowed values: json, jsonc, list, table, tsv.\r\n                                 Default: json.\r\n    --query                    : JMESPath query string. See http://jmespath.org/ for more\r\n                                 information and examples.\r\n    --verbose                  : Increase logging verbosity. Use --debug for full debug logs.\r\n```","created_at":"2016-11-23T09:02:12Z","updated_at":"2016-11-23T20:08:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b34f2d4a36bd7d0336498cc1b0f2f3ce8321d4a5","assignee":{"login":"tjprescott","id":5723682,"avatar_url":"https://avatars.githubusercontent.com/u/5723682?v=3","gravatar_id":"","url":"https://api.github.com/users/tjprescott","html_url":"https://github.com/tjprescott","followers_url":"https://api.github.com/users/tjprescott/followers","following_url":"https://api.github.com/users/tjprescott/following{/other_user}","gists_url":"https://api.github.com/users/tjprescott/gists{/gist_id}","starred_url":"https://api.github.com/users/tjprescott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tjprescott/subscriptions","organizations_url":"https://api.github.com/users/tjprescott/orgs","repos_url":"https://api.github.com/users/tjprescott/repos","events_url":"https://api.github.com/users/tjprescott/events{/privacy}","received_events_url":"https://api.github.com/users/tjprescott/received_events","type":"User","site_admin":false},"assignees":[{"login":"tjprescott","id":5723682,"avatar_url":"https://avatars.githubusercontent.com/u/5723682?v=3","gravatar_id":"","url":"https://api.github.com/users/tjprescott","html_url":"https://github.com/tjprescott","followers_url":"https://api.github.com/users/tjprescott/followers","following_url":"https://api.github.com/users/tjprescott/following{/other_user}","gists_url":"https://api.github.com/users/tjprescott/gists{/gist_id}","starred_url":"https://api.github.com/users/tjprescott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tjprescott/subscriptions","organizations_url":"https://api.github.com/users/tjprescott/orgs","repos_url":"https://api.github.com/users/tjprescott/repos","events_url":"https://api.github.com/users/tjprescott/events{/privacy}","received_events_url":"https://api.github.com/users/tjprescott/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Azure/azure-cli/pulls/1428/commits","review_comments_url":"https://api.github.com/repos/Azure/azure-cli/pulls/1428/comments","review_comment_url":"https://api.github.com/repos/Azure/azure-cli/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Azure/azure-cli/issues/1428/comments","statuses_url":"https://api.github.com/repos/Azure/azure-cli/statuses/2c01a1441ade3a1564518ab944ce328e142dcc7c","head":{"label":"troydai:azcopy4","ref":"azcopy4","sha":"2c01a1441ade3a1564518ab944ce328e142dcc7c","user":{"login":"troydai","id":1329240,"avatar_url":"https://avatars.githubusercontent.com/u/1329240?v=3","gravatar_id":"","url":"https://api.github.com/users/troydai","html_url":"https://github.com/troydai","followers_url":"https://api.github.com/users/troydai/followers","following_url":"https://api.github.com/users/troydai/following{/other_user}","gists_url":"https://api.github.com/users/troydai/gists{/gist_id}","starred_url":"https://api.github.com/users/troydai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/troydai/subscriptions","organizations_url":"https://api.github.com/users/troydai/orgs","repos_url":"https://api.github.com/users/troydai/repos","events_url":"https://api.github.com/users/troydai/events{/privacy}","received_events_url":"https://api.github.com/users/troydai/received_events","type":"User","site_admin":false},"repo":{"id":72557229,"name":"azure-cli","full_name":"troydai/azure-cli","owner":{"login":"troydai","id":1329240,"avatar_url":"https://avatars.githubusercontent.com/u/1329240?v=3","gravatar_id":"","url":"https://api.github.com/users/troydai","html_url":"https://github.com/troydai","followers_url":"https://api.github.com/users/troydai/followers","following_url":"https://api.github.com/users/troydai/following{/other_user}","gists_url":"https://api.github.com/users/troydai/gists{/gist_id}","starred_url":"https://api.github.com/users/troydai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/troydai/subscriptions","organizations_url":"https://api.github.com/users/troydai/orgs","repos_url":"https://api.github.com/users/troydai/repos","events_url":"https://api.github.com/users/troydai/events{/privacy}","received_events_url":"https://api.github.com/users/troydai/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/troydai/azure-cli","description":"Command-line tools for Azure.","fork":true,"url":"https://api.github.com/repos/troydai/azure-cli","forks_url":"https://api.github.com/repos/troydai/azure-cli/forks","keys_url":"https://api.github.com/repos/troydai/azure-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/troydai/azure-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/troydai/azure-cli/teams","hooks_url":"https://api.github.com/repos/troydai/azure-cli/hooks","issue_events_url":"https://api.github.com/repos/troydai/azure-cli/issues/events{/number}","events_url":"https://api.github.com/repos/troydai/azure-cli/events","assignees_url":"https://api.github.com/repos/troydai/azure-cli/assignees{/user}","branches_url":"https://api.github.com/repos/troydai/azure-cli/branches{/branch}","tags_url":"https://api.github.com/repos/troydai/azure-cli/tags","blobs_url":"https://api.github.com/repos/troydai/azure-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/troydai/azure-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/troydai/azure-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/troydai/azure-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/troydai/azure-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/troydai/azure-cli/languages","stargazers_url":"https://api.github.com/repos/troydai/azure-cli/stargazers","contributors_url":"https://api.github.com/repos/troydai/azure-cli/contributors","subscribers_url":"https://api.github.com/repos/troydai/azure-cli/subscribers","subscription_url":"https://api.github.com/repos/troydai/azure-cli/subscription","commits_url":"https://api.github.com/repos/troydai/azure-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/troydai/azure-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/troydai/azure-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/troydai/azure-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/troydai/azure-cli/contents/{+path}","compare_url":"https://api.github.com/repos/troydai/azure-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/troydai/azure-cli/merges","archive_url":"https://api.github.com/repos/troydai/azure-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/troydai/azure-cli/downloads","issues_url":"https://api.github.com/repos/troydai/azure-cli/issues{/number}","pulls_url":"https://api.github.com/repos/troydai/azure-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/troydai/azure-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/troydai/azure-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/troydai/azure-cli/labels{/name}","releases_url":"https://api.github.com/repos/troydai/azure-cli/releases{/id}","deployments_url":"https://api.github.com/repos/troydai/azure-cli/deployments","created_at":"2016-11-01T16:57:38Z","updated_at":"2016-11-01T16:57:42Z","pushed_at":"2016-11-23T20:03:40Z","git_url":"git://github.com/troydai/azure-cli.git","ssh_url":"git@github.com:troydai/azure-cli.git","clone_url":"https://github.com/troydai/azure-cli.git","svn_url":"https://github.com/troydai/azure-cli","homepage":null,"size":12592,"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":"master"}},"base":{"label":"Azure:master","ref":"master","sha":"4689982e2bc2328b9020a9fb1b0d99d118d31a3d","user":{"login":"Azure","id":6844498,"avatar_url":"https://avatars.githubusercontent.com/u/6844498?v=3","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"repo":{"id":51040886,"name":"azure-cli","full_name":"Azure/azure-cli","owner":{"login":"Azure","id":6844498,"avatar_url":"https://avatars.githubusercontent.com/u/6844498?v=3","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Azure/azure-cli","description":"Command-line tools for Azure.","fork":false,"url":"https://api.github.com/repos/Azure/azure-cli","forks_url":"https://api.github.com/repos/Azure/azure-cli/forks","keys_url":"https://api.github.com/repos/Azure/azure-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Azure/azure-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Azure/azure-cli/teams","hooks_url":"https://api.github.com/repos/Azure/azure-cli/hooks","issue_events_url":"https://api.github.com/repos/Azure/azure-cli/issues/events{/number}","events_url":"https://api.github.com/repos/Azure/azure-cli/events","assignees_url":"https://api.github.com/repos/Azure/azure-cli/assignees{/user}","branches_url":"https://api.github.com/repos/Azure/azure-cli/branches{/branch}","tags_url":"https://api.github.com/repos/Azure/azure-cli/tags","blobs_url":"https://api.github.com/repos/Azure/azure-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Azure/azure-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Azure/azure-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/Azure/azure-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Azure/azure-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/Azure/azure-cli/languages","stargazers_url":"https://api.github.com/repos/Azure/azure-cli/stargazers","contributors_url":"https://api.github.com/repos/Azure/azure-cli/contributors","subscribers_url":"https://api.github.com/repos/Azure/azure-cli/subscribers","subscription_url":"https://api.github.com/repos/Azure/azure-cli/subscription","commits_url":"https://api.github.com/repos/Azure/azure-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/Azure/azure-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/Azure/azure-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/Azure/azure-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/Azure/azure-cli/contents/{+path}","compare_url":"https://api.github.com/repos/Azure/azure-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Azure/azure-cli/merges","archive_url":"https://api.github.com/repos/Azure/azure-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Azure/azure-cli/downloads","issues_url":"https://api.github.com/repos/Azure/azure-cli/issues{/number}","pulls_url":"https://api.github.com/repos/Azure/azure-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/Azure/azure-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/Azure/azure-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Azure/azure-cli/labels{/name}","releases_url":"https://api.github.com/repos/Azure/azure-cli/releases{/id}","deployments_url":"https://api.github.com/repos/Azure/azure-cli/deployments","created_at":"2016-02-04T00:21:51Z","updated_at":"2016-11-19T02:23:23Z","pushed_at":"2016-11-23T20:03:41Z","git_url":"git://github.com/Azure/azure-cli.git","ssh_url":"git@github.com:Azure/azure-cli.git","clone_url":"https://github.com/Azure/azure-cli.git","svn_url":"https://github.com/Azure/azure-cli","homepage":null,"size":16768,"stargazers_count":207,"watchers_count":207,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":54,"mirror_url":null,"open_issues_count":259,"forks":54,"open_issues":259,"watchers":207,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Azure/azure-cli/pulls/1428"},"html":{"href":"https://github.com/Azure/azure-cli/pull/1428"},"issue":{"href":"https://api.github.com/repos/Azure/azure-cli/issues/1428"},"comments":{"href":"https://api.github.com/repos/Azure/azure-cli/issues/1428/comments"},"review_comments":{"href":"https://api.github.com/repos/Azure/azure-cli/pulls/1428/comments"},"review_comment":{"href":"https://api.github.com/repos/Azure/azure-cli/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Azure/azure-cli/pulls/1428/commits"},"statuses":{"href":"https://api.github.com/repos/Azure/azure-cli/statuses/2c01a1441ade3a1564518ab944ce328e142dcc7c"}}}}
{"actor":{"display_login":"troydai"}}