{"action":"created","comment":{"url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/comments/167297515","pull_request_review_id":95504383,"id":167297515,"diff_hunk":"@@ -0,0 +1,222 @@\n+﻿// Copyright (c) .NET Foundation. All rights reserved.\n+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n+\n+using System;\n+using System.Collections.Generic;\n+using System.IO;\n+using System.Linq;\n+using System.Threading.Tasks;\n+using Autofac;\n+using Microsoft.Extensions.CommandLineUtils;\n+using NuGet.Packaging.Core;\n+using NuGet.Versioning;\n+using NuGetGallery;\n+\n+namespace GalleryTools.Commands\n+{\n+    public static class ReflowCommand\n+    {\n+        private const int DefaultBatch = 1;\n+        private const int DefaultSleepMultiplier = 60;\n+        private const string PackageListShortOption = \"-p\";\n+\n+        public static void Configure(CommandLineApplication config)\n+        {\n+            config.Description = \"Bulk reflow many packages\";\n+            config.HelpOption(\"-? | -h | --help\");\n+\n+            var packageListOption = config.Option(\n+                $\"{PackageListShortOption} | --path\",\n+                \"A path to a list of packages, one ID and version per line with a space in between.\",\n+                CommandOptionType.SingleValue);\n+\n+            var batchSizeOption = config.Option(\n+                \"-b | --batch\",\n+                $\"The number of packages to reflow in a batch (default: {DefaultBatch}).\",\n+                CommandOptionType.SingleValue);\n+\n+            var sleepDurationOption = config.Option(\n+                \"-s | --sleep\",\n+                $\"The duration in seconds to sleep between each batch (default: batch size * {DefaultSleepMultiplier}).\",\n+                CommandOptionType.SingleValue);\n+\n+            config.OnExecute(() =>\n+            {\n+                return ExecuteAsync(packageListOption, sleepDurationOption, batchSizeOption).GetAwaiter().GetResult();\n+            });\n+        }\n+\n+        private static async Task<int> ExecuteAsync(\n+            CommandOption packageListOption,\n+            CommandOption batchSizeOption,\n+            CommandOption sleepDurationOption)\n+        {\n+            if (!packageListOption.HasValue())\n+            {\n+                Console.WriteLine($\"The '{PackageListShortOption}' parameter is required.\");\n+                return 1;\n+            }\n+\n+            var batchSize = DefaultBatch;\n+            if (batchSizeOption.HasValue())\n+            {\n+                batchSize = int.Parse(batchSizeOption.Value());\n+\n+                if (batchSize <= 0)\n+                {\n+                    Console.WriteLine(\"The batch size must be greater than zero.\");\n+                }\n+            }\n+\n+            var sleepDuration = TimeSpan.FromSeconds(batchSize * DefaultSleepMultiplier);\n+            if (sleepDurationOption.HasValue())\n+            {\n+                sleepDuration = TimeSpan.FromSeconds(int.Parse(sleepDurationOption.Value()));\n+\n+                if (sleepDuration < TimeSpan.Zero)\n+                {\n+                    Console.WriteLine(\"The sleep duration but be zero or more seconds.\");\n+                    return 1;\n+                }\n+            }\n+\n+            var packageListPath = packageListOption.Value();\n+            var completedListPath = packageListPath + \".progress\";\n+            var remainingList = GetRemainingList(packageListPath, completedListPath);\n+            if (!remainingList.Any())\n+            {\n+                return 1;\n+            }\n+\n+            var builder = new ContainerBuilder();\n+            builder.RegisterType<ReflowPackageService>().AsSelf();\n+            builder.RegisterAssemblyModules(typeof(DefaultDependenciesModule).Assembly);\n+            var container = builder.Build();\n+            var reflowPackageService = container.Resolve<ReflowPackageService>();\n+\n+            var batchCounter = 0;\n+            var totalCounter = 0;\n+            for (var i = 0; i < remainingList.Count; i++)\n+            {\n+                var identity = remainingList[i];\n+                var version = identity.Version.ToNormalizedString();\n+                Console.Write($\"Reflowing {identity.Id} {version}...\");\n+                try\n+                {\n+                    var package = await reflowPackageService.ReflowAsync(identity.Id, version);\n+                    if (package != null)\n+                    {\n+                        Console.WriteLine(\" done.\");\n+                        AppendPackage(completedListPath, package.PackageRegistration.Id, package.NormalizedVersion);\n+                        batchCounter++;\n+                        totalCounter++;\n+                    }\n+                    else\n+                    {\n+                        Console.WriteLine($\" not found.\");\n+                    }\n+                }\n+                catch (Exception e)\n+                {\n+                    Console.WriteLine(\" error!\");\n+                    Console.WriteLine(e);\n+                }\n+\n+                if (batchCounter >= batchSize\n+                    && i < remainingList.Count - 1\n+                    && sleepDuration > TimeSpan.Zero)\n+                {\n+                    Console.WriteLine($\"Completed a batch. Sleeping for {sleepDuration}.\");\n+                    await Task.Delay(sleepDuration);\n+                    batchCounter = 0;\n+                }\n+            }\n+\n+            Console.WriteLine($\"All done. Reflowed {totalCounter} package(s).\");\n+\n+            return 0;\n+        }\n+\n+        private static List<PackageIdentity> GetRemainingList(string packageListPath, string completedListPath)\n+        {\n+            Console.WriteLine($\"Reading packages from {packageListPath}...\");\n+            var packageList = ReadPackageList(packageListPath);\n+\n+            var completedList = new List<PackageIdentity>();\n+            if (File.Exists(completedListPath))\n+            {\n+                Console.WriteLine($\"Reading completed packages from {completedListPath}...\");\n+                completedList.AddRange(ReadPackageList(completedListPath));\n+            }\n+\n+            var remainingList = packageList.Except(completedList).ToList();\n+            Console.WriteLine($\"{remainingList.Count} package(s) to reflow.\");\n+\n+            return remainingList;\n+        }\n+\n+        private static void AppendPackage(string completedListPath, string id, string version)\n+        {\n+            using (var fileStream = new FileStream(completedListPath, FileMode.Append, FileAccess.Write))\n+            using (var writer = new StreamWriter(fileStream))\n+            {\n+                writer.WriteLine($\"{id} {version}\");\n+            }\n+        }\n+\n+        private static List<PackageIdentity> ReadPackageList(string path)\n+        {\n+            var uniquePackageIdentities = new HashSet<PackageIdentity>();\n+            var output = new List<PackageIdentity>();\n+            int lineNumber = 0;\n+            string line;\n+            using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))\n+            using (var reader = new StreamReader(fileStream))\n+            {\n+                while ((line = reader.ReadLine()) != null)\n+                {\n+                    lineNumber++;\n+\n+                    if (string.IsNullOrWhiteSpace(line))\n+                    {\n+                        continue;\n+                    }\n+\n+                    var pieces = line.Split(new[] { ' ' }, 2);\n+                    if (pieces.Length != 2)\n+                    {\n+                        Console.WriteLine($\"Line {lineNumber}: Ignoring line without a space separator.\");","path":"src/GalleryTools/Commands/ReflowCommand.cs","position":188,"original_position":188,"commit_id":"5c22d8acfadca29b7d221a3ac7b3e8185452415c","original_commit_id":"5c22d8acfadca29b7d221a3ac7b3e8185452415c","user":{"login":"joelverhagen","id":94054,"avatar_url":"https://avatars0.githubusercontent.com/u/94054?v=4","gravatar_id":"","url":"https://api.github.com/users/joelverhagen","html_url":"https://github.com/joelverhagen","followers_url":"https://api.github.com/users/joelverhagen/followers","following_url":"https://api.github.com/users/joelverhagen/following{/other_user}","gists_url":"https://api.github.com/users/joelverhagen/gists{/gist_id}","starred_url":"https://api.github.com/users/joelverhagen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joelverhagen/subscriptions","organizations_url":"https://api.github.com/users/joelverhagen/orgs","repos_url":"https://api.github.com/users/joelverhagen/repos","events_url":"https://api.github.com/users/joelverhagen/events{/privacy}","received_events_url":"https://api.github.com/users/joelverhagen/received_events","type":"User","site_admin":false},"body":"I don't understand. The second parameter of `Split` means an array of length 1 or 2 will be returned.","created_at":"2018-02-09T17:44:52Z","updated_at":"2018-02-09T17:44:52Z","html_url":"https://github.com/NuGet/NuGetGallery/pull/5425#discussion_r167297515","pull_request_url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/comments/167297515"},"html":{"href":"https://github.com/NuGet/NuGetGallery/pull/5425#discussion_r167297515"},"pull_request":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425"}},"in_reply_to_id":167297225},"pull_request":{"url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425","id":168270671,"html_url":"https://github.com/NuGet/NuGetGallery/pull/5425","diff_url":"https://github.com/NuGet/NuGetGallery/pull/5425.diff","patch_url":"https://github.com/NuGet/NuGetGallery/pull/5425.patch","issue_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues/5425","number":5425,"state":"open","locked":false,"title":"Add tool to bulk reflow packages","user":{"login":"joelverhagen","id":94054,"avatar_url":"https://avatars0.githubusercontent.com/u/94054?v=4","gravatar_id":"","url":"https://api.github.com/users/joelverhagen","html_url":"https://github.com/joelverhagen","followers_url":"https://api.github.com/users/joelverhagen/followers","following_url":"https://api.github.com/users/joelverhagen/following{/other_user}","gists_url":"https://api.github.com/users/joelverhagen/gists{/gist_id}","starred_url":"https://api.github.com/users/joelverhagen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joelverhagen/subscriptions","organizations_url":"https://api.github.com/users/joelverhagen/orgs","repos_url":"https://api.github.com/users/joelverhagen/repos","events_url":"https://api.github.com/users/joelverhagen/events{/privacy}","received_events_url":"https://api.github.com/users/joelverhagen/received_events","type":"User","site_admin":false},"body":"Progress on https://github.com/NuGet/Engineering/issues/1094.\r\n\r\nAlso, refactor the `hash` tool to use DI, app.config, and KeyVault.","created_at":"2018-02-09T15:38:03Z","updated_at":"2018-02-09T17:44:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4e1f349ba2ec1c0195d4a7f770c243a108ee7420","assignee":null,"assignees":[],"requested_reviewers":[{"login":"agr","id":102933,"avatar_url":"https://avatars1.githubusercontent.com/u/102933?v=4","gravatar_id":"","url":"https://api.github.com/users/agr","html_url":"https://github.com/agr","followers_url":"https://api.github.com/users/agr/followers","following_url":"https://api.github.com/users/agr/following{/other_user}","gists_url":"https://api.github.com/users/agr/gists{/gist_id}","starred_url":"https://api.github.com/users/agr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agr/subscriptions","organizations_url":"https://api.github.com/users/agr/orgs","repos_url":"https://api.github.com/users/agr/repos","events_url":"https://api.github.com/users/agr/events{/privacy}","received_events_url":"https://api.github.com/users/agr/received_events","type":"User","site_admin":false},{"login":"loic-sharma","id":737941,"avatar_url":"https://avatars3.githubusercontent.com/u/737941?v=4","gravatar_id":"","url":"https://api.github.com/users/loic-sharma","html_url":"https://github.com/loic-sharma","followers_url":"https://api.github.com/users/loic-sharma/followers","following_url":"https://api.github.com/users/loic-sharma/following{/other_user}","gists_url":"https://api.github.com/users/loic-sharma/gists{/gist_id}","starred_url":"https://api.github.com/users/loic-sharma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/loic-sharma/subscriptions","organizations_url":"https://api.github.com/users/loic-sharma/orgs","repos_url":"https://api.github.com/users/loic-sharma/repos","events_url":"https://api.github.com/users/loic-sharma/events{/privacy}","received_events_url":"https://api.github.com/users/loic-sharma/received_events","type":"User","site_admin":false},{"login":"xavierdecoster","id":880728,"avatar_url":"https://avatars3.githubusercontent.com/u/880728?v=4","gravatar_id":"","url":"https://api.github.com/users/xavierdecoster","html_url":"https://github.com/xavierdecoster","followers_url":"https://api.github.com/users/xavierdecoster/followers","following_url":"https://api.github.com/users/xavierdecoster/following{/other_user}","gists_url":"https://api.github.com/users/xavierdecoster/gists{/gist_id}","starred_url":"https://api.github.com/users/xavierdecoster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xavierdecoster/subscriptions","organizations_url":"https://api.github.com/users/xavierdecoster/orgs","repos_url":"https://api.github.com/users/xavierdecoster/repos","events_url":"https://api.github.com/users/xavierdecoster/events{/privacy}","received_events_url":"https://api.github.com/users/xavierdecoster/received_events","type":"User","site_admin":false},{"login":"shishirx34","id":1646506,"avatar_url":"https://avatars0.githubusercontent.com/u/1646506?v=4","gravatar_id":"","url":"https://api.github.com/users/shishirx34","html_url":"https://github.com/shishirx34","followers_url":"https://api.github.com/users/shishirx34/followers","following_url":"https://api.github.com/users/shishirx34/following{/other_user}","gists_url":"https://api.github.com/users/shishirx34/gists{/gist_id}","starred_url":"https://api.github.com/users/shishirx34/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shishirx34/subscriptions","organizations_url":"https://api.github.com/users/shishirx34/orgs","repos_url":"https://api.github.com/users/shishirx34/repos","events_url":"https://api.github.com/users/shishirx34/events{/privacy}","received_events_url":"https://api.github.com/users/shishirx34/received_events","type":"User","site_admin":false},{"login":"ryuyu","id":11051729,"avatar_url":"https://avatars2.githubusercontent.com/u/11051729?v=4","gravatar_id":"","url":"https://api.github.com/users/ryuyu","html_url":"https://github.com/ryuyu","followers_url":"https://api.github.com/users/ryuyu/followers","following_url":"https://api.github.com/users/ryuyu/following{/other_user}","gists_url":"https://api.github.com/users/ryuyu/gists{/gist_id}","starred_url":"https://api.github.com/users/ryuyu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ryuyu/subscriptions","organizations_url":"https://api.github.com/users/ryuyu/orgs","repos_url":"https://api.github.com/users/ryuyu/repos","events_url":"https://api.github.com/users/ryuyu/events{/privacy}","received_events_url":"https://api.github.com/users/ryuyu/received_events","type":"User","site_admin":false},{"login":"cristinamanum","id":16580006,"avatar_url":"https://avatars0.githubusercontent.com/u/16580006?v=4","gravatar_id":"","url":"https://api.github.com/users/cristinamanum","html_url":"https://github.com/cristinamanum","followers_url":"https://api.github.com/users/cristinamanum/followers","following_url":"https://api.github.com/users/cristinamanum/following{/other_user}","gists_url":"https://api.github.com/users/cristinamanum/gists{/gist_id}","starred_url":"https://api.github.com/users/cristinamanum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cristinamanum/subscriptions","organizations_url":"https://api.github.com/users/cristinamanum/orgs","repos_url":"https://api.github.com/users/cristinamanum/repos","events_url":"https://api.github.com/users/cristinamanum/events{/privacy}","received_events_url":"https://api.github.com/users/cristinamanum/received_events","type":"User","site_admin":false},{"login":"skofman1","id":16807822,"avatar_url":"https://avatars1.githubusercontent.com/u/16807822?v=4","gravatar_id":"","url":"https://api.github.com/users/skofman1","html_url":"https://github.com/skofman1","followers_url":"https://api.github.com/users/skofman1/followers","following_url":"https://api.github.com/users/skofman1/following{/other_user}","gists_url":"https://api.github.com/users/skofman1/gists{/gist_id}","starred_url":"https://api.github.com/users/skofman1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/skofman1/subscriptions","organizations_url":"https://api.github.com/users/skofman1/orgs","repos_url":"https://api.github.com/users/skofman1/repos","events_url":"https://api.github.com/users/skofman1/events{/privacy}","received_events_url":"https://api.github.com/users/skofman1/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425/commits","review_comments_url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425/comments","review_comment_url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/comments{/number}","comments_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues/5425/comments","statuses_url":"https://api.github.com/repos/NuGet/NuGetGallery/statuses/5c22d8acfadca29b7d221a3ac7b3e8185452415c","head":{"label":"NuGet:jver-bulk-reflow","ref":"jver-bulk-reflow","sha":"5c22d8acfadca29b7d221a3ac7b3e8185452415c","user":{"login":"NuGet","id":968310,"avatar_url":"https://avatars2.githubusercontent.com/u/968310?v=4","gravatar_id":"","url":"https://api.github.com/users/NuGet","html_url":"https://github.com/NuGet","followers_url":"https://api.github.com/users/NuGet/followers","following_url":"https://api.github.com/users/NuGet/following{/other_user}","gists_url":"https://api.github.com/users/NuGet/gists{/gist_id}","starred_url":"https://api.github.com/users/NuGet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NuGet/subscriptions","organizations_url":"https://api.github.com/users/NuGet/orgs","repos_url":"https://api.github.com/users/NuGet/repos","events_url":"https://api.github.com/users/NuGet/events{/privacy}","received_events_url":"https://api.github.com/users/NuGet/received_events","type":"Organization","site_admin":false},"repo":{"id":2180736,"name":"NuGetGallery","full_name":"NuGet/NuGetGallery","owner":{"login":"NuGet","id":968310,"avatar_url":"https://avatars2.githubusercontent.com/u/968310?v=4","gravatar_id":"","url":"https://api.github.com/users/NuGet","html_url":"https://github.com/NuGet","followers_url":"https://api.github.com/users/NuGet/followers","following_url":"https://api.github.com/users/NuGet/following{/other_user}","gists_url":"https://api.github.com/users/NuGet/gists{/gist_id}","starred_url":"https://api.github.com/users/NuGet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NuGet/subscriptions","organizations_url":"https://api.github.com/users/NuGet/orgs","repos_url":"https://api.github.com/users/NuGet/repos","events_url":"https://api.github.com/users/NuGet/events{/privacy}","received_events_url":"https://api.github.com/users/NuGet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/NuGet/NuGetGallery","description":"The NuGet Gallery","fork":false,"url":"https://api.github.com/repos/NuGet/NuGetGallery","forks_url":"https://api.github.com/repos/NuGet/NuGetGallery/forks","keys_url":"https://api.github.com/repos/NuGet/NuGetGallery/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NuGet/NuGetGallery/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NuGet/NuGetGallery/teams","hooks_url":"https://api.github.com/repos/NuGet/NuGetGallery/hooks","issue_events_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues/events{/number}","events_url":"https://api.github.com/repos/NuGet/NuGetGallery/events","assignees_url":"https://api.github.com/repos/NuGet/NuGetGallery/assignees{/user}","branches_url":"https://api.github.com/repos/NuGet/NuGetGallery/branches{/branch}","tags_url":"https://api.github.com/repos/NuGet/NuGetGallery/tags","blobs_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/refs{/sha}","trees_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NuGet/NuGetGallery/statuses/{sha}","languages_url":"https://api.github.com/repos/NuGet/NuGetGallery/languages","stargazers_url":"https://api.github.com/repos/NuGet/NuGetGallery/stargazers","contributors_url":"https://api.github.com/repos/NuGet/NuGetGallery/contributors","subscribers_url":"https://api.github.com/repos/NuGet/NuGetGallery/subscribers","subscription_url":"https://api.github.com/repos/NuGet/NuGetGallery/subscription","commits_url":"https://api.github.com/repos/NuGet/NuGetGallery/commits{/sha}","git_commits_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/commits{/sha}","comments_url":"https://api.github.com/repos/NuGet/NuGetGallery/comments{/number}","issue_comment_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues/comments{/number}","contents_url":"https://api.github.com/repos/NuGet/NuGetGallery/contents/{+path}","compare_url":"https://api.github.com/repos/NuGet/NuGetGallery/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NuGet/NuGetGallery/merges","archive_url":"https://api.github.com/repos/NuGet/NuGetGallery/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NuGet/NuGetGallery/downloads","issues_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues{/number}","pulls_url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls{/number}","milestones_url":"https://api.github.com/repos/NuGet/NuGetGallery/milestones{/number}","notifications_url":"https://api.github.com/repos/NuGet/NuGetGallery/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NuGet/NuGetGallery/labels{/name}","releases_url":"https://api.github.com/repos/NuGet/NuGetGallery/releases{/id}","deployments_url":"https://api.github.com/repos/NuGet/NuGetGallery/deployments","created_at":"2011-08-09T17:57:32Z","updated_at":"2018-02-09T16:45:09Z","pushed_at":"2018-02-09T17:29:25Z","git_url":"git://github.com/NuGet/NuGetGallery.git","ssh_url":"git@github.com:NuGet/NuGetGallery.git","clone_url":"https://github.com/NuGet/NuGetGallery.git","svn_url":"https://github.com/NuGet/NuGetGallery","homepage":"https://www.nuget.org","size":48035,"stargazers_count":963,"watchers_count":963,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":527,"mirror_url":null,"archived":false,"open_issues_count":491,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":527,"open_issues":491,"watchers":963,"default_branch":"master"}},"base":{"label":"NuGet:dev","ref":"dev","sha":"79a27fcdac41b1ad32649ac7462aa70cbed0c056","user":{"login":"NuGet","id":968310,"avatar_url":"https://avatars2.githubusercontent.com/u/968310?v=4","gravatar_id":"","url":"https://api.github.com/users/NuGet","html_url":"https://github.com/NuGet","followers_url":"https://api.github.com/users/NuGet/followers","following_url":"https://api.github.com/users/NuGet/following{/other_user}","gists_url":"https://api.github.com/users/NuGet/gists{/gist_id}","starred_url":"https://api.github.com/users/NuGet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NuGet/subscriptions","organizations_url":"https://api.github.com/users/NuGet/orgs","repos_url":"https://api.github.com/users/NuGet/repos","events_url":"https://api.github.com/users/NuGet/events{/privacy}","received_events_url":"https://api.github.com/users/NuGet/received_events","type":"Organization","site_admin":false},"repo":{"id":2180736,"name":"NuGetGallery","full_name":"NuGet/NuGetGallery","owner":{"login":"NuGet","id":968310,"avatar_url":"https://avatars2.githubusercontent.com/u/968310?v=4","gravatar_id":"","url":"https://api.github.com/users/NuGet","html_url":"https://github.com/NuGet","followers_url":"https://api.github.com/users/NuGet/followers","following_url":"https://api.github.com/users/NuGet/following{/other_user}","gists_url":"https://api.github.com/users/NuGet/gists{/gist_id}","starred_url":"https://api.github.com/users/NuGet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NuGet/subscriptions","organizations_url":"https://api.github.com/users/NuGet/orgs","repos_url":"https://api.github.com/users/NuGet/repos","events_url":"https://api.github.com/users/NuGet/events{/privacy}","received_events_url":"https://api.github.com/users/NuGet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/NuGet/NuGetGallery","description":"The NuGet Gallery","fork":false,"url":"https://api.github.com/repos/NuGet/NuGetGallery","forks_url":"https://api.github.com/repos/NuGet/NuGetGallery/forks","keys_url":"https://api.github.com/repos/NuGet/NuGetGallery/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NuGet/NuGetGallery/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NuGet/NuGetGallery/teams","hooks_url":"https://api.github.com/repos/NuGet/NuGetGallery/hooks","issue_events_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues/events{/number}","events_url":"https://api.github.com/repos/NuGet/NuGetGallery/events","assignees_url":"https://api.github.com/repos/NuGet/NuGetGallery/assignees{/user}","branches_url":"https://api.github.com/repos/NuGet/NuGetGallery/branches{/branch}","tags_url":"https://api.github.com/repos/NuGet/NuGetGallery/tags","blobs_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/refs{/sha}","trees_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NuGet/NuGetGallery/statuses/{sha}","languages_url":"https://api.github.com/repos/NuGet/NuGetGallery/languages","stargazers_url":"https://api.github.com/repos/NuGet/NuGetGallery/stargazers","contributors_url":"https://api.github.com/repos/NuGet/NuGetGallery/contributors","subscribers_url":"https://api.github.com/repos/NuGet/NuGetGallery/subscribers","subscription_url":"https://api.github.com/repos/NuGet/NuGetGallery/subscription","commits_url":"https://api.github.com/repos/NuGet/NuGetGallery/commits{/sha}","git_commits_url":"https://api.github.com/repos/NuGet/NuGetGallery/git/commits{/sha}","comments_url":"https://api.github.com/repos/NuGet/NuGetGallery/comments{/number}","issue_comment_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues/comments{/number}","contents_url":"https://api.github.com/repos/NuGet/NuGetGallery/contents/{+path}","compare_url":"https://api.github.com/repos/NuGet/NuGetGallery/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NuGet/NuGetGallery/merges","archive_url":"https://api.github.com/repos/NuGet/NuGetGallery/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NuGet/NuGetGallery/downloads","issues_url":"https://api.github.com/repos/NuGet/NuGetGallery/issues{/number}","pulls_url":"https://api.github.com/repos/NuGet/NuGetGallery/pulls{/number}","milestones_url":"https://api.github.com/repos/NuGet/NuGetGallery/milestones{/number}","notifications_url":"https://api.github.com/repos/NuGet/NuGetGallery/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NuGet/NuGetGallery/labels{/name}","releases_url":"https://api.github.com/repos/NuGet/NuGetGallery/releases{/id}","deployments_url":"https://api.github.com/repos/NuGet/NuGetGallery/deployments","created_at":"2011-08-09T17:57:32Z","updated_at":"2018-02-09T16:45:09Z","pushed_at":"2018-02-09T17:29:25Z","git_url":"git://github.com/NuGet/NuGetGallery.git","ssh_url":"git@github.com:NuGet/NuGetGallery.git","clone_url":"https://github.com/NuGet/NuGetGallery.git","svn_url":"https://github.com/NuGet/NuGetGallery","homepage":"https://www.nuget.org","size":48035,"stargazers_count":963,"watchers_count":963,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":527,"mirror_url":null,"archived":false,"open_issues_count":491,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":527,"open_issues":491,"watchers":963,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425"},"html":{"href":"https://github.com/NuGet/NuGetGallery/pull/5425"},"issue":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/issues/5425"},"comments":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/issues/5425/comments"},"review_comments":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425/comments"},"review_comment":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/pulls/5425/commits"},"statuses":{"href":"https://api.github.com/repos/NuGet/NuGetGallery/statuses/5c22d8acfadca29b7d221a3ac7b3e8185452415c"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"joelverhagen"}}