Exemplo n.º 1
0
        protected void SetReleaseDefinitions(string name)
        {
            Classes.VSTS.VstsReleaseDefinitions defs = null;

            try
            {
                if (!_inReleaseProcess)
                {
                    if (!_cache.TryGetValue(CACHE.RELEASES, out defs))
                    {
                        _inReleaseProcess = true;

                        var options = new MemoryCacheEntryOptions().SetPriority(CacheItemPriority.NeverRemove);

                        var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
                        var temp = vsts.GetDetailedReleaseDefinitions(name);

                        _cache.Set(CACHE.RELEASES, temp, options);

                        _inReleaseProcess = false;
                    }
                }
            }
            catch (System.Exception e)
            {
                System.Diagnostics.Debug.WriteLine("Releases -> " + e.Message);
            }
        }
Exemplo n.º 2
0
        protected void SetBuildDefinitions(string name)
        {
            Classes.VSTS.VstsBuildDefinitions defs;

            try
            {
                if (!_inBuildProcess)
                {
                    if (!_cache.TryGetValue(CACHE.BUILDS, out defs))
                    {
                        _inBuildProcess = true;

                        var options = new MemoryCacheEntryOptions().SetPriority(CacheItemPriority.NeverRemove);

                        var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
                        var temp = vsts.GetDetiledBuildDefinitions(name);

                        _cache.Set(CACHE.BUILDS, temp, options);

                        _inBuildProcess = false;
                    }
                }
            }
            catch (System.Exception e)
            {
                System.Diagnostics.Debug.WriteLine("Builds -> " + e.Message);
            }
//            _cache.TryGetValue(CACHE.BUILDS, out defs);
//            var x = defs;
        }
Exemplo n.º 3
0
        public Classes.VSTS.VstsBranches GetRepositoryFeatureBranches(string guid)
        {
            var fbprefix = _settings.Setting.GetSection("FeatureBranchPrefix").Value ?? "feature/";
//            if (fbprefix.EndsWith("/"))
//                fbprefix = fbprefix.Substring(0, fbprefix.Length - 1);

            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            return(vsts.GetRepositoryFeatureBranches(guid, fbprefix));
        }
Exemplo n.º 4
0
        public JsonResult RemoveRepository(string guid)
        {
            var startingFolder = string.Empty;
            var repoName       = string.Empty;

            try
            {
                var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
                var repo = vsts.GetRepositoryOnGuid(guid);

                repoName = repo.Name;

                CreateStartingFolder(ref startingFolder);

                // See or create sub-folder based on PROJECT name

                if (System.IO.Directory.Exists(startingFolder))
                {
                    CreateStartingProjectFolder(ref startingFolder);

                    // Now clear the repo folder if there
                    if (System.IO.Directory.Exists(startingFolder))
                    {
                        ClearFolder(startingFolder + $"\\{repoName}");
                    }

                    if (System.IO.Directory.Exists(startingFolder + $"\\{repoName}"))
                    {
                        System.IO.Directory.Delete(startingFolder + $"\\{repoName}");
                    }

                    if (System.IO.Directory.Exists(startingFolder + $"\\{repoName}"))
                    {
                        return(Json(new JsonMessage(false, $"Failed to delete [{repoName}]")));
                    }
                    else
                    {
                        return(Json(new JsonMessage(true, repoName + " folder and code : REMOVED")));
                    }
                }
                else
                {
                    return(Json(new JsonMessage(false, $"Failed to delete [{repoName}]")));
                }
            }
            catch (System.Exception ex)
            {
                return(Json(new JsonMessage(false, $"Failed to delete [{repoName}]- [{ex.Message}]")));
            }
        }
Exemplo n.º 5
0
        public IActionResult RebuildReleaseDefinitions()
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            ViewBag.RepoCount = vsts.GetRepos(HttpContext.Session.GetString(Session.SELECTED_PROJ)).Count;

            if (!_inReleaseProcess)
            {
                var options = new MemoryCacheEntryOptions().SetPriority(CacheItemPriority.NeverRemove);
                _cache.Remove(CACHE.RELEASES);
                ConstructReleaseDefinitions();
                //                Task.Run(() => SetReleaseDefinitions(HttpContext.Session.GetString(Session.SELECTED_PROJ)));
            }
            return(View("ProjectRepositories"));
        }
