{"action":"created","comment":{"url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/comments/209395388","pull_request_review_id":145411391,"id":209395388,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwOTM5NTM4OA==","diff_hunk":"@@ -46,96 +42,174 @@ public class Settings : ISettings\n             new[] { \"*.config\" } :\n             new[] { \"*.Config\", \"*.config\" };\n \n-        private XDocument ConfigXDocument { get; }\n-        public string FileName { get; }\n-        private bool IsMachineWideSettings { get; }\n-        // next config file to read if any\n-        private Settings _next;\n-        // The priority of this setting file\n-        private int _priority;\n-\n         private bool Cleared { get; set; }\n \n-        public Settings(string root /*, ILogger logger */)\n-            : this(root, DefaultSettingsFileName, false)\n+        private SettingsFile _settingsHead { get; }\n+\n+        private Dictionary<string, SettingsSection> _computedSections { get; set; }\n+\n+        public SettingsSection GetSection(string sectionName)\n         {\n+            if (_computedSections.TryGetValue(sectionName, out var section))\n+            {\n+                return section;\n+            }\n+\n+            return null;\n         }\n \n-        public Settings(string root, string fileName)\n-            : this(root, fileName, false)\n+        public bool CreateSection(SettingsSection section, bool isBatchOperation = false)\n         {\n+            if (section == null)\n+            {\n+                throw new ArgumentNullException(nameof(section));\n+            }\n+\n+            if (section.IsEmpty() || _computedSections.ContainsKey(section.Name))\n+            {\n+                return false;\n+            }\n+\n+            var outputSettingsFile = GetOutputSettingsFileForSection(section.Name);\n+\n+            if (outputSettingsFile != null)\n+            {\n+                return outputSettingsFile.RootElement.AddChild(section, isBatchOperation);\n+            }\n+\n+            return false;\n         }\n \n-        public Settings(string root, string fileName, bool isMachineWideSettings)\n+        public bool SetItemInSection(string sectionName, SettingsItem item, bool isBatchOperation = false)\n         {\n-            if (string.IsNullOrEmpty(root))\n+            if (string.IsNullOrEmpty(sectionName))\n             {\n-                throw new ArgumentException(\"root cannot be null or empty\", nameof(root));\n+                throw new ArgumentNullException(nameof(sectionName));\n             }\n \n-            if (string.IsNullOrEmpty(fileName))\n+            if (item == null)\n             {\n-                throw new ArgumentException(Resources.Argument_Cannot_Be_Null_Or_Empty, nameof(fileName));\n+                throw new ArgumentNullException(nameof(item));\n             }\n \n-            if (!FileSystemUtility.IsPathAFile(fileName))\n+            // Check if set is an update\n+            if (_computedSections.TryGetValue(sectionName, out var section))\n             {\n-                throw new ArgumentException(Resources.Settings_FileName_Cannot_Be_A_Path, nameof(fileName));\n+                if (section.TryUpdateChildItem(item, isBatchOperation))\n+                {\n+                    return true;\n+                }\n             }\n \n-            Root = root;\n-            FileName = fileName;\n-            XDocument config = null;\n-            ExecuteSynchronized(() => config = XmlUtility.GetOrCreateDocument(CreateDefaultConfig(), ConfigFilePath));\n-            ConfigXDocument = config;\n-            IsMachineWideSettings = isMachineWideSettings;\n-            CheckConfigRoot();\n+            var outputSettingsFile = GetOutputSettingsFileForSection(sectionName);\n+\n+            // Set is an add\n+            return outputSettingsFile != null && outputSettingsFile.RootElement.AddItemInSection(sectionName, item.Copy(), isBatchOperation);\n         }\n \n         public event EventHandler SettingsChanged = delegate { };\n \n-        public IEnumerable<ISettings> Priority\n+        public Settings(string root)\n+            : this(new SettingsFile(root)) { }\n+\n+        public Settings(string root, string fileName)\n+            : this(new SettingsFile(root, fileName)) { }\n+\n+        public Settings(string root, string fileName, bool isMachineWide)\n+            : this(new SettingsFile(root, fileName, isMachineWide)) { }\n+\n+        private Settings(SettingsFile settingsHead)\n+        {\n+            _settingsHead = settingsHead;\n+\n+            var curr = _settingsHead;\n+            while (curr != null)\n+            {\n+                curr.SettingsChanged += (_, __) => { RefreshSettingValues(); };","path":"src/NuGet.Core/NuGet.Configuration/Settings/Settings.cs","position":139,"original_position":139,"commit_id":"ce31a0bd84db6b4062230e5ac9bb135081a258bb","original_commit_id":"ce31a0bd84db6b4062230e5ac9bb135081a258bb","user":{"login":"PatoBeltran","id":2132567,"node_id":"MDQ6VXNlcjIxMzI1Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/2132567?v=4","gravatar_id":"","url":"https://api.github.com/users/PatoBeltran","html_url":"https://github.com/PatoBeltran","followers_url":"https://api.github.com/users/PatoBeltran/followers","following_url":"https://api.github.com/users/PatoBeltran/following{/other_user}","gists_url":"https://api.github.com/users/PatoBeltran/gists{/gist_id}","starred_url":"https://api.github.com/users/PatoBeltran/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatoBeltran/subscriptions","organizations_url":"https://api.github.com/users/PatoBeltran/orgs","repos_url":"https://api.github.com/users/PatoBeltran/repos","events_url":"https://api.github.com/users/PatoBeltran/events{/privacy}","received_events_url":"https://api.github.com/users/PatoBeltran/received_events","type":"User","site_admin":false},"body":"As I just focused this refactor in getting the same behavior as we had previously, then all the changes happen from `ISettings`, but this is not true for the whole API. The API has the capability for users only editing one `ISettingsFile` directly (e.g. if we add the ability to edit specific configs in the UI), therefore I made it so that if there is any change with any of the `ISettingsFile` used in a given `ISettings` then we recompute the merged values.\r\n\r\nThe previous code calculated the merged values in every `Get` operation, I updated this to make `get` more performant (since we do way more gets than sets), and only recompute the values on each `set`. Therefore I would say that this code is way more performant than the previous.","created_at":"2018-08-10T22:06:17Z","updated_at":"2018-08-10T22:06:18Z","html_url":"https://github.com/NuGet/NuGet.Client/pull/2370#discussion_r209395388","pull_request_url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/comments/209395388"},"html":{"href":"https://github.com/NuGet/NuGet.Client/pull/2370#discussion_r209395388"},"pull_request":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370"}},"in_reply_to_id":209357366},"pull_request":{"url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370","id":204960263,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA0OTYwMjYz","html_url":"https://github.com/NuGet/NuGet.Client/pull/2370","diff_url":"https://github.com/NuGet/NuGet.Client/pull/2370.diff","patch_url":"https://github.com/NuGet/NuGet.Client/pull/2370.patch","issue_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues/2370","number":2370,"state":"open","locked":false,"title":"Refactored NuGet.Configuration","user":{"login":"PatoBeltran","id":2132567,"node_id":"MDQ6VXNlcjIxMzI1Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/2132567?v=4","gravatar_id":"","url":"https://api.github.com/users/PatoBeltran","html_url":"https://github.com/PatoBeltran","followers_url":"https://api.github.com/users/PatoBeltran/followers","following_url":"https://api.github.com/users/PatoBeltran/following{/other_user}","gists_url":"https://api.github.com/users/PatoBeltran/gists{/gist_id}","starred_url":"https://api.github.com/users/PatoBeltran/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatoBeltran/subscriptions","organizations_url":"https://api.github.com/users/PatoBeltran/orgs","repos_url":"https://api.github.com/users/PatoBeltran/repos","events_url":"https://api.github.com/users/PatoBeltran/events{/privacy}","received_events_url":"https://api.github.com/users/PatoBeltran/received_events","type":"User","site_admin":false},"body":"Improved API for parsing nuget.config by creating an object model that is easily extensible and updated current API usage to conform with the new usage patterns.\r\n\r\nPreviously, the nuget.config logic was centered around Settings.cs, which was in charge of loading all nuget.configs, figuring out how to merge them and giving an API to the user to interact with the content of the config files. Because of this, the usage was limited for interacting with nuget.config. The API was too specific for parsing only a few elements and enabling new elements was difficult because this meant adding a bunch of APIs specific for any new element.\r\n\r\nThis PR adds an abstraction of a single nuget.config file (SettingsFile.cs), with its own abstraction of its content (NugetConfiguration.cs), making it easy to parse and add new elements. Then the Settings object is only in charge of finding and loading every single config file and merging their settings together. The settings file give the user a way to interact with the computed values, instead of with the values from the config files directly.\r\n\r\nThe users of the APIs were also updated to follow the new pattern. PackageSourceProvider was the one with the heaviest usage of the API and was rewritten to follow the principles of the new API.\r\n\r\nGiven that this is a big PR, here are the most important files, be sure to pay special attention to all of the files in this list, most of the changes in other files are just updates to use the new API instead of the old one:\r\n\r\n**Setting file parsing**\r\n\r\nNodes/ISettingsNode.cs \r\nNodes/SettingsNode.cs \r\nNodes/SettingsTextContent.cs \r\nNodes/SettingsElement.cs \r\nNodes/ISettingsCollection.cs \r\nNodes/SettingsCollection.cs \r\nNodes/NuGetConfiguration.cs \r\nNodes/SettingsSection.cs \r\nNodes/SettingsItem.cs \r\nNodes/AddItem.cs\r\nNodes/ClearItem.cs \r\nNodes/CredentialsItem.cs \r\nNodes/SourceItem.cs\r\n\r\nSettingFactory.cs \r\n\r\n**Settings API**\r\n\r\nISettingsFile.cs\r\nSettingsFile.cs \r\nISettings.cs \r\nSettings.cs \r\nSettingsUtility.cs \r\n\r\n**Important changes in the way it uses the settings API**\r\n\r\nIPackageSourceProvider.cs \r\nPackageSourceProvider.cs \r\n\r\n\r\n**Tests: Settings File Parsing**\r\n\r\nSettingsFileParsingTests/SettingsFileTests.cs \r\nSettingsFileParsingTests/NuGetConfigurationTests.cs \r\nSettingsFileParsingTests/SettingSectionTests.cs \r\nSettingsFileParsingTests/AddItemTests.cs \r\nSettingsFileParsingTests/SourceItemTests.cs \r\nSettingsFileParsingTests/ClearItemTests.cs \r\nSettingsFileParsingTests/CredentialsItemTests.cs \r\n\r\n**Tests: Settings API**\r\n\r\nSettingsTests.cs \r\nSettingsUtilityTests.cs \r\n\r\n**Tests: Important changes in the way it uses the settings API**\r\n\r\nPackageSourceProviderTests.cs ","created_at":"2018-07-30T23:47:07Z","updated_at":"2018-08-10T22:06:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9954e9ae5bb1be2887820b46714d5c971069fe3e","assignee":{"login":"PatoBeltran","id":2132567,"node_id":"MDQ6VXNlcjIxMzI1Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/2132567?v=4","gravatar_id":"","url":"https://api.github.com/users/PatoBeltran","html_url":"https://github.com/PatoBeltran","followers_url":"https://api.github.com/users/PatoBeltran/followers","following_url":"https://api.github.com/users/PatoBeltran/following{/other_user}","gists_url":"https://api.github.com/users/PatoBeltran/gists{/gist_id}","starred_url":"https://api.github.com/users/PatoBeltran/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatoBeltran/subscriptions","organizations_url":"https://api.github.com/users/PatoBeltran/orgs","repos_url":"https://api.github.com/users/PatoBeltran/repos","events_url":"https://api.github.com/users/PatoBeltran/events{/privacy}","received_events_url":"https://api.github.com/users/PatoBeltran/received_events","type":"User","site_admin":false},"assignees":[{"login":"PatoBeltran","id":2132567,"node_id":"MDQ6VXNlcjIxMzI1Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/2132567?v=4","gravatar_id":"","url":"https://api.github.com/users/PatoBeltran","html_url":"https://github.com/PatoBeltran","followers_url":"https://api.github.com/users/PatoBeltran/followers","following_url":"https://api.github.com/users/PatoBeltran/following{/other_user}","gists_url":"https://api.github.com/users/PatoBeltran/gists{/gist_id}","starred_url":"https://api.github.com/users/PatoBeltran/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatoBeltran/subscriptions","organizations_url":"https://api.github.com/users/PatoBeltran/orgs","repos_url":"https://api.github.com/users/PatoBeltran/repos","events_url":"https://api.github.com/users/PatoBeltran/events{/privacy}","received_events_url":"https://api.github.com/users/PatoBeltran/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"rohit21agrawal","id":1857490,"node_id":"MDQ6VXNlcjE4NTc0OTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1857490?v=4","gravatar_id":"","url":"https://api.github.com/users/rohit21agrawal","html_url":"https://github.com/rohit21agrawal","followers_url":"https://api.github.com/users/rohit21agrawal/followers","following_url":"https://api.github.com/users/rohit21agrawal/following{/other_user}","gists_url":"https://api.github.com/users/rohit21agrawal/gists{/gist_id}","starred_url":"https://api.github.com/users/rohit21agrawal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohit21agrawal/subscriptions","organizations_url":"https://api.github.com/users/rohit21agrawal/orgs","repos_url":"https://api.github.com/users/rohit21agrawal/repos","events_url":"https://api.github.com/users/rohit21agrawal/events{/privacy}","received_events_url":"https://api.github.com/users/rohit21agrawal/received_events","type":"User","site_admin":false},{"login":"nkolev92","id":2878341,"node_id":"MDQ6VXNlcjI4NzgzNDE=","avatar_url":"https://avatars1.githubusercontent.com/u/2878341?v=4","gravatar_id":"","url":"https://api.github.com/users/nkolev92","html_url":"https://github.com/nkolev92","followers_url":"https://api.github.com/users/nkolev92/followers","following_url":"https://api.github.com/users/nkolev92/following{/other_user}","gists_url":"https://api.github.com/users/nkolev92/gists{/gist_id}","starred_url":"https://api.github.com/users/nkolev92/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nkolev92/subscriptions","organizations_url":"https://api.github.com/users/nkolev92/orgs","repos_url":"https://api.github.com/users/nkolev92/repos","events_url":"https://api.github.com/users/nkolev92/events{/privacy}","received_events_url":"https://api.github.com/users/nkolev92/received_events","type":"User","site_admin":false},{"login":"zhili1208","id":7131513,"node_id":"MDQ6VXNlcjcxMzE1MTM=","avatar_url":"https://avatars3.githubusercontent.com/u/7131513?v=4","gravatar_id":"","url":"https://api.github.com/users/zhili1208","html_url":"https://github.com/zhili1208","followers_url":"https://api.github.com/users/zhili1208/followers","following_url":"https://api.github.com/users/zhili1208/following{/other_user}","gists_url":"https://api.github.com/users/zhili1208/gists{/gist_id}","starred_url":"https://api.github.com/users/zhili1208/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhili1208/subscriptions","organizations_url":"https://api.github.com/users/zhili1208/orgs","repos_url":"https://api.github.com/users/zhili1208/repos","events_url":"https://api.github.com/users/zhili1208/events{/privacy}","received_events_url":"https://api.github.com/users/zhili1208/received_events","type":"User","site_admin":false},{"login":"mishra14","id":10507120,"node_id":"MDQ6VXNlcjEwNTA3MTIw","avatar_url":"https://avatars1.githubusercontent.com/u/10507120?v=4","gravatar_id":"","url":"https://api.github.com/users/mishra14","html_url":"https://github.com/mishra14","followers_url":"https://api.github.com/users/mishra14/followers","following_url":"https://api.github.com/users/mishra14/following{/other_user}","gists_url":"https://api.github.com/users/mishra14/gists{/gist_id}","starred_url":"https://api.github.com/users/mishra14/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mishra14/subscriptions","organizations_url":"https://api.github.com/users/mishra14/orgs","repos_url":"https://api.github.com/users/mishra14/repos","events_url":"https://api.github.com/users/mishra14/events{/privacy}","received_events_url":"https://api.github.com/users/mishra14/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370/commits","review_comments_url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370/comments","review_comment_url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/comments{/number}","comments_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues/2370/comments","statuses_url":"https://api.github.com/repos/NuGet/NuGet.Client/statuses/ce31a0bd84db6b4062230e5ac9bb135081a258bb","head":{"label":"NuGet:dev-pato-refactor-config","ref":"dev-pato-refactor-config","sha":"ce31a0bd84db6b4062230e5ac9bb135081a258bb","user":{"login":"NuGet","id":968310,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk2ODMxMA==","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":19330736,"node_id":"MDEwOlJlcG9zaXRvcnkxOTMzMDczNg==","name":"NuGet.Client","full_name":"NuGet/NuGet.Client","owner":{"login":"NuGet","id":968310,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk2ODMxMA==","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/NuGet.Client","description":"Core client libraries for NuGet Services","fork":false,"url":"https://api.github.com/repos/NuGet/NuGet.Client","forks_url":"https://api.github.com/repos/NuGet/NuGet.Client/forks","keys_url":"https://api.github.com/repos/NuGet/NuGet.Client/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NuGet/NuGet.Client/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NuGet/NuGet.Client/teams","hooks_url":"https://api.github.com/repos/NuGet/NuGet.Client/hooks","issue_events_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues/events{/number}","events_url":"https://api.github.com/repos/NuGet/NuGet.Client/events","assignees_url":"https://api.github.com/repos/NuGet/NuGet.Client/assignees{/user}","branches_url":"https://api.github.com/repos/NuGet/NuGet.Client/branches{/branch}","tags_url":"https://api.github.com/repos/NuGet/NuGet.Client/tags","blobs_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/refs{/sha}","trees_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NuGet/NuGet.Client/statuses/{sha}","languages_url":"https://api.github.com/repos/NuGet/NuGet.Client/languages","stargazers_url":"https://api.github.com/repos/NuGet/NuGet.Client/stargazers","contributors_url":"https://api.github.com/repos/NuGet/NuGet.Client/contributors","subscribers_url":"https://api.github.com/repos/NuGet/NuGet.Client/subscribers","subscription_url":"https://api.github.com/repos/NuGet/NuGet.Client/subscription","commits_url":"https://api.github.com/repos/NuGet/NuGet.Client/commits{/sha}","git_commits_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/commits{/sha}","comments_url":"https://api.github.com/repos/NuGet/NuGet.Client/comments{/number}","issue_comment_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues/comments{/number}","contents_url":"https://api.github.com/repos/NuGet/NuGet.Client/contents/{+path}","compare_url":"https://api.github.com/repos/NuGet/NuGet.Client/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NuGet/NuGet.Client/merges","archive_url":"https://api.github.com/repos/NuGet/NuGet.Client/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NuGet/NuGet.Client/downloads","issues_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues{/number}","pulls_url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls{/number}","milestones_url":"https://api.github.com/repos/NuGet/NuGet.Client/milestones{/number}","notifications_url":"https://api.github.com/repos/NuGet/NuGet.Client/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NuGet/NuGet.Client/labels{/name}","releases_url":"https://api.github.com/repos/NuGet/NuGet.Client/releases{/id}","deployments_url":"https://api.github.com/repos/NuGet/NuGet.Client/deployments","created_at":"2014-04-30T23:46:11Z","updated_at":"2018-08-10T18:10:04Z","pushed_at":"2018-08-10T21:09:07Z","git_url":"git://github.com/NuGet/NuGet.Client.git","ssh_url":"git@github.com:NuGet/NuGet.Client.git","clone_url":"https://github.com/NuGet/NuGet.Client.git","svn_url":"https://github.com/NuGet/NuGet.Client","homepage":null,"size":35040,"stargazers_count":280,"watchers_count":280,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":327,"mirror_url":null,"archived":false,"open_issues_count":24,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":327,"open_issues":24,"watchers":280,"default_branch":"dev"}},"base":{"label":"NuGet:dev","ref":"dev","sha":"7e5d28aac52628cdb5c69d9ffa4d5a3876879327","user":{"login":"NuGet","id":968310,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk2ODMxMA==","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":19330736,"node_id":"MDEwOlJlcG9zaXRvcnkxOTMzMDczNg==","name":"NuGet.Client","full_name":"NuGet/NuGet.Client","owner":{"login":"NuGet","id":968310,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk2ODMxMA==","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/NuGet.Client","description":"Core client libraries for NuGet Services","fork":false,"url":"https://api.github.com/repos/NuGet/NuGet.Client","forks_url":"https://api.github.com/repos/NuGet/NuGet.Client/forks","keys_url":"https://api.github.com/repos/NuGet/NuGet.Client/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NuGet/NuGet.Client/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NuGet/NuGet.Client/teams","hooks_url":"https://api.github.com/repos/NuGet/NuGet.Client/hooks","issue_events_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues/events{/number}","events_url":"https://api.github.com/repos/NuGet/NuGet.Client/events","assignees_url":"https://api.github.com/repos/NuGet/NuGet.Client/assignees{/user}","branches_url":"https://api.github.com/repos/NuGet/NuGet.Client/branches{/branch}","tags_url":"https://api.github.com/repos/NuGet/NuGet.Client/tags","blobs_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/refs{/sha}","trees_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NuGet/NuGet.Client/statuses/{sha}","languages_url":"https://api.github.com/repos/NuGet/NuGet.Client/languages","stargazers_url":"https://api.github.com/repos/NuGet/NuGet.Client/stargazers","contributors_url":"https://api.github.com/repos/NuGet/NuGet.Client/contributors","subscribers_url":"https://api.github.com/repos/NuGet/NuGet.Client/subscribers","subscription_url":"https://api.github.com/repos/NuGet/NuGet.Client/subscription","commits_url":"https://api.github.com/repos/NuGet/NuGet.Client/commits{/sha}","git_commits_url":"https://api.github.com/repos/NuGet/NuGet.Client/git/commits{/sha}","comments_url":"https://api.github.com/repos/NuGet/NuGet.Client/comments{/number}","issue_comment_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues/comments{/number}","contents_url":"https://api.github.com/repos/NuGet/NuGet.Client/contents/{+path}","compare_url":"https://api.github.com/repos/NuGet/NuGet.Client/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NuGet/NuGet.Client/merges","archive_url":"https://api.github.com/repos/NuGet/NuGet.Client/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NuGet/NuGet.Client/downloads","issues_url":"https://api.github.com/repos/NuGet/NuGet.Client/issues{/number}","pulls_url":"https://api.github.com/repos/NuGet/NuGet.Client/pulls{/number}","milestones_url":"https://api.github.com/repos/NuGet/NuGet.Client/milestones{/number}","notifications_url":"https://api.github.com/repos/NuGet/NuGet.Client/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NuGet/NuGet.Client/labels{/name}","releases_url":"https://api.github.com/repos/NuGet/NuGet.Client/releases{/id}","deployments_url":"https://api.github.com/repos/NuGet/NuGet.Client/deployments","created_at":"2014-04-30T23:46:11Z","updated_at":"2018-08-10T18:10:04Z","pushed_at":"2018-08-10T21:09:07Z","git_url":"git://github.com/NuGet/NuGet.Client.git","ssh_url":"git@github.com:NuGet/NuGet.Client.git","clone_url":"https://github.com/NuGet/NuGet.Client.git","svn_url":"https://github.com/NuGet/NuGet.Client","homepage":null,"size":35040,"stargazers_count":280,"watchers_count":280,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":327,"mirror_url":null,"archived":false,"open_issues_count":24,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":327,"open_issues":24,"watchers":280,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370"},"html":{"href":"https://github.com/NuGet/NuGet.Client/pull/2370"},"issue":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/issues/2370"},"comments":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/issues/2370/comments"},"review_comments":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370/comments"},"review_comment":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/pulls/2370/commits"},"statuses":{"href":"https://api.github.com/repos/NuGet/NuGet.Client/statuses/ce31a0bd84db6b4062230e5ac9bb135081a258bb"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"PatoBeltran"}}