{"action":"created","comment":{"url":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/comments/24864263","id":24864263,"diff_hunk":"@@ -0,0 +1,271 @@\n+﻿using System;\n+using System.Collections;\n+using System.Collections.Generic;\n+using System.Linq;\n+\n+namespace LibGit2Sharp\n+{\n+    /// <summary>\n+    /// Defines extensions related to file history.\n+    /// Note: These could potentially be moved to the RepositoryExtensions class.\n+    /// </summary>\n+    public static class FileHistoryExtensions\n+    {\n+        /// <summary>\n+        /// Gets the history of the file specified by <code>relativePath</code>.\n+        /// </summary>\n+        /// <param name=\"repo\">The repository.</param>\n+        /// <param name=\"relativePath\">The file's relative path.</param>\n+        /// <returns>The file's history.</returns>\n+        public static FileHistory GetFileHistory(this Repository repo, string relativePath)\n+        {\n+            return new FileHistory(repo.Commits, relativePath);\n+        }\n+\n+        /// <summary>\n+        /// Gets the history of the file specified by <code>relativePath</code>.\n+        /// </summary>\n+        /// <param name=\"repo\">The repository.</param>\n+        /// <param name=\"queryFilter\">The filter to be used in querying commits.</param>\n+        /// <param name=\"relativePath\">The file's relative path.</param>\n+        /// <returns>The file's history.</returns>\n+        public static FileHistory GetFileHistory(this Repository repo, CommitFilter queryFilter, string relativePath)\n+        {\n+            return new FileHistory(repo.Commits, queryFilter, relativePath);\n+        }\n+    }\n+\n+    /// <summary>\n+    /// Represents a file's history of relevant commits or blobs.\n+    /// </summary>\n+    public class FileHistory\n+    {\n+        private readonly IQueryableCommitLog commitLog;\n+        private readonly string relativePath;\n+        private readonly CommitFilter queryFilter;\n+\n+        /// <summary>\n+        /// Initializes a new instance of the <see cref=\"FileHistory\"/> class.\n+        /// </summary>\n+        /// <remarks>\n+        /// This constructor is required in testing contexts.\n+        /// </remarks>\n+        protected FileHistory()\n+        { }\n+\n+        /// <summary>\n+        /// Initializes a new instance of the <see cref=\"FileHistory\"/> class.\n+        /// The commits will be enumerated according in reverse chronological order.\n+        /// </summary>\n+        /// <param name=\"commitLog\">The commit log.</param>\n+        /// <param name=\"relativePath\">The file's relative path.</param>\n+        internal FileHistory(IQueryableCommitLog commitLog, string relativePath)\n+            : this(commitLog, new CommitFilter(), relativePath)\n+        { }\n+\n+        /// <summary>\n+        /// Initializes a new instance of the <see cref=\"FileHistory\"/> class.\n+        /// </summary>\n+        /// <param name=\"commitLog\">The commit log.</param>\n+        /// <param name=\"queryFilter\">The filter to be used in querying commits.</param>\n+        /// <param name=\"relativePath\">The file's relative path.</param>\n+        internal FileHistory(IQueryableCommitLog commitLog, CommitFilter queryFilter, string relativePath)\n+        {\n+            if (commitLog == null)\n+                throw new ArgumentNullException(\"commitLog\");\n+            if (queryFilter == null)\n+                throw new ArgumentNullException(\"queryFilter\");\n+            if (relativePath == null)\n+                throw new ArgumentNullException(\"relativePath\");\n+\n+            this.commitLog = commitLog;\n+            this.relativePath = relativePath;\n+            this.queryFilter = GetCommitFilter(queryFilter);\n+        }\n+\n+        #region Public Interface\n+\n+        /// <summary>\n+        /// Produces the collection of <see cref=\"FileHistoryEntry\"/> instances representing the file history.\n+        /// </summary>\n+        /// <returns>A collection of <see cref=\"FileHistoryEntry\"/> instances.</returns>\n+        public virtual IEnumerable<FileHistoryEntry> RelevantCommits()\n+        {\n+            return RelevantCommits(this.commitLog, this.queryFilter, this.relativePath);\n+        }\n+        \n+        /// <summary>\n+        /// Gets collection of changed <see cref=\"Blob\"/> instances, ignoring commits\n+        /// with which a file was only renamed.\n+        /// </summary>\n+        /// <returns>The collection of changed <see cref=\"Blob\"/> instances.</returns>\n+        public virtual IEnumerable<Blob> RelevantBlobs()\n+        {\n+            List<Blob> blobHistory = new List<Blob>();\n+            Blob lastAddedBlob = null;\n+\n+            foreach (FileHistoryEntry entry in RelevantCommits())\n+            {\n+                Blob blob = entry.Commit.Tree[entry.RelativePath].Target as Blob;\n+                if (blob != null && !blob.Equals(lastAddedBlob))\n+                {\n+                    blobHistory.Add(blob);\n+                    lastAddedBlob = blob;\n+                }\n+            }\n+\n+            return blobHistory;\n+        }\n+\n+        #endregion\n+\n+        /// <summary>\n+        /// Creates a <see cref=\"CommitFilter\"/> from a base filter, setting <see cref=\"CommitFilter.SortBy\"/>\n+        /// to <see cref=\"CommitSortStrategies.Time\"/> and using all other attributes of the base filter.\n+        /// </summary>\n+        /// <param name=\"baseFilter\">The base filter.</param>\n+        /// <returns>A new instance of <see cref=\"CommitFilter\"/>.</returns>\n+        private CommitFilter GetCommitFilter(CommitFilter baseFilter)\n+        {\n+            return new CommitFilter\n+            {\n+                SortBy = CommitSortStrategies.Time,\n+                FirstParentOnly = baseFilter.FirstParentOnly,\n+                Since = baseFilter.Since,\n+                Until = baseFilter.Until\n+            };\n+        }\n+\n+        /// <summary>\n+        /// Creates a <see cref=\"CommitFilter\"/> from a base filter, setting <see cref=\"CommitFilter.SortBy\"/>\n+        /// to <see cref=\"CommitSortStrategies.Time\"/> and <see cref=\"CommitFilter.Since\"/> to the given commit \n+        /// while retaining all other base filter attribute values. \n+        /// </summary>\n+        /// <param name=\"baseFilter\">The base filter.</param>\n+        /// <param name=\"since\">The first <see cref=\"Commit\"/>.</param>\n+        /// <returns>A new instance of <see cref=\"CommitFilter\"/>.</returns>\n+        private CommitFilter GetCommitFilter(CommitFilter baseFilter, Commit since)\n+        {\n+            CommitFilter filter = GetCommitFilter(baseFilter);\n+            filter.Since = since;\n+            return filter;\n+        }\n+\n+        /// <summary>\n+        /// Produces the collection of <see cref=\"FileHistoryEntry\"/> instances representing the history of the\n+        /// file specified by <code>relativePath</code>. Uses the given <see cref=\"CommitFilter\"/> instance to\n+        /// filter the commit log.\n+        /// </summary>\n+        /// <param name=\"commitLog\">The commit log.</param>\n+        /// <param name=\"filter\">The <see cref=\"CommitFilter\"/> to be used in querying commits.</param>\n+        /// <param name=\"relativePath\">The file's relative path.</param>\n+        /// <returns>A list of <see cref=\"FileHistoryEntry\"/> instances.</returns>\n+        private IEnumerable<FileHistoryEntry> RelevantCommits(IQueryableCommitLog commitLog, CommitFilter filter, string relativePath)\n+        {\n+            List<FileHistoryEntry> relevantCommits = new List<FileHistoryEntry>();\n+\n+            // Get all commits containing changes to the named file.\n+            List<Commit> commitRange = GetCommits(commitLog, filter, relativePath);\n+            if (commitRange.Count() > 0)\n+            {\n+                relevantCommits.AddRange(commitRange.Select(c => new FileHistoryEntry(relativePath, c)));\n+\n+                // See whether the file was renamed. Append the next commit ranges as necessary.\n+                string lastSha = commitRange.Last().Tree[relativePath].Target.Sha;\n+                if (lastSha != null)\n+                {\n+                    CommitFilter endOfPreviousRangeFilter = GetCommitFilter(filter, commitRange.Last());\n+                    Commit nextCommit = commitLog.QueryBy(endOfPreviousRangeFilter).Skip(1)","path":"LibGit2Sharp/FileHistory.cs","position":178,"original_position":178,"commit_id":"860506ae74007e4cb6b29494a152b3f7f8d151c0","original_commit_id":"860506ae74007e4cb6b29494a152b3f7f8d151c0","user":{"login":"ThomasBarnekow","id":8481516,"avatar_url":"https://avatars.githubusercontent.com/u/8481516?v=3","gravatar_id":"","url":"https://api.github.com/users/ThomasBarnekow","html_url":"https://github.com/ThomasBarnekow","followers_url":"https://api.github.com/users/ThomasBarnekow/followers","following_url":"https://api.github.com/users/ThomasBarnekow/following{/other_user}","gists_url":"https://api.github.com/users/ThomasBarnekow/gists{/gist_id}","starred_url":"https://api.github.com/users/ThomasBarnekow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThomasBarnekow/subscriptions","organizations_url":"https://api.github.com/users/ThomasBarnekow/orgs","repos_url":"https://api.github.com/users/ThomasBarnekow/repos","events_url":"https://api.github.com/users/ThomasBarnekow/events{/privacy}","received_events_url":"https://api.github.com/users/ThomasBarnekow/received_events","type":"User","site_admin":false},"body":"We probably could and I actually thought about that (because I've written a good number of pure functional transforms for XML and like that style). But I decided to go down this route because I felt it would be easier to read.\r\n\r\nWhat benefits do you see in \"having these like one line chain each line\"?","created_at":"2015-02-17T23:08:14Z","updated_at":"2015-02-17T23:08:14Z","html_url":"https://github.com/libgit2/libgit2sharp/pull/963#discussion_r24864263","pull_request_url":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963","_links":{"self":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/comments/24864263"},"html":{"href":"https://github.com/libgit2/libgit2sharp/pull/963#discussion_r24864263"},"pull_request":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963"}}},"pull_request":{"url":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963","id":29410960,"html_url":"https://github.com/libgit2/libgit2sharp/pull/963","diff_url":"https://github.com/libgit2/libgit2sharp/pull/963.diff","patch_url":"https://github.com/libgit2/libgit2sharp/pull/963.patch","issue_url":"https://api.github.com/repos/libgit2/libgit2sharp/issues/963","number":963,"state":"open","locked":false,"title":"FileHistory Feature","user":{"login":"ThomasBarnekow","id":8481516,"avatar_url":"https://avatars.githubusercontent.com/u/8481516?v=3","gravatar_id":"","url":"https://api.github.com/users/ThomasBarnekow","html_url":"https://github.com/ThomasBarnekow","followers_url":"https://api.github.com/users/ThomasBarnekow/followers","following_url":"https://api.github.com/users/ThomasBarnekow/following{/other_user}","gists_url":"https://api.github.com/users/ThomasBarnekow/gists{/gist_id}","starred_url":"https://api.github.com/users/ThomasBarnekow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThomasBarnekow/subscriptions","organizations_url":"https://api.github.com/users/ThomasBarnekow/orgs","repos_url":"https://api.github.com/users/ThomasBarnekow/repos","events_url":"https://api.github.com/users/ThomasBarnekow/events{/privacy}","received_events_url":"https://api.github.com/users/ThomasBarnekow/received_events","type":"User","site_admin":false},"body":"Based on my research, this feature was discussed in the past but I could not find the functionality in libgit2sharp. As I needed it as well, I implemented it and would like to share it.\r\n\r\nThe ```FileHistory``` class provides a history of commits in which a given file was created, changed, or renamed. Based on that commit history, it also provides the collection of Blobs representing a change of the file's contents, i.e., ignoring renames.\r\n\r\nI've also implemented a ```FileHistoryExtensions```class that provides extension methods for the ```Repository```class. These could potentially be moved to the ```RepositoryExtensions```class.\r\n\r\nUsage would be as follows:\r\n\r\n```\r\nusing (Repository repo = new Repository(repoPath))\r\n{\r\n    FileHistory history = repo.GetFileHistory(relativePath);\r\n    IEnumerable<FileHistoryEntry> relevantCommits = history.RelevantCommits();\r\n    IEnumerable<Blob> relevantBlobs = history.RelevantBlobs();\r\n}\r\n```","created_at":"2015-02-17T00:58:03Z","updated_at":"2015-02-17T23:08:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"84f2be5d026af6f74bb6aa6d94cff8cc751425b2","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963/commits","review_comments_url":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963/comments","review_comment_url":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/comments/{number}","comments_url":"https://api.github.com/repos/libgit2/libgit2sharp/issues/963/comments","statuses_url":"https://api.github.com/repos/libgit2/libgit2sharp/statuses/860506ae74007e4cb6b29494a152b3f7f8d151c0","head":{"label":"ThomasBarnekow:file-history","ref":"file-history","sha":"860506ae74007e4cb6b29494a152b3f7f8d151c0","user":{"login":"ThomasBarnekow","id":8481516,"avatar_url":"https://avatars.githubusercontent.com/u/8481516?v=3","gravatar_id":"","url":"https://api.github.com/users/ThomasBarnekow","html_url":"https://github.com/ThomasBarnekow","followers_url":"https://api.github.com/users/ThomasBarnekow/followers","following_url":"https://api.github.com/users/ThomasBarnekow/following{/other_user}","gists_url":"https://api.github.com/users/ThomasBarnekow/gists{/gist_id}","starred_url":"https://api.github.com/users/ThomasBarnekow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThomasBarnekow/subscriptions","organizations_url":"https://api.github.com/users/ThomasBarnekow/orgs","repos_url":"https://api.github.com/users/ThomasBarnekow/repos","events_url":"https://api.github.com/users/ThomasBarnekow/events{/privacy}","received_events_url":"https://api.github.com/users/ThomasBarnekow/received_events","type":"User","site_admin":false},"repo":{"id":27309232,"name":"libgit2sharp","full_name":"ThomasBarnekow/libgit2sharp","owner":{"login":"ThomasBarnekow","id":8481516,"avatar_url":"https://avatars.githubusercontent.com/u/8481516?v=3","gravatar_id":"","url":"https://api.github.com/users/ThomasBarnekow","html_url":"https://github.com/ThomasBarnekow","followers_url":"https://api.github.com/users/ThomasBarnekow/followers","following_url":"https://api.github.com/users/ThomasBarnekow/following{/other_user}","gists_url":"https://api.github.com/users/ThomasBarnekow/gists{/gist_id}","starred_url":"https://api.github.com/users/ThomasBarnekow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThomasBarnekow/subscriptions","organizations_url":"https://api.github.com/users/ThomasBarnekow/orgs","repos_url":"https://api.github.com/users/ThomasBarnekow/repos","events_url":"https://api.github.com/users/ThomasBarnekow/events{/privacy}","received_events_url":"https://api.github.com/users/ThomasBarnekow/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ThomasBarnekow/libgit2sharp","description":"Git + .Net/Mono = ❤","fork":true,"url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp","forks_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/forks","keys_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/teams","hooks_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/hooks","issue_events_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/issues/events{/number}","events_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/events","assignees_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/assignees{/user}","branches_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/branches{/branch}","tags_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/tags","blobs_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/git/refs{/sha}","trees_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/statuses/{sha}","languages_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/languages","stargazers_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/stargazers","contributors_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/contributors","subscribers_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/subscribers","subscription_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/subscription","commits_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/commits{/sha}","git_commits_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/git/commits{/sha}","comments_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/comments{/number}","issue_comment_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/issues/comments/{number}","contents_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/contents/{+path}","compare_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/merges","archive_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/downloads","issues_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/issues{/number}","pulls_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/pulls{/number}","milestones_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/milestones{/number}","notifications_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/labels{/name}","releases_url":"https://api.github.com/repos/ThomasBarnekow/libgit2sharp/releases{/id}","created_at":"2014-11-29T17:15:57Z","updated_at":"2015-02-15T20:53:13Z","pushed_at":"2015-02-17T11:58:38Z","git_url":"git://github.com/ThomasBarnekow/libgit2sharp.git","ssh_url":"git@github.com:ThomasBarnekow/libgit2sharp.git","clone_url":"https://github.com/ThomasBarnekow/libgit2sharp.git","svn_url":"https://github.com/ThomasBarnekow/libgit2sharp","homepage":"http://libgit2.github.com","size":142790,"stargazers_count":0,"watchers_count":0,"language":"C#","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":"vNext"}},"base":{"label":"libgit2:vNext","ref":"vNext","sha":"9e05f8d2d02aa033683c81e27d098e94c1072a65","user":{"login":"libgit2","id":394745,"avatar_url":"https://avatars.githubusercontent.com/u/394745?v=3","gravatar_id":"","url":"https://api.github.com/users/libgit2","html_url":"https://github.com/libgit2","followers_url":"https://api.github.com/users/libgit2/followers","following_url":"https://api.github.com/users/libgit2/following{/other_user}","gists_url":"https://api.github.com/users/libgit2/gists{/gist_id}","starred_url":"https://api.github.com/users/libgit2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/libgit2/subscriptions","organizations_url":"https://api.github.com/users/libgit2/orgs","repos_url":"https://api.github.com/users/libgit2/repos","events_url":"https://api.github.com/users/libgit2/events{/privacy}","received_events_url":"https://api.github.com/users/libgit2/received_events","type":"Organization","site_admin":false},"repo":{"id":1415168,"name":"libgit2sharp","full_name":"libgit2/libgit2sharp","owner":{"login":"libgit2","id":394745,"avatar_url":"https://avatars.githubusercontent.com/u/394745?v=3","gravatar_id":"","url":"https://api.github.com/users/libgit2","html_url":"https://github.com/libgit2","followers_url":"https://api.github.com/users/libgit2/followers","following_url":"https://api.github.com/users/libgit2/following{/other_user}","gists_url":"https://api.github.com/users/libgit2/gists{/gist_id}","starred_url":"https://api.github.com/users/libgit2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/libgit2/subscriptions","organizations_url":"https://api.github.com/users/libgit2/orgs","repos_url":"https://api.github.com/users/libgit2/repos","events_url":"https://api.github.com/users/libgit2/events{/privacy}","received_events_url":"https://api.github.com/users/libgit2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/libgit2/libgit2sharp","description":"Git + .Net/Mono = ❤","fork":false,"url":"https://api.github.com/repos/libgit2/libgit2sharp","forks_url":"https://api.github.com/repos/libgit2/libgit2sharp/forks","keys_url":"https://api.github.com/repos/libgit2/libgit2sharp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/libgit2/libgit2sharp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/libgit2/libgit2sharp/teams","hooks_url":"https://api.github.com/repos/libgit2/libgit2sharp/hooks","issue_events_url":"https://api.github.com/repos/libgit2/libgit2sharp/issues/events{/number}","events_url":"https://api.github.com/repos/libgit2/libgit2sharp/events","assignees_url":"https://api.github.com/repos/libgit2/libgit2sharp/assignees{/user}","branches_url":"https://api.github.com/repos/libgit2/libgit2sharp/branches{/branch}","tags_url":"https://api.github.com/repos/libgit2/libgit2sharp/tags","blobs_url":"https://api.github.com/repos/libgit2/libgit2sharp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/libgit2/libgit2sharp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/libgit2/libgit2sharp/git/refs{/sha}","trees_url":"https://api.github.com/repos/libgit2/libgit2sharp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/libgit2/libgit2sharp/statuses/{sha}","languages_url":"https://api.github.com/repos/libgit2/libgit2sharp/languages","stargazers_url":"https://api.github.com/repos/libgit2/libgit2sharp/stargazers","contributors_url":"https://api.github.com/repos/libgit2/libgit2sharp/contributors","subscribers_url":"https://api.github.com/repos/libgit2/libgit2sharp/subscribers","subscription_url":"https://api.github.com/repos/libgit2/libgit2sharp/subscription","commits_url":"https://api.github.com/repos/libgit2/libgit2sharp/commits{/sha}","git_commits_url":"https://api.github.com/repos/libgit2/libgit2sharp/git/commits{/sha}","comments_url":"https://api.github.com/repos/libgit2/libgit2sharp/comments{/number}","issue_comment_url":"https://api.github.com/repos/libgit2/libgit2sharp/issues/comments/{number}","contents_url":"https://api.github.com/repos/libgit2/libgit2sharp/contents/{+path}","compare_url":"https://api.github.com/repos/libgit2/libgit2sharp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/libgit2/libgit2sharp/merges","archive_url":"https://api.github.com/repos/libgit2/libgit2sharp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/libgit2/libgit2sharp/downloads","issues_url":"https://api.github.com/repos/libgit2/libgit2sharp/issues{/number}","pulls_url":"https://api.github.com/repos/libgit2/libgit2sharp/pulls{/number}","milestones_url":"https://api.github.com/repos/libgit2/libgit2sharp/milestones{/number}","notifications_url":"https://api.github.com/repos/libgit2/libgit2sharp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/libgit2/libgit2sharp/labels{/name}","releases_url":"https://api.github.com/repos/libgit2/libgit2sharp/releases{/id}","created_at":"2011-02-26T16:44:49Z","updated_at":"2015-02-17T09:10:49Z","pushed_at":"2015-02-17T14:19:05Z","git_url":"git://github.com/libgit2/libgit2sharp.git","ssh_url":"git@github.com:libgit2/libgit2sharp.git","clone_url":"https://github.com/libgit2/libgit2sharp.git","svn_url":"https://github.com/libgit2/libgit2sharp","homepage":"http://libgit2.github.com","size":204267,"stargazers_count":709,"watchers_count":709,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":285,"mirror_url":null,"open_issues_count":122,"forks":285,"open_issues":122,"watchers":709,"default_branch":"vNext"}},"_links":{"self":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963"},"html":{"href":"https://github.com/libgit2/libgit2sharp/pull/963"},"issue":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/issues/963"},"comments":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/issues/963/comments"},"review_comments":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963/comments"},"review_comment":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/pulls/963/commits"},"statuses":{"href":"https://api.github.com/repos/libgit2/libgit2sharp/statuses/860506ae74007e4cb6b29494a152b3f7f8d151c0"}}}}