Exemple #1
0
        public async Task <List <GitHubFile> > GetFiles(GitHubRepo repository, string path, Func <GitHubFile, bool> exp)
        {
            const string pathParam = "{+path}";

            string contentUrl;

            if (string.IsNullOrEmpty(path))
            {
                contentUrl = repository.ContentsUrl.Substring(0,
                                                              repository.ContentsUrl.Length -
                                                              pathParam.Length);
            }
            else
            {
                contentUrl = repository.ContentsUrl.Replace(pathParam, path);
            }

            var response = await _httpClient.GetAsync(contentUrl);

            var content = await response.Content.ReadAsStringAsync();

            var files = JsonConvert.DeserializeObject <List <GitHubFile> >(content);

            return(files.Where(exp).ToList());
        }
Exemple #2
0
        public async Task <List <GitHubFile> > GetCsProjFiles(GitHubRepo repository)
        {
            var files     = new List <GitHubFile>();
            var rootFiles = await GetFiles(repository, "src", f => f.IsDir());

            if (!rootFiles.Any())
            {
                return(files);
            }

            // This assumes the solution follows the usual structure
            var secondLevelDirectories = rootFiles.Where(x => x.IsDir());

            var getFilesTasks = new List <Task <List <GitHubFile> > >();

            foreach (var dir in secondLevelDirectories)
            {
                try
                {
                    var getCsProjFilesTask = GetFiles(repository, dir.Path, f => f.IsCsProj());
                    getFilesTasks.Add(getCsProjFilesTask);
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error parsing files for {dir}");
                    Console.WriteLine(e);
                }
            }

            var tasksResult = await Task.WhenAll(getFilesTasks);

            var csProjFiles = tasksResult.SelectMany(x => x).ToList();

            return(csProjFiles);
        }
        public async void UpdatePullRequests(ItemState?state)
        {
            try
            {
                if (null == _gitHubRepoHelper)
                {
                    _gitHubRepoHelper = new GitHubRepo(Settings.Default.GitHubRepoOwner, Settings.Default.GitHubUserName, Settings.Default.GitHubToken);
                    _gitHubRepoHelper.GetPullRequestsComplete += CustReports_GetPullRequestComplete;
                }

                await Task.Run(() =>
                {
                    try
                    {
                        _gitHubRepoHelper.GetRequests(state, _daysBack, _repoNames);
                    }
                    catch (Exception ex)
                    {
                        ExceptionHandler(ex);
                    }
                });
            }
            catch (Exception ex)
            {
                ExceptionHandler(ex);
            }
        }
        public IMapRepo ToMap(GitHubRepo repo)
        {
            var mp = new MapRepo();

            mp.Name = repo.Name;
            return(mp);
        }
Exemple #5
0
        public T GetGitHubApiData <T>(string url)
        {
            object obj;
            Type   listType = typeof(T);

            if (listType == typeof(GitHubUser))
            {
                obj = new GitHubUser()
                {
                    AvatarUrl = "http://www.example.com",
                    Location  = "england",
                    UserName  = "******"
                };
            }
            else
            {
                var gitHubRepo = new GitHubRepo()
                {
                    RepositoryUrl   = "www.example.com",
                    RepositoryName  = "example",
                    StarGazersCount = 20
                };

                var listOfRepos = new List <GitHubRepo>();
                listOfRepos.Add(gitHubRepo);
                obj = listOfRepos;
            }

            return((T)obj);
        }
Exemple #6
0
        public async Task <IActionResult> RemoveGitRepo([FromBody] dynamic repository)
        {
            var removeRepo = new GitHubRepo
            {
                Id = repository.repository.id
            };
            bool result = await _service.RemoveGitRepository(removeRepo.Id);

            return(Ok(result));
        }
        /// <summary>
        /// gets some data from github api
        /// </summary>
        async void FillGitRepoAsync()
        {
            const string  GitHubIdentity     = "jacekstaniec";
            const string  GitHubProject      = "ITC-WPF";
            GitHubRepo    gtavm              = new GitHubRepo(GitHubIdentity, GitHubProject);
            List <GitHub> myGitHubAttributes = await gtavm.GetGitHubRepoAsync();

            dgGitHub.ItemsSource = null;
            dgGitHub.ItemsSource = myGitHubAttributes;
        }
        public void ToMapTest()
        {
            //arrage
            var githubRepo = new GitHubRepo();

            githubRepo.Name = "repo-1";
            var map = (MapRepo)mapRepo.ToMap(githubRepo);

            Assert.Equal("repo-1", map.Name);
        }
