示例#1
0
        public void Init(NavObject navObject)
        {
            Username   = navObject.Username;
            Repository = navObject.Repository;

            PullRequests.FilteringFunction = x => {
                var state = SelectedFilter == 0 ? "open" : "closed";
                return(x.Where(y => y.State == state));
            };

            _pullRequestEditSubscription = Messenger.SubscribeOnMainThread <PullRequestEditMessage>(x =>
            {
                if (x.PullRequest == null)
                {
                    return;
                }

                var index = PullRequests.Items.IndexOf(x.PullRequest);
                if (index < 0)
                {
                    return;
                }
                PullRequests.Items[index] = x.PullRequest;
                PullRequests.Refresh();
            });
        }
示例#2
0
        protected override Task Load(bool forceCacheInvalidation)
        {
            var state   = SelectedFilter == 0 ? "open" : "closed";
            var request = this.GetApplication().Client.Users[Username].Repositories[Repository].PullRequests.GetAll(state: state);

            return(PullRequests.SimpleCollectionLoad(request, forceCacheInvalidation));
        }
示例#3
0
        public Task Load(bool forceDataRefresh)
        {
            var state   = PullRequests.Filter.IsOpen ? "open" : "closed";
            var request = Application.Client.Users[Username].Repositories[Repository].PullRequests.GetAll(state: state);

            return(PullRequests.SimpleCollectionLoad(request, forceDataRefresh));
        }
        void HandlePullRequest(PullRequest pr)
        {
            if (Usernames.Length > 0 && !Usernames.Contains(pr.User.Login))
            {
                return;
            }

            if (pr.State == ItemState.Open)
            {
                if (PullRequests.ContainsKey(pr))
                {
                    return;
                }

                PullRequests.Add(pr, new OpenUrlAction {
                    Url = pr.HtmlUrl.OriginalString,
                    ShortDescription = $"Review {pr.Title}",
                    Tooltip          = $"Review pull request in {Repository.Owner}/{Repository.Name}, created by {pr.User.Login}"
                });
            }
            else
            {
                if (!PullRequests.Remove(pr))
                {
                    return;
                }
            }

            Actions = PullRequests.Values.ToArray();
        }
示例#5
0
        async Task GetPullRequestViewsByJiraNumber(ItemState?state, DateRange searchDates, IList <string> repoNames, string jiraIssueNumber)
        {
            try
            {
                var hasNewRequests = false;

                var searchResults = await SearchPullRequests(state, searchDates, repoNames, jiraIssueNumber);

                // Gets general info on each Pull Request.
                var existingRequestIds = PullRequests.Select(r => r.Id).ToList();

                foreach (var request in searchResults.Items)
                {
                    var repositoryName = request.PullRequest.HtmlUrl.Segments[2].TrimEnd('/');

                    var pullRequest = PullRequests.FirstOrDefault(r => r.Id == request.Number);
                    if (null == pullRequest)
                    {
                        pullRequest = GetNewPullRequestView(request);
                        // Get detailed info on each Pull Request.
                        pullRequest = await GetPullRequestDetails(request, pullRequest);

                        PullRequests.Add(pullRequest);
                        if (pullRequest.State == ItemState.Open)
                        {
                            hasNewRequests = true;
                        }
                    }
                    else // already had a copy in our list.. update it
                    {
                        existingRequestIds.Remove(request.Number);
                        if (pullRequest.Updated != request.UpdatedAt.GetValueOrDefault())
                        {
                            pullRequest = await GetPullRequestDetails(request, pullRequest);
                        }
                        if (pullRequest.JiraIssues.Count == 0)
                        {
                            pullRequest = await GetPullRequestDetails(request, pullRequest);
                        }
                    }
                }

                foreach (var requestToRemove in PullRequests.Where(r => existingRequestIds.Contains(r.Id)).ToList())
                {
                    PullRequests.Remove(requestToRemove);
                }

                if (hasNewRequests)
                {
                    OnNewPullRequest();
                }

                OnGetPullRequestsComplete();
            }
            catch (Exception ex)
            {
                ExceptionHandler(ex);
            }
        }
 public void Update()
 {
     PullRequests.Clear();
     foreach (var pullRequest in Model.Values.OrderBy(pr => pr.Id))
     {
         PullRequests.Add(new PullRequestViewModel(pullRequest));
     }
 }
