public static async Task Testje2()
        {
            var config            = ConfigHelper.GetConfig();
            var gitOctoKitHandler = new GitOctoKitHandler(config);
            //Directory.SetCurrentDirectory(@"C:\XWOP\test-image-optimization");
            //var git = new GitHandler(config);

            //await git.PullRequest("HOI", "DOEI");


            var pr = await gitOctoKitHandler.GetPullRequest("desjoerd", "test-image-optimization");

            var pullRequestUpdate = new PullRequestUpdate()
            {
                Body = "hoihoi"
            };

            var res = await gitOctoKitHandler.GitHubClient.PullRequest.Update("desjoerd", "test-image-optimization", 6, pullRequestUpdate);

            //var pr = github.PullRequest;


            //var repo = await github.Repository.Get("antonfirsov", "Imagesharp.Tests.Images");

            //var fff = await github.Search.SearchIssues(new SearchIssuesRequest("state%3Aopen+author%3Adevedse+type%3Apr"));

            //var apiOptions = new ApiOptions()
            //{

            //};
            //var aaa = new PullRequestRequest() { State = ItemStateFilter.Open };

            //var prrr = await github.PullRequest.GetAllForRepository("antonfirsov", "Imagesharp.Tests.Images", aaa);
            //var user = await github.User.Get("devedse");
        }