Exemple #9
0
        public async Task <IActionResult> AddGitRepo([FromBody] dynamic repository)
        {
            var newRepo = new GitHubRepo
            {
                Id          = repository.repository.id,
                Name        = repository.repository.name,
                Description = repository.repository.description
            };
            bool result = await _service.AddGitRepository(newRepo);

            return(Ok(result));
        }
 private void CustReports_GetPullRequestComplete(object sender, EventArgs e)
 {
     try
     {
         GitHubRepo repo = (GitHubRepo)sender;
         DisplayPullRequests(repo.PullRequests);
     }
     catch (Exception ex)
     {
         ExceptionHandler(ex);
     }
 }
        private async Task <Project> GetProject(IGitHubClient client, GitHubRepo proj)
        {
            this._logger.LogInformation($"{nameof(GetProject)}: Getting project for '{proj.Owner}/{proj.Name}'...");
            var projects = await client.Repository.Project.GetAllForOrganization(proj.Owner);

            var project = projects.FirstOrDefault(p => p.Name == proj.Name);

            if (project is null)
            {
                throw new ArgumentException($"Project '{proj.Owner}/{proj.Name}' not found");
            }
            return(project);
        }
        public IActionResult Search(String userName)
        {
            List <GitHubRepo> repoList = new List <GitHubRepo>();
            GitHubRepo        repo     = null;

            try
            {
                if (string.IsNullOrEmpty(userName))
                {
                    throw new InvalidOperationException("EmptyInput");
                }
                GitHubRequestHandler handler = new GitHubRequestHandler();
                if (!string.IsNullOrWhiteSpace(userName))
                {
                    String url      = "https://api.github.com/users/" + userName + "/repos";
                    var    releases = handler.GetReleases(url);
                    //List out the retreived releases
                    foreach (JObject release in releases.Children())
                    {
                        Console.WriteLine("name: {0}", release.GetValue("name"));
                        Console.WriteLine("fullname: {0}", release.GetValue("full_name"));
                        Console.WriteLine();
                        repo         = JsonConvert.DeserializeObject <GitHubRepo>(release.ToString(Newtonsoft.Json.Formatting.None));
                        repo.git_url = repo.git_url.Substring(6, repo.git_url.Length - 6);
                        repoList.Add(repo);
                    }

                    GitHubProfile profile = handler.GetReleases1("https://api.github.com/users/" + userName);


                    Console.WriteLine("login: {0}", profile.login);
                    Console.WriteLine("name: {0}", profile.name);
                    ViewData["accountName"] = profile.login;
                    ViewData["date"]        = DateTime.Parse(profile.updated_at).ToString();
                    ViewData["followers"]   = profile.followers;
                    ViewData["following"]   = profile.following;

                    return(View(repoList));
                }
                else
                {
                    Index();
                }
            }catch (Exception e) {}



            return(View("404"));
        }
        public static GitHubRepo MapToModel(GitHubRepoViewModel vm)
        {
            if (vm == null)
                return null;

            GitHubRepo repoModel = new GitHubRepo();
            repoModel.Name = vm.Name;
            repoModel.Description = vm.Description;
            repoModel.Language = vm.Language;
            repoModel.OwnerAvatarUrl = vm.OwnerAvatarUrl;
            repoModel.OwnerName = vm.OwnerLogin;
            repoModel.GitHubRepoId = vm.GitHubRepoId;

            return repoModel;
        }