Exemplo n.º 6
0
        public IActionResult FoundProject([DataSourceRequest] DataSourceRequest request, string project)
        {
            _logger.LogInformation("This is a test");

            ViewBag.Project = project;

            HttpContext.Session.SetString(Session.SELECTED_PROJ, project);
            HttpContext.Session.SetString(Session.HEARTBEAT, System.DateTime.Now.ToString());

            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            ViewBag.RepoCount = vsts.GetRepos(project).Count;

            Task.Run(() => SetBuildDefinitions(project));
            Task.Run(() => SetReleaseDefinitions(project));

            return(View("ProjectRepositories"));
        }
Exemplo n.º 7
0
        public IActionResult GetRepos([DataSourceRequest] DataSourceRequest request, string projectName)
        {
            var startingFolder          = string.Empty;
            List <RepositoryVM> results = new List <RepositoryVM>();

            try
            {
                CreateStartingFolder(ref startingFolder);

                var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));


                var repos = vsts.GetRepos(projectName);
                var items = repos.Repositories.OrderBy(t => t.Name).ToList();
                Parallel.ForEach(items, new ParallelOptions {
                    MaxDegreeOfParallelism = 1
                }, item =>
                {
                    var toAdd = new RepositoryVM()
                    {
                        Guid            = item.Guid,
                        Name            = item.Name,
                        Url             = item.RemoteUrl,
                        DefaultBranch   = item.DefaultBranch,
                        DirectoryOnDisk = false
                    };
                    if (System.IO.Directory.Exists(startingFolder))
                    {
                        var projectStartingFolder = startingFolder;
                        CreateStartingProjectFolder(ref projectStartingFolder);
                        if (System.IO.Directory.Exists(startingFolder))
                        {
                            toAdd.DirectoryOnDisk = System.IO.Directory.Exists(projectStartingFolder + @"\" + item.Name);
                        }
                    }
                    results.Add(toAdd);
                });
            }
            catch (System.Exception foo)
            {
                System.Diagnostics.Debug.WriteLine($"Get Repos: {foo.Message}");
            }
            return(Json(results.ToDataSourceResult(request)));
        }
Exemplo n.º 8
0
        public IActionResult RebuildBuildDefinitions()
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            ViewBag.RepoCount = vsts.GetRepos(HttpContext.Session.GetString(Session.SELECTED_PROJ)).Count;

            try
            {
                if (!_inBuildProcess)
                {
                    var options = new MemoryCacheEntryOptions().SetPriority(CacheItemPriority.NeverRemove);
                    _cache.Remove(CACHE.BUILDS);
                    ConstructBuildDefinitions();
//                    var background = Task.Run(() => SetBuildDefinitions(HttpContext.Session.GetString(Session.SELECTED_PROJ)));
                }
            }
            catch (System.Exception exx)
            {
                System.Diagnostics.Debug.WriteLine($"Rebuild Build Definitions:  {exx.Message}");
            }
            return(View("ProjectRepositories"));
        }
        public JsonResult DeleteBranch([DataSourceRequest] DataSourceRequest dsRequest, RepoBranchVM branch)
        {
            if (branch != null && ModelState.IsValid)
            {
                var branchPath  = branch.Name.Split("/");
                var canContinue = true;

                foreach (var bp in branchPath)
                {
                    if (bp == "release" || bp == "master" || bp == "develop" || bp == "tags")
                    {
                        canContinue = false;
                        break;
                    }
                }

                if (!canContinue)
                {
                    return(Json(new JsonMessage(true, "Cannot delete this branch")));
                }
                else
                {
                    var startingFolder = string.Empty;
                    CreateStartingFolder(ref startingFolder);

                    if (System.IO.Directory.Exists(startingFolder))
                    {
                        CreateStartingProjectFolder(ref startingFolder);

                        if (System.IO.Directory.Exists(startingFolder))
                        {
                            var vsts         = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
                            var selectedRepo = vsts.GetRepositoryOnGuid(branch.RepoGuid);

                            var repoName = selectedRepo.Name;

                            var mainBat = startingFolder + @"\DeleteFeatureBranch.bat";

                            if (System.IO.File.Exists(mainBat))
                            {
                                System.IO.File.Delete(mainBat);
                            }

                            var bat = new Classes.GitBatch(mainBat)
                            {
                                Redirect      = true,
                                RedirectError = $@"{startingFolder.Replace(@"\\", @"\")}\ErrorDelete.txt",
                                RedirectFile  = $@"{startingFolder.Replace(@"\\", @"\")}\OutputDelete.txt"
                            };

                            bat.AddLine($"echo start");

                            var newName = branch.Name.Replace("refs/heads/", string.Empty);

                            bat.AddCD($@"{startingFolder}\{repoName}");
                            bat.AddReset();
                            bat.AddCheckout("master", "master");
                            bat.AddLine($@"git branch -D {newName}");            // Remove from local
                            bat.AddLine($@"git push origin --delete {newName}"); // Remove from origin

                            bat.AddCD(startingFolder);

                            bat.Write();

                            bat.GitRun(startingFolder, HttpContext.Session.GetString(Session.USER), HttpContext.Session.GetString(Session.GIT));

                            return(Json(new JsonMessage(true, "Branch Deleted")));
                        }
                        else
                        {
                            return(Json(new JsonMessage(true, $"Unable to find starting folder {startingFolder}")));
                        }
                    }
                    else
                    {
                        return(Json(new JsonMessage(true, $"Unable to find starting folder {startingFolder}")));
                    }
                }
            }
            else
            {
                return(Json(new JsonMessage(true, "Invalid Model State")));
            }
        }