示例#7
0
        private void GetItems()
        {
            foreach (var item in MasterPullRequests.Skip(Skip).Take(PageSize * Increment).ToList())
            {
                PullRequests.Add(item);
            }
            Skip += PageSize;
            PageSize++;

            OpenLabel   = MasterPullRequests.Count(c => c.State == ItemState.Open) + " open";
            ClosedLabel = " / " + MasterPullRequests.Count(c => c.State == ItemState.Open) + " closed";
        }
        public Repository(string name, string description, PullRequests pullRequests, RepositoryOwner owner, string url, bool isFork)
        {
            DataDownloadedAt = DateTimeOffset.UtcNow;

            Name             = name;
            Description      = description;
            OwnerLogin       = owner.Login;
            OwnerAvatarUrl   = owner.AvatarUrl;
            Url              = url;
            PullRequestCount = pullRequests.TotalCount;
            IsFork           = isFork;
        }
示例#9
0
        private DatabasePullRequest FindOrCreatePullRequestState(int number)
        {
            DatabasePullRequest pr;

            if (!PullRequests.ContainsKey(number))
            {
                pr                   = new DatabasePullRequest();
                pr.Number            = number;
                PullRequests[number] = pr;
            }
            return(PullRequests[number]);
        }
示例#10
0
        protected override Task Load(bool forceCacheInvalidation)
        {
            var state = "OPEN";

            if (SelectedFilter == 1)
            {
                state = "MERGED";
            }
            else if (SelectedFilter == 2)
            {
                state = "DECLINED";
            }
            return(PullRequests.SimpleCollectionLoad(() => this.GetApplication().Client.Users[Username].Repositories[Repository].PullRequests.GetAll(state, forceCacheInvalidation)));
        }
示例#11
0
        /// <summary>
        /// Reads the pull requests from the persistent file
        /// </summary>
        public void GetCurrentSaved()
        {
            Debug.Assert(this != null);
            try
            {
                if (!Directory.Exists(CacheDirectory))
                {
                    return;
                }
                if (!File.Exists(CachedLocalPullRequestListPath))
                {
                    return;
                }
                var json = File.ReadAllText(CachedLocalPullRequestListPath);
                var list = JsonConvert.DeserializeObject <IEnumerable <PullRequest> >(json);
                PullRequests.Clear();
                foreach (var p in list)
                {
                    //Restore Self-Referential Loops
                    p.ParentRepo = this;
                    foreach (var r in p.ValidFiles)
                    {
                        r.ParentPullRequst = p;
                    }

                    if (VerifyPullRequestCache(p))
                    {
                        PullRequests.Add(p);
                        foreach (var r in p.ValidFiles)
                        {
                            r.LoadFromCache();
                        }
                    }
                    else
                    {
                        if (Directory.Exists(p.CacheDirectory))
                        {
                            Directory.Delete(p.CacheDirectory, true);
                        }
                    }
                }

                UpdateLocalSavedList(); //In case some were deleted, write the file back
            }
            catch (Exception ex)
            {
                Logger.Error($"{ex.GetType().Name}: Couldn't load {CachedLocalPullRequestListPath} because {ex.Message}");
            }
        }
示例#12
0
        /// <summary>
        /// Gets each page of the pull request list from GitHub. Once the list is complete, get all
        /// the pull request files for each pull request.
        /// </summary>
        /// <returns>List of pull request information.</returns>
        public async Task <IList <PullRequest> > GetPullRequestsAsync()
        {
            var url     = $"/repos/{Owner}/{RepoName}/pulls";
            var etag    = Ref.Create(EtagNoChanges);
            var updated = await GetPaginatedListAsync <PullRequest>(url, etag);

            var outdated = PullRequests;

            EtagNoChanges = etag.Value;
            if (updated == null)
            {
                return(null);
            }
            if (outdated != null)
            {
                var prToRemove = outdated.Where(old => updated.All(newpr => newpr.Number != old.Number));
                foreach (var pr in updated)
                {
                    pr.ParentRepo = this;
                    var old = outdated.FirstOrDefault(o => o.Number == pr.Number);
                    if (old != null)
                    {
                        pr.LastWrite = old.LastWrite;
                    }
                }
                DeletePRsFromDisk(prToRemove);
            }
            await Task.WhenAll(updated.Select(async pr =>
            {
                var files = await GetPaginatedListAsync <RepoFile>($"/repos/{Owner}/{RepoName}/pulls/{pr.Number}/files");
                foreach (var f in files)
                {
                    f.ParentPullRequst = pr;
                }
                pr.Files = PullRequest.FilterFiles(files).ToList();
                return(pr);
            }));

            PullRequests.Clear();
            PullRequests.AddRange(updated);
            UpdateLocalSavedList();
            return(updated);
        }
