public IRepositoryData LoadFrom(string gitRepository)
        {
            IRepositoryDataBuilder builder = _dataBuilderFactory.CreateBuilder();

            using (IGitRepository repository = _repositoryFactory.Open(gitRepository))
            {
                PopulateBuilder(builder, repository);
            }

            IRepositoryData data = builder.Build();

            return(data);
        }
        private void PopulateBuilder(IRepositoryDataBuilder builder, IGitRepository repo)
        {
            // Commits
            foreach (IGitCommit c in repo.Commits)
            {
                string[] parentShas = c.Parents.Select(p => p.Sha).ToArray();

                builder.AddCommit(c.Sha, parentShas, c.Author, c.Committer, c.Message);
            }

            // Remotes
            foreach (IGitRemote r in repo.Remotes)
            {
                builder.AddRemote(r.Name, r.Url);
            }

            // Branches
            foreach (IGitBranch b in repo.Branches)
            {
                if (!b.IsRemote)
                {
                    continue;
                }

                if (b.UpstreamCanonicalName == "refs/heads/HEAD")
                {
                    // No HEAD.
                    continue;
                }

                builder.AddRemoteBranch(b.FriendlyName, b.Tip.Sha);
            }

            // Tags
            foreach (IGitTag t in repo.TagsOnCommits)
            {
                builder.AddTag(t.FriendlyName, t.Tip.Sha);
            }
        }