Пример #2
0
        public async Task <WopResult> GoOptimize(bool cleanupAfterwards, Repository repository, string branchName = null)
        {
            var repositoryOwner = repository.Owner.Login;
            var repositoryName  = repository.Name;

            var myUser = await _gitOctoKitHandler.GitHubClient.User.Current();

            await _git.ConfigureGitCredentials();

            Console.WriteLine($"{repositoryOwner}/{repositoryName} is being optimized...");
            Console.WriteLine();

            string dirOfClonedRepos = _wopConfig.ClonedRepositoriesDirectoryName;

            if (!Path.IsPathRooted(dirOfClonedRepos))
            {
                dirOfClonedRepos = Path.Combine(FolderHelperMethods.Internal_AssemblyDirectory.Value, _wopConfig.ClonedRepositoriesDirectoryName);
            }

            Directory.CreateDirectory(dirOfClonedRepos);
            Directory.SetCurrentDirectory(dirOfClonedRepos);

            var clonedRepo = await _git.GitClone(dirOfClonedRepos, repositoryOwner, repositoryName);

            Directory.SetCurrentDirectory(clonedRepo);

            try
            {
                var repositoryInfo = await _gitOctoKitHandler.GitHubClient.Repository.Get(repositoryOwner, repositoryName);

                if (branchName == null)
                {
                    branchName = repositoryInfo.DefaultBranch;
                    if (branchName == null)
                    {
                        throw new Exception("ERROR, couldn't determine branchname");
                    }
                }

                await _git.RunHubCommand("fork");

                await _git.RunHubCommand($"remote set-url {_wopConfig.GitHubUserName} https://github.com/{_wopConfig.GitHubUserName}/{repositoryName}.git");

                //Fetch everything in my repository
                await _git.RunHubCommand("fetch --all");

                //Go to master
                await _git.RunHubCommand($"checkout {_wopConfig.GitHubUserName}/{branchName}");

                await _git.RunHubCommand($"merge --strategy-option=theirs origin/{branchName}");

                await _git.RunHubCommand($"push {_wopConfig.GitHubUserName} HEAD:{branchName}");

                var wasAbleToAddTrackedBranch = await _git.RunHubCommand($"checkout --track -b {Constants.FeatureName} {_wopConfig.GitHubUserName}/{Constants.FeatureName}");

                if (wasAbleToAddTrackedBranch.ExitCode == 0)
                {
                    await _git.RunHubCommand($"merge --strategy-option=theirs {_wopConfig.GitHubUserName}/{branchName}");

                    await _git.RunHubCommand($"push {_wopConfig.GitHubUserName} {Constants.FeatureName} -u");
                }
                else
                {
                    var createdNewBranch = await _git.RunHubCommand($"checkout -b {Constants.FeatureName}");

                    if (createdNewBranch.ExitCode == 0)
                    {
                    }
                    else
                    {
                        await _git.RunHubCommand($"checkout {Constants.FeatureName}");

                        await _git.RunHubCommand($"merge --strategy-option=theirs {_wopConfig.GitHubUserName}/{branchName}");
                    }
                    await _git.RunHubCommand($"push {_wopConfig.GitHubUserName} {Constants.FeatureName} -u");
                }

                var optimizedFileResults = await GoOptimize(clonedRepo, _wopConfig);

                //var optimizedFileResults = await GoOptimizeStub(clonedRepo, config);

                await _git.RunHubCommand("add .");

                var descriptionForCommit = TemplatesHandler.GetDescriptionForCommit();
                await _git.Commit("Wop optimized this repository", descriptionForCommit);

                await _git.RunHubCommand($"push");

                var descriptionForPullRequest = TemplatesHandler.GetDescriptionForPullRequest();

                var successfulOptimizations = optimizedFileResults.Any(t => t.OptimizationResult == OptimizationResult.Success && t.OriginalSize > t.OptimizedSize);

                var retval = new WopResult()
                {
                    OptimizedFiles = optimizedFileResults
                };

                //Only create pull request if there were actually any successful optimizations
                if (successfulOptimizations)
                {
                    PullRequest obtainedPullRequest = await _gitOctoKitHandler.GetPullRequest(repositoryOwner, repositoryName);

                    if (obtainedPullRequest == null)
                    {
                        var pr = new NewPullRequest("The Web Optimization Project has optimized your repository!", $"{_wopConfig.GitHubUserName}:{Constants.FeatureName}", branchName)
                        {
                            Body = descriptionForPullRequest
                        };
                        obtainedPullRequest = await _gitOctoKitHandler.GitHubClient.PullRequest.Create(repositoryOwner, repositoryName, pr);
                    }
                    Console.WriteLine($"Using PR: {obtainedPullRequest.Url}");

                    var descriptionForCommitInPr = TemplatesHandler.GetCommitDescriptionForPullRequest(clonedRepo, branchName, optimizedFileResults, DateTime.UtcNow.ToString());
                    Console.WriteLine($"Creating comment on pr with length {descriptionForCommitInPr.Length}...");
                    var createdComment = await _gitOctoKitHandler.GitHubClient.Issue.Comment.Create(repositoryOwner, repositoryName, obtainedPullRequest.Number, descriptionForCommitInPr);

                    Console.WriteLine($"Comment created: {createdComment.Url}");

                    retval.CreatedPullRequest = obtainedPullRequest;
                }

                Console.WriteLine();
                Console.WriteLine($"{repositoryOwner}/{repositoryName} is optimized :)");
                Console.WriteLine();

                return(retval);
            }
            finally
            {
                if (cleanupAfterwards)
                {
                    Console.WriteLine($"Cleaning up local files '{clonedRepo}'...");
                    Directory.SetCurrentDirectory(dirOfClonedRepos);
                    CleanupRecursively(clonedRepo);
                    //Directory.Delete(clonedRepo, true);
                    Console.WriteLine($"Directory {clonedRepo} removed.");
                }
            }
        }