Exemple #14
0
        public async Task <IActionResult> TypedClient2()
        {
            GitHubRepo gitHubRepo = new GitHubRepo();

            try
            {
                var repos = await _repoService.GetRepos();

                gitHubRepo.GetRepoRequestsError = false;
                gitHubRepo.RepoRequests         = repos;
            }
            catch (HttpRequestException ex)
            {
                gitHubRepo.GetRepoRequestsError = true;
                gitHubRepo.RepoRequests         = Array.Empty <string>();
            }
            return(View(gitHubRepo));
        }
        public static GitHubRepoViewModel MapToViewModel(GitHubRepo repo, IEnumerable<GitHubUserDTO> contributors)
        {
            if (repo == null)
                return null;

            GitHubRepoViewModel vm = new GitHubRepoViewModel();
            vm.Name = repo.Name;
            vm.Description = repo.Description;
            vm.Language = repo.Language;
            vm.Updated_at = repo.UpdatedAt.ToString();
            vm.OwnerLogin = repo.OwnerName;
            vm.OwnerAvatarUrl = repo.OwnerAvatarUrl;
            vm.GitHubRepoId = repo.GitHubRepoId;
            if (contributors != null)
                vm.Contributors = contributors.ToList();

            return vm;
        }
        public async Task <bool> AddRepository(GitHubRepo repository)
        {
            bool result  = false;
            var  newRepo = _db.GetCollection <GitHubRepo>("ChipinoGitRepos");

            try
            {
                await newRepo.InsertOneAsync(repository);

                result = true;
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message);
            }

            return(result);
        }
        private async Task <Milestone> GetOrCreateDefaultMilestone(GitHubClient client, GitHubRepo repo)
        {
            this._logger.LogInformation($"{nameof(GetOrCreateDefaultMilestone)}: Getting default milestone '{this._defaultMilestoneName}' for '{repo.Owner}/{repo.Name}'...");
            var milestones = await client.Issue.Milestone.GetAllForRepository(repo.Owner, repo.Name);

            var defaultMilestone = milestones.FirstOrDefault(m => m.Title == this._defaultMilestoneName);

            if (defaultMilestone is null)
            {
                this._logger.LogInformation($"{nameof(GetOrCreateDefaultMilestone)}: Default milestone '{this._defaultMilestoneName}' not found for '{repo.Owner}/{repo.Name}'. Creating one...");
                defaultMilestone = await client.Issue.Milestone.Create(repo.Owner, repo.Name, new NewMilestone(this._defaultMilestoneName));
            }
            else
            {
                this._logger.LogInformation($"{nameof(GetOrCreateDefaultMilestone)}: Found default milestone '{defaultMilestone.Title}[{defaultMilestone.Number}]' for '{repo.Owner}/{repo.Name}'.");
            }
            return(defaultMilestone);
        }
Exemple #18
0
 public Task <bool> AddRepository(GitHubRepo repository)
 {
     throw new NotImplementedException();
 }
Exemple #19
0
 public async Task <bool> AddGitRepository(GitHubRepo repository)
 {
     return(await _ctx.AddRepository(repository));
 }
        public void MarkAsFavoriteService_ReturnsException()
        {
            // Arrange
            var mockGitHubRepoRepository = new Mock<IGitHubRepoRepository>();
            var mockUnitOfWork = new Mock<IUnitOfWork>();

            // create new repo fake
            GitHubRepo repo = new GitHubRepo();

            mockGitHubRepoRepository.Setup(s => s.AddandReturn(repo)).Throws(new System.Exception("Fake exception"));

            var svc = new GitHubRepoService(mockGitHubRepoRepository.Object, mockUnitOfWork.Object);

            // Act
            var repoReturned = svc.MarkAsFavorite(repo);

            // Assert
            // automatic
        }
        public static GitHubSample.Model.GitHubRepo MapDtoToModel(GitHubRepoDTO dto)
        {
            GitHubSample.Model.GitHubRepo repoModel = new GitHubRepo();
            repoModel.Name = dto.name;
            repoModel.Description = dto.description;
            repoModel.GitHubRepoId = dto.id;
            repoModel.Language = dto.language;
            repoModel.OwnerAvatarUrl = dto.owner.AvatarUrl;
            repoModel.OwnerName = dto.owner.Login;
            repoModel.UpdatedAt = ConvertToDateTime(dto.updated_at);

            return repoModel;
        }
        /// <summary>
        /// Unmark repository as favorite, removing from local database
        /// </summary>
        /// <param name="repository"></param>
        public void UnMarkAsFavorite(GitHubRepo repository)
        {
            if (repository == null)
                return;

            try
            {
                this.gitHubRepoRepository.UnMarkAsFavorite(repository);

                this.unitOfWork.Commit();
            }
            catch (Exception)
            {

                throw;
            }
        }
        /// <summary>
        /// Mark repository as favorite, adding to local database
        /// </summary>
        /// <param name="repository"></param>
        /// <returns></returns>
        public GitHubRepo MarkAsFavorite(GitHubRepo repository)
        {
            if (repository == null)
                return null;

            try
            {
                var ret = this.gitHubRepoRepository.AddandReturn(repository);

                this.unitOfWork.Commit();

                return ret;
            }
            catch (Exception)
            {

                throw;
            }
        }
        private async Task SetDefaultMilestone(GitHubClient client, IEnumerable <Issue> issues, GitHubRepo repo)
        {
            var defaultMilestone = await this.GetOrCreateDefaultMilestone(client, repo);

            foreach (var issue in issues)
            {
                this._logger.LogInformation($"{nameof(SetDefaultMilestone)}: Setting default milestone for issue '{issue.Number}'...");
                await client.Issue.Update(repo.Owner, repo.Name, issue.Number, issue.ToUpdate().SetMilestone(defaultMilestone));
            }
        }