Exemplo n.º 10
0
        public JsonResult PullRepository(string guid)
        {
            // see if starting folder from login exists

            var startingFolder = string.Empty;
            var repoName       = string.Empty;

            try
            {
                CreateStartingFolder(ref startingFolder);

                // See or create sub-folder based on PROJECT name

                if (System.IO.Directory.Exists(startingFolder))
                {
                    CreateStartingProjectFolder(ref startingFolder);

                    var mainBat = startingFolder + @"\PullRepository.bat";

                    if (System.IO.File.Exists(mainBat))
                    {
                        System.IO.File.Delete(mainBat);
                    }

                    var bat = new Classes.GitBatch(mainBat)
                    {
                        Redirect      = true,
                        RedirectError = $@"{startingFolder.Replace(@"\\", @"\")}\ErrorPull.txt",
                        RedirectFile  = $@"{startingFolder.Replace(@"\\", @"\")}\OutputPull.txt"
                    };

                    var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
                    var repo = vsts.GetRepositoryOnGuid(guid);

                    repoName = repo.Name;

                    // Now clear the repo folder if there
                    if (System.IO.Directory.Exists(startingFolder))
                    {
                        ClearFolder(startingFolder + $"\\{repoName}");
                    }

                    if (System.IO.Directory.Exists(startingFolder + $"\\{repoName}"))
                    {
                        System.IO.Directory.Delete(startingFolder + $"\\{repoName}");
                    }

                    int    ndx     = repo.RemoteUrl.LastIndexOf(@"/");
                    string theFile = repo.RemoteUrl.Substring(ndx + 1);

                    bat.AddLine($"echo start");
                    bat.AddLine($"echo Working on '{theFile}'");
                    if (!System.IO.Directory.Exists($@"{startingFolder}\{theFile}"))
                    {
                        bat.AddCD(startingFolder);
                        bat.AddLine($@"git clone {repo.RemoteUrl}");
                    }
                    else
                    {
                        bat.AddCD(startingFolder);
                        bat.AddLine($@"git clone --bare {repo.RemoteUrl}");
                        bat.AddLine("git config core.bare false");
                    }
                    bat.AddCD($@"{startingFolder}\{theFile}");
                    bat.AddCheckout("master", "origin/master");
                    bat.AddCheckout("release", "origin/release");
                    //bat.AddLine($"git checkout -b master origin/master");

                    bat.AddCD(startingFolder);

                    bat.Write();
                    bat.GitRun(startingFolder, HttpContext.Session.GetString(Session.USER), HttpContext.Session.GetString(Session.GIT));
                }

                return(Json(new JsonMessage(true, repoName + " : Pulled")));
            }
            catch (System.Exception ex)
            {
                return(Json(new JsonMessage(false, $"{repoName} - Failed to clone - [{ex.Message}]")));
            }
        }