Пример #3
0
        public static async Task GoOptimize(string repositoryOwner, string repositoryName, string branchName = null)
        {
            Console.WriteLine($"{repositoryOwner}/{repositoryName} is being optimized...");
            Console.WriteLine();

            var config            = ConfigHelper.GetConfig();
            var gitOctoKitHandler = new GitOctoKitHandler(config);

            string dirOfClonedRepos = config.ClonedRepositoriesDirectoryName;

            if (!Path.IsPathRooted(dirOfClonedRepos))
            {
                dirOfClonedRepos = Path.Combine(FolderHelperMethods.EntryAssemblyDirectory.Value, config.ClonedRepositoriesDirectoryName);
            }

            Directory.CreateDirectory(dirOfClonedRepos);
            Directory.SetCurrentDirectory(dirOfClonedRepos);
            var git = new GitCommandLineHandler(config);

            var clonedRepo = await git.GitClone(dirOfClonedRepos, repositoryOwner, repositoryName);

            Directory.SetCurrentDirectory(clonedRepo);

            if (branchName == null)
            {
                branchName = await git.GetHeadBranch();

                if (branchName == null)
                {
                    throw new Exception("ERROR, couldn't determine branchname");
                }
            }

            await git.RunHubCommand("fork");

            await git.RunHubCommand($"remote set-url {config.GithubUserName} https://github.com/{config.GithubUserName}/{repositoryName}.git");

            //Fetch everything in my repository
            await git.RunHubCommand("fetch --all");

            //Go to master
            await git.RunHubCommand($"checkout {config.GithubUserName}/{branchName}");

            await git.RunHubCommand($"merge --strategy-option=theirs origin/{branchName}");

            await git.RunHubCommand($"push {config.GithubUserName} HEAD:{branchName}");

            var wasAbleToAddTrackedBranch = await git.RunHubCommand($"checkout --track -b {Constants.FeatureName} {config.GithubUserName}/{Constants.FeatureName}");

            if (wasAbleToAddTrackedBranch == 0)
            {
                await git.RunHubCommand($"merge --strategy-option=theirs {config.GithubUserName}/{branchName}");

                await git.RunHubCommand($"push {config.GithubUserName} {Constants.FeatureName} -u");
            }
            else
            {
                var createdNewBranch = await git.RunHubCommand($"checkout -b {Constants.FeatureName}");

                if (createdNewBranch == 0)
                {
                }
                else
                {
                    await git.RunHubCommand($"checkout {Constants.FeatureName}");

                    await git.RunHubCommand($"merge --strategy-option=theirs {config.GithubUserName}/{branchName}");
                }
                await git.RunHubCommand($"push {config.GithubUserName} {Constants.FeatureName} -u");
            }

            var optimizedFileResults = await GoOptimize(clonedRepo, config);

            //var optimizedFileResults = await GoOptimizeStub(clonedRepo, config);

            await git.RunHubCommand("add .");

            var descriptionForCommit = await TemplatesHandler.GetDescriptionForCommit();

            await git.Commit("Wop optimized this repository", descriptionForCommit);

            await git.RunHubCommand($"push");

            var descriptionForPullRequest = await TemplatesHandler.GetDescriptionForPullRequest();

            //Only create pull request if there were actually any successful optimizations
            if (optimizedFileResults.Any(t => t.Successful) && optimizedFileResults.Sum(t => t.OriginalSize) > optimizedFileResults.Sum(t => t.OptimizedSize))
            {
                var pullRequestState = await git.PullRequest("The Web Optimization Project has optimized your repository!", descriptionForPullRequest);

                Console.WriteLine("Pullrequeststate: " + pullRequestState);

                PullRequest obtainedPullRequest = null;
                for (int i = 0; i < 3; i++)
                {
                    obtainedPullRequest = await gitOctoKitHandler.GetPullRequest(repositoryOwner, repositoryName);

                    if (obtainedPullRequest != null)
                    {
                        break;
                    }
                    Console.WriteLine("Couldn't find Pull Request. Waiting and retrying...");
                    await Task.Delay(10000);
                }

                Console.WriteLine($"Found pull request: {obtainedPullRequest.HtmlUrl}");

                var commitIdentifier = "### Commit ";
                var splittedBody     = obtainedPullRequest.Body.Split('\n');
                var commitCount      = splittedBody.Count(t => t.StartsWith(commitIdentifier));

                var descriptionForCommitInPr = await TemplatesHandler.GetCommitDescriptionForPullRequest(clonedRepo, branchName, optimizedFileResults, commitCount + 1);

                var bodySb = new StringBuilder(obtainedPullRequest.Body);
                bodySb.AppendLine();
                bodySb.AppendLine();
                bodySb.AppendLine(descriptionForCommitInPr);

                var pullRequestUpdate = new PullRequestUpdate()
                {
                    Body = bodySb.ToString()
                };

                await gitOctoKitHandler.GitHubClient.PullRequest.Update(repositoryOwner, repositoryName, obtainedPullRequest.Number, pullRequestUpdate);
            }

            Console.WriteLine();
            Console.WriteLine($"{repositoryOwner}/{repositoryName} is optimized :)");
            Console.WriteLine();
        }