{"action":"created","comment":{"url":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/comments/200333921","pull_request_review_id":134627732,"id":200333921,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMDMzMzkyMQ==","diff_hunk":"@@ -626,13 +627,48 @@ public virtual string GenerateCssFiles(IUrlHelper urlHelper, ResourceLocation lo\n                 foreach (var item in _cssParts[location].Distinct())\r\n                 {\r\n                     var src = debugModel ? item.DebugSrc : item.Src;\r\n-                    result.AppendFormat(\"<link href=\\\"{0}\\\" rel=\\\"stylesheet\\\" type=\\\"{1}\\\" />\", urlHelper.Content(src), MimeTypes.TextCss);\r\n+                    result.AppendFormat(\"<link href=\\\"{0}\\\" rel=\\\"stylesheet\\\" type=\\\"{1}\\\" />\", urlHelper.Content(src) + GetVersion(src), MimeTypes.TextCss);\r\n                     result.AppendLine();\r\n                 }\r\n                 return result.ToString();\r\n             }\r\n         }\r\n \r\n+        /// <summary>\r\n+        /// Gets a version number based off of the last write time for the file,\r\n+        /// keeps the browser from using an older cached version of the file when it should use a newer one\r\n+        /// </summary>\r\n+        /// <param name=\"url\">The relative URL of the file to get the version for.</param>\r\n+        /// <param name=\"includeVersionEquals\">Should we include a version identifier?</param>\r\n+        public virtual string GetVersion(string url, bool includeVersionEquals = true)\r\n+        {\r\n+            // Get the roots\r\n+            var webRoot = _hostingEnvironment.WebRootPath + Path.DirectorySeparatorChar;\r\n+            var contentRoot = _hostingEnvironment.ContentRootPath + Path.DirectorySeparatorChar;\r\n+            var versionEquals = includeVersionEquals ? \"?v=\" : \"\";\r","path":"src/Presentation/Nop.Web.Framework/UI/PageHeadBuilder.cs","position":174,"original_position":174,"commit_id":"91492b1d0cf81a83fe0aec5142c8c9ad52884d90","original_commit_id":"91492b1d0cf81a83fe0aec5142c8c9ad52884d90","user":{"login":"DmitriyKulagin","id":27218280,"node_id":"MDQ6VXNlcjI3MjE4Mjgw","avatar_url":"https://avatars3.githubusercontent.com/u/27218280?v=4","gravatar_id":"","url":"https://api.github.com/users/DmitriyKulagin","html_url":"https://github.com/DmitriyKulagin","followers_url":"https://api.github.com/users/DmitriyKulagin/followers","following_url":"https://api.github.com/users/DmitriyKulagin/following{/other_user}","gists_url":"https://api.github.com/users/DmitriyKulagin/gists{/gist_id}","starred_url":"https://api.github.com/users/DmitriyKulagin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DmitriyKulagin/subscriptions","organizations_url":"https://api.github.com/users/DmitriyKulagin/orgs","repos_url":"https://api.github.com/users/DmitriyKulagin/repos","events_url":"https://api.github.com/users/DmitriyKulagin/events{/privacy}","received_events_url":"https://api.github.com/users/DmitriyKulagin/received_events","type":"User","site_admin":false},"body":"Use string.Empty rather than \"\".","created_at":"2018-07-05T12:31:31Z","updated_at":"2018-07-05T12:31:31Z","html_url":"https://github.com/nopSolutions/nopCommerce/pull/3034#discussion_r200333921","pull_request_url":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/comments/200333921"},"html":{"href":"https://github.com/nopSolutions/nopCommerce/pull/3034#discussion_r200333921"},"pull_request":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034"}}},"pull_request":{"url":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034","id":194576364,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk0NTc2MzY0","html_url":"https://github.com/nopSolutions/nopCommerce/pull/3034","diff_url":"https://github.com/nopSolutions/nopCommerce/pull/3034.diff","patch_url":"https://github.com/nopSolutions/nopCommerce/pull/3034.patch","issue_url":"https://api.github.com/repos/nopSolutions/nopCommerce/issues/3034","number":3034,"state":"open","locked":false,"title":"Cache Busting for JS and CSS files/bundles","user":{"login":"bfranklin825","id":16169574,"node_id":"MDQ6VXNlcjE2MTY5NTc0","avatar_url":"https://avatars0.githubusercontent.com/u/16169574?v=4","gravatar_id":"","url":"https://api.github.com/users/bfranklin825","html_url":"https://github.com/bfranklin825","followers_url":"https://api.github.com/users/bfranklin825/followers","following_url":"https://api.github.com/users/bfranklin825/following{/other_user}","gists_url":"https://api.github.com/users/bfranklin825/gists{/gist_id}","starred_url":"https://api.github.com/users/bfranklin825/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bfranklin825/subscriptions","organizations_url":"https://api.github.com/users/bfranklin825/orgs","repos_url":"https://api.github.com/users/bfranklin825/repos","events_url":"https://api.github.com/users/bfranklin825/events{/privacy}","received_events_url":"https://api.github.com/users/bfranklin825/received_events","type":"User","site_admin":false},"body":"Added version strings to .js and .css files so browsers will know when to pull updated ones. The version number (i.e. \"?v=9383849332\") is based off of the last write time for the .js or .css file. This will only change the version when the file's contents have been changed. \r\n\r\nAlso the bundle name that is generated is based off of the last write time of each file included in the bundle, so the name for the bundled file will be different whenever any file in the bundle has changed. ","created_at":"2018-06-13T12:54:10Z","updated_at":"2018-07-05T12:31:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a9b4180ae3d784f779f8ee11aef615c99d45dbf2","assignee":{"login":"DmitriyKulagin","id":27218280,"node_id":"MDQ6VXNlcjI3MjE4Mjgw","avatar_url":"https://avatars3.githubusercontent.com/u/27218280?v=4","gravatar_id":"","url":"https://api.github.com/users/DmitriyKulagin","html_url":"https://github.com/DmitriyKulagin","followers_url":"https://api.github.com/users/DmitriyKulagin/followers","following_url":"https://api.github.com/users/DmitriyKulagin/following{/other_user}","gists_url":"https://api.github.com/users/DmitriyKulagin/gists{/gist_id}","starred_url":"https://api.github.com/users/DmitriyKulagin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DmitriyKulagin/subscriptions","organizations_url":"https://api.github.com/users/DmitriyKulagin/orgs","repos_url":"https://api.github.com/users/DmitriyKulagin/repos","events_url":"https://api.github.com/users/DmitriyKulagin/events{/privacy}","received_events_url":"https://api.github.com/users/DmitriyKulagin/received_events","type":"User","site_admin":false},"assignees":[{"login":"DmitriyKulagin","id":27218280,"node_id":"MDQ6VXNlcjI3MjE4Mjgw","avatar_url":"https://avatars3.githubusercontent.com/u/27218280?v=4","gravatar_id":"","url":"https://api.github.com/users/DmitriyKulagin","html_url":"https://github.com/DmitriyKulagin","followers_url":"https://api.github.com/users/DmitriyKulagin/followers","following_url":"https://api.github.com/users/DmitriyKulagin/following{/other_user}","gists_url":"https://api.github.com/users/DmitriyKulagin/gists{/gist_id}","starred_url":"https://api.github.com/users/DmitriyKulagin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DmitriyKulagin/subscriptions","organizations_url":"https://api.github.com/users/DmitriyKulagin/orgs","repos_url":"https://api.github.com/users/DmitriyKulagin/repos","events_url":"https://api.github.com/users/DmitriyKulagin/events{/privacy}","received_events_url":"https://api.github.com/users/DmitriyKulagin/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034/commits","review_comments_url":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034/comments","review_comment_url":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nopSolutions/nopCommerce/issues/3034/comments","statuses_url":"https://api.github.com/repos/nopSolutions/nopCommerce/statuses/91492b1d0cf81a83fe0aec5142c8c9ad52884d90","head":{"label":"bfranklin825:develop","ref":"develop","sha":"91492b1d0cf81a83fe0aec5142c8c9ad52884d90","user":{"login":"bfranklin825","id":16169574,"node_id":"MDQ6VXNlcjE2MTY5NTc0","avatar_url":"https://avatars0.githubusercontent.com/u/16169574?v=4","gravatar_id":"","url":"https://api.github.com/users/bfranklin825","html_url":"https://github.com/bfranklin825","followers_url":"https://api.github.com/users/bfranklin825/followers","following_url":"https://api.github.com/users/bfranklin825/following{/other_user}","gists_url":"https://api.github.com/users/bfranklin825/gists{/gist_id}","starred_url":"https://api.github.com/users/bfranklin825/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bfranklin825/subscriptions","organizations_url":"https://api.github.com/users/bfranklin825/orgs","repos_url":"https://api.github.com/users/bfranklin825/repos","events_url":"https://api.github.com/users/bfranklin825/events{/privacy}","received_events_url":"https://api.github.com/users/bfranklin825/received_events","type":"User","site_admin":false},"repo":{"id":137210008,"node_id":"MDEwOlJlcG9zaXRvcnkxMzcyMTAwMDg=","name":"nopCommerce","full_name":"bfranklin825/nopCommerce","owner":{"login":"bfranklin825","id":16169574,"node_id":"MDQ6VXNlcjE2MTY5NTc0","avatar_url":"https://avatars0.githubusercontent.com/u/16169574?v=4","gravatar_id":"","url":"https://api.github.com/users/bfranklin825","html_url":"https://github.com/bfranklin825","followers_url":"https://api.github.com/users/bfranklin825/followers","following_url":"https://api.github.com/users/bfranklin825/following{/other_user}","gists_url":"https://api.github.com/users/bfranklin825/gists{/gist_id}","starred_url":"https://api.github.com/users/bfranklin825/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bfranklin825/subscriptions","organizations_url":"https://api.github.com/users/bfranklin825/orgs","repos_url":"https://api.github.com/users/bfranklin825/repos","events_url":"https://api.github.com/users/bfranklin825/events{/privacy}","received_events_url":"https://api.github.com/users/bfranklin825/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bfranklin825/nopCommerce","description":"Cache Busting Using Last File Write Time","fork":true,"url":"https://api.github.com/repos/bfranklin825/nopCommerce","forks_url":"https://api.github.com/repos/bfranklin825/nopCommerce/forks","keys_url":"https://api.github.com/repos/bfranklin825/nopCommerce/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bfranklin825/nopCommerce/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bfranklin825/nopCommerce/teams","hooks_url":"https://api.github.com/repos/bfranklin825/nopCommerce/hooks","issue_events_url":"https://api.github.com/repos/bfranklin825/nopCommerce/issues/events{/number}","events_url":"https://api.github.com/repos/bfranklin825/nopCommerce/events","assignees_url":"https://api.github.com/repos/bfranklin825/nopCommerce/assignees{/user}","branches_url":"https://api.github.com/repos/bfranklin825/nopCommerce/branches{/branch}","tags_url":"https://api.github.com/repos/bfranklin825/nopCommerce/tags","blobs_url":"https://api.github.com/repos/bfranklin825/nopCommerce/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bfranklin825/nopCommerce/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bfranklin825/nopCommerce/git/refs{/sha}","trees_url":"https://api.github.com/repos/bfranklin825/nopCommerce/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bfranklin825/nopCommerce/statuses/{sha}","languages_url":"https://api.github.com/repos/bfranklin825/nopCommerce/languages","stargazers_url":"https://api.github.com/repos/bfranklin825/nopCommerce/stargazers","contributors_url":"https://api.github.com/repos/bfranklin825/nopCommerce/contributors","subscribers_url":"https://api.github.com/repos/bfranklin825/nopCommerce/subscribers","subscription_url":"https://api.github.com/repos/bfranklin825/nopCommerce/subscription","commits_url":"https://api.github.com/repos/bfranklin825/nopCommerce/commits{/sha}","git_commits_url":"https://api.github.com/repos/bfranklin825/nopCommerce/git/commits{/sha}","comments_url":"https://api.github.com/repos/bfranklin825/nopCommerce/comments{/number}","issue_comment_url":"https://api.github.com/repos/bfranklin825/nopCommerce/issues/comments{/number}","contents_url":"https://api.github.com/repos/bfranklin825/nopCommerce/contents/{+path}","compare_url":"https://api.github.com/repos/bfranklin825/nopCommerce/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bfranklin825/nopCommerce/merges","archive_url":"https://api.github.com/repos/bfranklin825/nopCommerce/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bfranklin825/nopCommerce/downloads","issues_url":"https://api.github.com/repos/bfranklin825/nopCommerce/issues{/number}","pulls_url":"https://api.github.com/repos/bfranklin825/nopCommerce/pulls{/number}","milestones_url":"https://api.github.com/repos/bfranklin825/nopCommerce/milestones{/number}","notifications_url":"https://api.github.com/repos/bfranklin825/nopCommerce/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bfranklin825/nopCommerce/labels{/name}","releases_url":"https://api.github.com/repos/bfranklin825/nopCommerce/releases{/id}","deployments_url":"https://api.github.com/repos/bfranklin825/nopCommerce/deployments","created_at":"2018-06-13T12:04:48Z","updated_at":"2018-06-13T12:53:26Z","pushed_at":"2018-06-13T12:53:24Z","git_url":"git://github.com/bfranklin825/nopCommerce.git","ssh_url":"git@github.com:bfranklin825/nopCommerce.git","clone_url":"https://github.com/bfranklin825/nopCommerce.git","svn_url":"https://github.com/bfranklin825/nopCommerce","homepage":"https://www.nopcommerce.com","size":582574,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"nopSolutions:develop","ref":"develop","sha":"42005b54945082f2b8ca30b52ed6364636fc71a2","user":{"login":"nopSolutions","id":7234683,"node_id":"MDEyOk9yZ2FuaXphdGlvbjcyMzQ2ODM=","avatar_url":"https://avatars1.githubusercontent.com/u/7234683?v=4","gravatar_id":"","url":"https://api.github.com/users/nopSolutions","html_url":"https://github.com/nopSolutions","followers_url":"https://api.github.com/users/nopSolutions/followers","following_url":"https://api.github.com/users/nopSolutions/following{/other_user}","gists_url":"https://api.github.com/users/nopSolutions/gists{/gist_id}","starred_url":"https://api.github.com/users/nopSolutions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nopSolutions/subscriptions","organizations_url":"https://api.github.com/users/nopSolutions/orgs","repos_url":"https://api.github.com/users/nopSolutions/repos","events_url":"https://api.github.com/users/nopSolutions/events{/privacy}","received_events_url":"https://api.github.com/users/nopSolutions/received_events","type":"Organization","site_admin":false},"repo":{"id":18586705,"node_id":"MDEwOlJlcG9zaXRvcnkxODU4NjcwNQ==","name":"nopCommerce","full_name":"nopSolutions/nopCommerce","owner":{"login":"nopSolutions","id":7234683,"node_id":"MDEyOk9yZ2FuaXphdGlvbjcyMzQ2ODM=","avatar_url":"https://avatars1.githubusercontent.com/u/7234683?v=4","gravatar_id":"","url":"https://api.github.com/users/nopSolutions","html_url":"https://github.com/nopSolutions","followers_url":"https://api.github.com/users/nopSolutions/followers","following_url":"https://api.github.com/users/nopSolutions/following{/other_user}","gists_url":"https://api.github.com/users/nopSolutions/gists{/gist_id}","starred_url":"https://api.github.com/users/nopSolutions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nopSolutions/subscriptions","organizations_url":"https://api.github.com/users/nopSolutions/orgs","repos_url":"https://api.github.com/users/nopSolutions/repos","events_url":"https://api.github.com/users/nopSolutions/events{/privacy}","received_events_url":"https://api.github.com/users/nopSolutions/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nopSolutions/nopCommerce","description":"Free open-source ecommerce shopping cart (ASP.NET MVC)","fork":false,"url":"https://api.github.com/repos/nopSolutions/nopCommerce","forks_url":"https://api.github.com/repos/nopSolutions/nopCommerce/forks","keys_url":"https://api.github.com/repos/nopSolutions/nopCommerce/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nopSolutions/nopCommerce/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nopSolutions/nopCommerce/teams","hooks_url":"https://api.github.com/repos/nopSolutions/nopCommerce/hooks","issue_events_url":"https://api.github.com/repos/nopSolutions/nopCommerce/issues/events{/number}","events_url":"https://api.github.com/repos/nopSolutions/nopCommerce/events","assignees_url":"https://api.github.com/repos/nopSolutions/nopCommerce/assignees{/user}","branches_url":"https://api.github.com/repos/nopSolutions/nopCommerce/branches{/branch}","tags_url":"https://api.github.com/repos/nopSolutions/nopCommerce/tags","blobs_url":"https://api.github.com/repos/nopSolutions/nopCommerce/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nopSolutions/nopCommerce/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nopSolutions/nopCommerce/git/refs{/sha}","trees_url":"https://api.github.com/repos/nopSolutions/nopCommerce/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nopSolutions/nopCommerce/statuses/{sha}","languages_url":"https://api.github.com/repos/nopSolutions/nopCommerce/languages","stargazers_url":"https://api.github.com/repos/nopSolutions/nopCommerce/stargazers","contributors_url":"https://api.github.com/repos/nopSolutions/nopCommerce/contributors","subscribers_url":"https://api.github.com/repos/nopSolutions/nopCommerce/subscribers","subscription_url":"https://api.github.com/repos/nopSolutions/nopCommerce/subscription","commits_url":"https://api.github.com/repos/nopSolutions/nopCommerce/commits{/sha}","git_commits_url":"https://api.github.com/repos/nopSolutions/nopCommerce/git/commits{/sha}","comments_url":"https://api.github.com/repos/nopSolutions/nopCommerce/comments{/number}","issue_comment_url":"https://api.github.com/repos/nopSolutions/nopCommerce/issues/comments{/number}","contents_url":"https://api.github.com/repos/nopSolutions/nopCommerce/contents/{+path}","compare_url":"https://api.github.com/repos/nopSolutions/nopCommerce/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nopSolutions/nopCommerce/merges","archive_url":"https://api.github.com/repos/nopSolutions/nopCommerce/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nopSolutions/nopCommerce/downloads","issues_url":"https://api.github.com/repos/nopSolutions/nopCommerce/issues{/number}","pulls_url":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls{/number}","milestones_url":"https://api.github.com/repos/nopSolutions/nopCommerce/milestones{/number}","notifications_url":"https://api.github.com/repos/nopSolutions/nopCommerce/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nopSolutions/nopCommerce/labels{/name}","releases_url":"https://api.github.com/repos/nopSolutions/nopCommerce/releases{/id}","deployments_url":"https://api.github.com/repos/nopSolutions/nopCommerce/deployments","created_at":"2014-04-09T05:47:50Z","updated_at":"2018-07-05T12:25:48Z","pushed_at":"2018-07-05T12:25:42Z","git_url":"git://github.com/nopSolutions/nopCommerce.git","ssh_url":"git@github.com:nopSolutions/nopCommerce.git","clone_url":"https://github.com/nopSolutions/nopCommerce.git","svn_url":"https://github.com/nopSolutions/nopCommerce","homepage":"https://www.nopcommerce.com","size":584020,"stargazers_count":2470,"watchers_count":2470,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1605,"mirror_url":null,"archived":false,"open_issues_count":296,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1605,"open_issues":296,"watchers":2470,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034"},"html":{"href":"https://github.com/nopSolutions/nopCommerce/pull/3034"},"issue":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/issues/3034"},"comments":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/issues/3034/comments"},"review_comments":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034/comments"},"review_comment":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/pulls/3034/commits"},"statuses":{"href":"https://api.github.com/repos/nopSolutions/nopCommerce/statuses/91492b1d0cf81a83fe0aec5142c8c9ad52884d90"}},"author_association":"NONE"}}
{"actor":{"display_login":"DmitriyKulagin"}}