Exemplo n.º 11
0
        public JsonResult PullAllRepositories(int pos)
        {
            var repoName = string.Empty;

            try
            {
                // get starting folder from login
                var startingFolder = string.Empty;

                CreateStartingFolder(ref startingFolder);

                if (System.IO.Directory.Exists(startingFolder))
                {
                    CreateStartingProjectFolder(ref startingFolder);

                    if (System.IO.Directory.Exists(startingFolder))
                    {
                        var mainBat = startingFolder + @"\PullAllRepositories.bat";

                        if (System.IO.File.Exists(mainBat))
                        {
                            System.IO.File.Delete(mainBat);
                        }

                        var vsts  = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
                        var repos = vsts.GetRepos(HttpContext.Session.GetString(Session.SELECTED_PROJ));

                        var repo = repos.Repositories[pos];

                        repoName = repo.Name;

                        int    ndx     = repo.RemoteUrl.LastIndexOf(@"/");
                        string theFile = repo.RemoteUrl.Substring(ndx + 1);

                        if (System.IO.Directory.Exists($@"{startingFolder}\{theFile}"))
                        {
                            return(Json(new JsonMessage(true, "Already exists")));
                        }
                        else
                        {
                            var bat = new Classes.GitBatch(mainBat)
                            {
                                Redirect      = true,
                                RedirectError = $@"{startingFolder.Replace(@"\\", @"\")}\ErrorPullAll{pos}.txt",
                                RedirectFile  = $@"{startingFolder.Replace(@"\\", @"\")}\OutputPullAll{pos}.txt"
                            };

                            bat.AddLine($"echo start");

                            bat.AddLine($"echo Working on '{theFile}'");
                            bat.AddCD(startingFolder);
                            bat.AddLine($@"git clone {repo.RemoteUrl}");

                            bat.AddCD($@"{startingFolder}\{theFile}");
                            //bat.AddLine($"git checkout -b master origin/master");
                            //bat.AddCheckout("master", "origin/master");
                            //bat.AddCheckout("release", "origin/release");

                            bat.AddCD(startingFolder);

                            bat.Write();
                            bat.GitRun(startingFolder, HttpContext.Session.GetString(Session.USER), HttpContext.Session.GetString(Session.GIT));

                            return(Json(new JsonMessage(true, "Success")));
                        }
                    }
                    else
                    {
                        return(Json(new JsonMessage(false, $"Unable to find starting folder {startingFolder}")));
                    }
                }
                else
                {
                    return(Json(new JsonMessage(false, $"Unable to find starting folder {startingFolder}")));
                }
            }
            catch (System.Exception ex)
            {
                return(Json(new JsonMessage(false, $"{repoName} - Failed to clone - [{ex.Message}]")));
            }
        }