示例#13
0
        private async Task Load()
        {
            string state;

            switch (SelectedView)
            {
            case 1:
                state = "MERGED";
                break;

            case 2:
                state = "DECLINED";
                break;

            default:
                state = "OPEN";
                break;
            }

            var response = await ApplicationService.StashClient.Projects[ProjectKey].Repositories[RepositorySlug].PullRequests.GetAll(state: state).ExecuteAsync();

            PullRequests.Reset(response.Data.Values);
        }
        private async Task GetPullRequests()
        {
            try
            {
                Loading = true;


                var response = await Apis.GitHub.GetPullRequests(Repository.Owner.UserName, Repository.Name, Page);

                if (response != null)
                {
                    response.ForEach((item) => { PullRequests.Add(item); });
                    await RaisePropertyChanged(() => PullRequests);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Loading = false;

            ShowEmptyState = PullRequests.Count == 0;
        }
示例#15
0
        public static void Main(string[] args)
        {
            string PAT         = string.Empty;
            string accountName = string.Empty;
            string projectName = string.Empty;

            Console.WriteLine("Please enter Account Name");
            accountName = Console.ReadLine();

            Console.WriteLine("Please enter Personal access token");
            PAT = Console.ReadLine();

            Console.WriteLine("Please enter project name");
            projectName = Console.ReadLine();

            Configuration sourceconfig = new Configuration()
            {
                UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName
            };

            VstsRestAPI.Configuration vstsAPIConfiguration = new VstsRestAPI.Configuration()
            {
                UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName
            };

            ValidateLogin objLogin       = new ValidateLogin(vstsAPIConfiguration);
            bool          isValidAccount = objLogin.isValidAccount();

            if (isValidAccount)
            {
                Console.WriteLine("Generating templates....");
                Console.WriteLine();

                ExportQueries objQuery = new ExportQueries(vstsAPIConfiguration);
                //queryList = objQuery.GetQueries(projectName);
                objQuery.GetQueriesByPath(projectName, string.Empty);

                ExportDashboards objWidgetAndCharts = new ExportDashboards(vstsAPIConfiguration);
                objWidgetAndCharts.GetDashboard(projectName);
                Console.WriteLine("Queries and Dashboard JSONs are saved into Template folder");
                Console.WriteLine("");

                Teams objTeam = new Teams(vstsAPIConfiguration);
                objTeam.ExportTeams(projectName);
                Console.WriteLine("Teams JSON is saved into Template folder");
                Console.WriteLine("");

                SourceCode objSourceCode = new SourceCode(vstsAPIConfiguration);
                objSourceCode.ExportSourceCode(projectName);
                Console.WriteLine("ImportSourceCode JSON is saved into Template folder");
                Console.WriteLine("");

                BoardColumns objColumn = new BoardColumns(vstsAPIConfiguration);
                objColumn.ExportBoardColumns(projectName);
                Console.WriteLine("BoardColumn JSON file is saved into Template folder");
                Console.WriteLine("");

                GenerateWIFromSource wiql = new GenerateWIFromSource(sourceconfig, accountName);
                wiql.UpdateWorkItem();
                Console.WriteLine("Work item JSON files are saved into Templates folder");
                Console.WriteLine("");

                BuildDefinitions   objBuild   = new BuildDefinitions(vstsAPIConfiguration, accountName);
                ReleaseDefinitions objRelease = new ReleaseDefinitions(vstsAPIConfiguration, accountName);
                objBuild.ExportBuildDefinitions(projectName);
                objRelease.ExportReleaseDefinitions(projectName);
                Console.WriteLine("Build and Release Definitions are saved into Templates folder");
                Console.WriteLine("");

                CardFieldsAndCardStyles objCards = new CardFieldsAndCardStyles(vstsAPIConfiguration);
                objCards.GetCardFields(projectName);
                objCards.GetCardStyles(projectName);
                Console.WriteLine("CardField and CardStyle JSON files are saved into Templates folder");
                Console.WriteLine("");

                PullRequests objPullRequest = new PullRequests(vstsAPIConfiguration);
                objPullRequest.ExportPullRequests(projectName);
                Console.WriteLine("PullReqests and comments JSON files are saved into Templates folder");
                Console.WriteLine("");

                Console.WriteLine("Completed generating templates from " + projectName);
                var wait = Console.ReadLine();
            }
            else
            {
                Console.WriteLine("");
                Console.WriteLine("Invalid Account name or PAT, re-run the application and try again!");
                var wait = Console.ReadLine();
            }
        }
示例#16
0
        public static void Main(string[] args)
        {
            string PAT         = string.Empty;
            string accountName = string.Empty;
            string projectName = string.Empty;

            Console.WriteLine("Please enter Account Name");
            accountName = Console.ReadLine();

            Console.WriteLine("Please enter Personel access token");
            PAT = Console.ReadLine();

            Console.WriteLine("Please enter project name");
            projectName = Console.ReadLine();


            Configuration sourceconfig = new Configuration()
            {
                UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName
            };

            VstsRestAPI.Configuration vstsAPIConfiguration = new VstsRestAPI.Configuration()
            {
                UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName
            };

            Console.WriteLine("Generating templates....");
            Console.WriteLine();


            Dictionary <string, string> queryList = new Dictionary <string, string>();
            ExportQueries objQuery = new ExportQueries(vstsAPIConfiguration);

            //queryList = objQuery.GetQueries(projectName);
            queryList = objQuery.GetQueriesByPath(projectName, string.Empty);

            ExportWidgetsAndCharts objWidgetAndCharts = new ExportWidgetsAndCharts(vstsAPIConfiguration);

            objWidgetAndCharts.GetWidgetsAndCharts(projectName, queryList);
            Console.WriteLine("Queries and widget JSONs are saved into Template folder");
            Console.WriteLine("");


            Teams objTeam = new Teams(vstsAPIConfiguration);

            objTeam.ExportTeams(projectName);
            Console.WriteLine("Teams JSON is saved into Template folder");
            Console.WriteLine("");

            ServiceEndpoints objService = new ServiceEndpoints(vstsAPIConfiguration);

            string serviceEndPoint = string.Empty;

            serviceEndPoint = objService.ExportServiceEndPoints(projectName);
            Console.WriteLine("ServiceEndPoint JSONs are saved into Template folder");
            Console.WriteLine("");

            SourceCode objSourceCode = new SourceCode(vstsAPIConfiguration);

            objSourceCode.ExportSourceCode(projectName);
            Console.WriteLine("ImportSourceCode JSON is saved into Template folder");
            Console.WriteLine("");

            BoardColumns objColumn = new BoardColumns(vstsAPIConfiguration);

            objColumn.ExportBoardColumns(projectName);
            Console.WriteLine("BoardColumn JSON file is saved into Template folder");
            Console.WriteLine("");

            GenerateWIFromSource wiql = new GenerateWIFromSource(sourceconfig, accountName);

            wiql.UpdateWorkItem();
            Console.WriteLine("Work item JSON files are saved into Templates folder");
            Console.WriteLine("");

            BuildDefinitions   objBuild   = new BuildDefinitions(vstsAPIConfiguration, accountName);
            ReleaseDefinitions objRelease = new ReleaseDefinitions(vstsAPIConfiguration, accountName);

            objBuild.ExportBuildDefinitions(projectName);
            objRelease.ExportReleaseDefinitions(projectName, serviceEndPoint);
            Console.WriteLine("Build and Release Definitions are saved into Templates folder");
            Console.WriteLine("");

            CardFieldsAndCardStyles objCards = new CardFieldsAndCardStyles(vstsAPIConfiguration);

            objCards.GetCardFields(projectName);
            objCards.GetCardStyles(projectName);
            Console.WriteLine("CardField and CardStyle JSON files are saved into Templates folder");
            Console.WriteLine("");

            Iterations objIterations = new Iterations(vstsAPIConfiguration, accountName);

            objIterations.GetIterations();
            Console.WriteLine("iterations JSON file is saved into Templates folder");
            Console.WriteLine("");

            PullRequests objPullRequest = new PullRequests(vstsAPIConfiguration);

            objPullRequest.ExportPullRequests(projectName);
            Console.WriteLine("PullReqests and comments JSON files are saved into Templates folder");
            Console.WriteLine("");

            Console.WriteLine("Completed generating templates from " + projectName);
            var wait = Console.ReadLine();
        }