Exemple #25
0
        private bool UpdateGithub(Dependency dependency, CommitVersion version, Action <string> eventMessage)
        {
            var gh = new GitHubRepo(new StringUtils().SetGithubToken(dependency.GithubHttp, token, userGithub), this.branch, this.userGithub, this.mail);

            string folder;

            try
            {
                folder = gh.Clone();
            }
            catch (Exception e)
            {
                eventMessage?.Invoke($"{dependency.PackageName} fallo al clonar con la rama {branch}  desde {dependency.GithubHttp}");
                eventMessage?.Invoke($"este es el mensaje de error:");
                eventMessage?.Invoke($"{e.Message}");
                return(false);
            }

            eventMessage?.Invoke($"-------------------------------------------------------------------------------");
            eventMessage?.Invoke($"{dependency.PackageName} es clonado en la carpeta temporal  desde {dependency.GithubHttp}");
            eventMessage?.Invoke($"-------------------------------------------------------------------------------");
            eventMessage?.Invoke($"{folder}");
            eventMessage?.Invoke($"-------------------------------------------------------------------------------");
            eventMessage?.Invoke($" Desde url Github : {dependency.GithubHttp}");
            eventMessage?.Invoke($"-------------------------------------------------------------------------------");



            string contentFile;

            eventMessage?.Invoke($"Se obtiene {dependency.pathPackageSettings}");
            eventMessage?.Invoke($"-------------------------------------------------------------------------------");
            eventMessage?.Invoke($"-------------------------------------------------------------------------------");
            if (packageType == PackageType.npm)
            {
                contentFile = SetPackageJsonNpmVersion(dependency, version, folder);
            }
            else
            {
                contentFile = SetCsProjNugetVersion(dependency, version, folder);
            }
            eventMessage?.Invoke($"{dependency.pathPackageSettings} procesado");

            Exception exception = null;

            var intentos = 0;

            while (intentos <= 3)
            {
                try
                {
                    gh.SaveFile(dependency.pathPackageSettings, $"{packageName}.{version}", contentFile);
                }
                catch (Exception exc)
                {
                    if (exc.Message.ToLower().Contains("nothing to commit"))
                    {
                        break;
                    }
                    exception = exc;
                    Thread.Sleep(2000);
                    gh.Cloned = string.Empty;
                    intentos++;
                    try
                    {
                        folder = gh.Clone();
                    }
                    catch (Exception e)
                    {
                        eventMessage?.Invoke($"{dependency.PackageName} fallo al clonar con la rama {branch}  desde {dependency.GithubHttp}");
                        eventMessage?.Invoke($"este es el mensaje de error:");
                        eventMessage?.Invoke($"{e.Message}");
                    }



                    if (packageType == PackageType.npm)
                    {
                        contentFile = SetPackageJsonNpmVersion(dependency, version, folder);
                    }
                    else
                    {
                        contentFile = SetCsProjNugetVersion(dependency, version, folder);
                    }

                    eventMessage?.Invoke($"Se limpia carpeta temporal para reintento = {intentos}, mensaje  = {exc.Message}");
                }
            }
            if (exception != null)
            {
                throw exception;
            }


            eventMessage?.Invoke($"El paquete {dependency.PackageName} ha actualizado {packageName} a {version}");
            return(true);
        }
        public static GitHubRepo GetRepoByName(string owner, string repoName)
        {
            if ((owner == null) || (repoName == null))
                return null;

            // MOCK
            string desc = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknow";
            string avatar_url = "https://avatars1.githubusercontent.com/u/167455?v=3&s=400";

            GitHubRepo repoModel = new GitHubRepo();
            repoModel.Name = repoName;
            repoModel.Description = desc;
            repoModel.Language = "javascript";
            repoModel.UpdatedAt = new DateTime(2015, 1, 25);
            repoModel.OwnerName = owner;
            repoModel.OwnerAvatarUrl = avatar_url;
            repoModel.GitHubRepoId = 1;

            return repoModel;
        }