Exemplo n.º 12
0
        public Classes.VSTS.VstsPushes GetRepositoryPushes(string guid)
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            return(vsts.GetRepositoryPushes(guid));
        }
        public IActionResult GetRepoBranches([DataSourceRequest] DataSourceRequest request, string id)
        {
            var r = GetRepositoryBranchesAndStats(id);

            if (r == null)
            {
//                var asd = "Stop here";
            }
            var startingFolder = string.Empty;
            var repoName       = string.Empty;
            var currentBranch  = string.Empty;

            try
            {
                CreateStartingFolder(ref startingFolder);

                // See or create sub-folder based on PROJECT name

                if (System.IO.Directory.Exists(startingFolder))
                {
                    CreateStartingProjectFolder(ref startingFolder);

                    var mainBat = startingFolder + @"\WhichBranch.bat";

                    if (System.IO.File.Exists(mainBat))
                    {
                        System.IO.File.Delete(mainBat);
                    }

                    var bat = new Classes.GitBatch(mainBat)
                    {
                        Redirect      = true,
                        RedirectError = $@"{startingFolder.Replace(@"\\", @"\")}\ErrorWB.txt",
                        RedirectFile  = $@"{startingFolder.Replace(@"\\", @"\")}\OutputFoo.txt"
                    };

                    var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
                    var repo = vsts.GetRepositoryOnGuid(id);

                    repoName = repo.Name;

                    int    ndx     = repo.RemoteUrl.LastIndexOf(@"/");
                    string theFile = repo.RemoteUrl.Substring(ndx + 1);

                    bat.AddLine($"echo Working on '{theFile}'");
                    bat.AddCD(startingFolder);
                    bat.AddLine($@"git clone {repo.RemoteUrl}");
                    bat.AddCD($@"{startingFolder}\{theFile}");
                    bat.AddLine("git branch");

                    bat.Write();
                    bat.GitRun(startingFolder, HttpContext.Session.GetString(Session.USER), HttpContext.Session.GetString(Session.GIT));

                    // No error so parse file
                    var lines = System.IO.File.ReadAllLines($@"{startingFolder.Replace(@"\\", @"\")}\OutputFoo.txt");
                    foreach (var line in lines)
                    {
                        if (line.StartsWith("*"))
                        {
                            currentBranch = line.Substring(2);
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                System.Diagnostics.Debug.Write(ex.Message);
                currentBranch = string.Empty;
            }


            List <RepoBranchVM> branches = new List <RepoBranchVM>();

            foreach (var b in r.Branches)
            {
                var item = new RepoBranchVM()
                {
                    Statuses        = new List <RepoBranchStatusVM>(),
                    RepoGuid        = id,
                    Guid            = b.Guid,
                    Name            = b.Name.Replace("refs/heads/", string.Empty),
                    Url             = b.Url,
                    Category        = b.Name.Contains(@"tags/") ? "TAG" : b.Name.Contains(@"pull/") ? "PULL" : "BRANCH",
                    IsLocked        = false,
                    IsCurrentBranch = false,
                    LockedBy        = string.Empty
                };
                if (!string.IsNullOrEmpty(b.IsLocked))
                {
                    item.IsLocked = b.IsLocked.ToUpper() == "TRUE";
                    item.LockedBy = b.Locked.Email;
                }
                item.HasStats = (b.Statuses.Count != 0);

                if (!string.IsNullOrEmpty(currentBranch))
                {
                    if (item.Name.ToUpper() == currentBranch.ToUpper())
                    {
                        item.IsCurrentBranch = true;
                    }
                }
                foreach (var s in b.Statuses)
                {
                    var stat = new RepoBranchStatusVM()
                    {
                        CreatedBy   = s.CreatedBy.By,
                        CreatedDate = System.Convert.ToDateTime(s.CreationDate).ToShortDateString(),
                        Description = s.Description,
                        Id          = s.Id,
                        State       = s.State
                    };
                    item.Statuses.Add(stat);
                }

                branches.Add(item);
            }

            return(Json(branches.ToDataSourceResult(request)));
        }
Exemplo n.º 14
0
        public Classes.VSTS.VstsWorkItems GetRepositoryPullRequestWorkItems(string guid, string id)
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            return(vsts.GetRepositoryPullRequestWorkItem(guid, id));
        }
        public JsonResult CheckOutBranch(string name, string guid)
        {
            var startingFolder = string.Empty;
            var repoName       = string.Empty;

            name = name.Replace("refs/heads/", string.Empty);

            var vsts         = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));
            var selectedRepo = vsts.GetRepositoryOnGuid(guid);

            repoName = selectedRepo.Name;

            try
            {
                CreateStartingFolder(ref startingFolder);

                if (System.IO.Directory.Exists(startingFolder))
                {
                    CreateStartingProjectFolder(ref startingFolder);

                    var mainBat = startingFolder + @"\CheckOutBranch.bat";

                    if (System.IO.File.Exists(mainBat))
                    {
                        System.IO.File.Delete(mainBat);
                    }

                    var bat = new Classes.GitBatch(mainBat)
                    {
                        Redirect      = true,
                        RedirectError = $@"{startingFolder.Replace(@"\\", @"\")}\Error.txt",
                        RedirectFile  = $@"{startingFolder.Replace(@"\\", @"\")}\output.txt"
                    };

                    bat.AddLine($"echo start");

                    bat.AddLine($"echo Working on '{name}'");

                    if (System.IO.Directory.Exists($"{startingFolder}\\{repoName}"))
                    {
                        bat.AddCD($@"{startingFolder}\{repoName}");
                        bat.AddReset();
                        bat.AddCheckout(name, $"origin/{name}");
                        bat.AddCD(startingFolder);

                        bat.Write();

                        bat.GitRun(startingFolder, HttpContext.Session.GetString(Session.USER), HttpContext.Session.GetString(Session.GIT));

                        return(Json(new JsonMessage(true, name + " : Pulled")));
                    }
                    else
                    {
                        return(Json(new JsonMessage(false, " : FAILED - you need to clone repository first")));
                    }
                }
                else
                {
                    return(Json(new JsonMessage(false, " : FAILED - you need to clone repository first")));
                }
            }
            catch (System.Exception ex)
            {
                return(Json(new JsonMessage(false, $"{repoName} - Failed to check out - [{ex.Message}]")));
            }
        }
Exemplo n.º 16
0
        public JsonResult GetReleasesLinkForId(string id)
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            return(Json(new { link = vsts.WebReleasesForId(HttpContext.Session.GetString(Session.SELECTED_PROJ), id) }));
        }
Exemplo n.º 17
0
        public Classes.VSTS.VstsWorkItem GetWorkItem(string id)
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            return(vsts.GetWorkItem(HttpContext.Session.GetString(Session.SELECTED_PROJ), id));
        }
Exemplo n.º 18
0
        public Classes.VSTS.VstsReleases GetReleases(string releaseId)
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            return(vsts.GetReleases(HttpContext.Session.GetString(Session.SELECTED_PROJ), releaseId));
        }
Exemplo n.º 19
0
        public Classes.VSTS.VstsBuilds GetRepositoryBuilds(string buildId)
        {
            var vsts = new Classes.VSTS.Vsts(HttpContext.Session.GetString(Session.TOKEN));

            return(vsts.GetBuilds(HttpContext.Session.GetString(Session.SELECTED_PROJ), buildId));
        }