Пример #1
0
 private SvnLogArgs CreateSvnLogArgument(string path, RevisionRange revisionRange)
 {
     return(new SvnLogArgs(CreateSvnRevisionRangeBy(revisionRange))
     {
         BaseUri = GetPath(path), ThrowOnError = true
     });
 }
Пример #2
0
        public void SetSelection(IEnumerable <WorkItem> items, RevisionRange range)
        {
            this._items = items;
            _range      = range;

            UpdateMenus(range);
        }
Пример #3
0
        private static RevisionRange[] GetFromTo(SvnRevisionId @from, SvnRevisionId lastRevision, int pageSize)
        {
            var result = new List <RevisionRange>();

            while (from.Value <= lastRevision.Value)
            {
                var fromRevisionId = from;

                RevisionRange revisionRange;

                var fromRevision = fromRevisionId;
                if ((fromRevisionId.Value + pageSize) < lastRevision.Value)
                {
                    revisionRange = new RevisionRange(fromRevision, new RevisionId {
                        Value = (fromRevisionId.Value + pageSize - 1).ToString()
                    });
                }
                else
                {
                    revisionRange = new RevisionRange(fromRevision, lastRevision);
                }

                result.Add(revisionRange);

                from = new SvnRevisionId(fromRevisionId.Value + pageSize);
            }
            return(result.ToArray());
        }
Пример #4
0
        private static SvnRevisionRange CreateSvnRevisionRangeBy(RevisionRange revisionRange)
        {
            SvnRevisionId fromChangeset = revisionRange.FromChangeset;
            SvnRevisionId toChangeSet   = revisionRange.ToChangeset;

            return(new SvnRevisionRange(fromChangeset.Value, toChangeSet.Value));
        }
Пример #5
0
        public override string GetDiff(RevisionRange range)
        {
            //these are taken from RBTools source code (https://github.com/reviewboard/rbtools/blob/master/rbtools/clients/git.py)
            const string diffParams = "--no-color --full-index --ignore-submodules --no-ext-diff";

            range = (RevisionRange)range.Clone();

            //get previous log entry
            try
            {
                string log = Exec("log -n 1 \"{0}^1\"", range.From);
                IEnumerable <WorkItem> entries = ParseLog(log);

                WorkItem previous;
                if (entries == null || (previous = entries.FirstOrDefault()) == null)
                {
                    throw new ApplicationException("could not get previous entry");
                }

                range.From = previous.ItemId;
            }
            catch (ArgumentException)
            {
                //that only means that the first entry doesn't have a parent, so let's diff from the master
                string diff = Exec("diff {0} \"{1}\" master", diffParams, range.To);
                return(diff);
            }

            //execute the real diff
            string diffText = Exec("diff {0} \"{1}\" \"{2}\"", diffParams, range.From, range.To);

            return(diffText);

            //git diff range.to master
        }
Пример #6
0
        bool ICompareRevisionSecondArg.Belong(RevisionRange revisionRange)
        {
            SvnRevisionId fromChangeset = revisionRange.FromChangeset;
            SvnRevisionId toChangeset   = revisionRange.ToChangeset;

            return(fromChangeset.Value <= _firstArg.Value && _firstArg.Value <= toChangeset.Value);
        }
Пример #7
0
 private RevisionId GetToRevision(RevisionRange processedRevisionRange, RevisionId newToRevision)
 {
     if (RevisionComparer.Is(newToRevision).GreaterThan(processedRevisionRange.ToChangeset))
     {
         return(newToRevision);
     }
     return(processedRevisionRange.ToChangeset);
 }
Пример #8
0
        public RevisionInfo[] GetRevisions(RevisionRange revisionsRange, string path)
        {
            _logger.DebugFormat("GET SVN Revisions for {0} [{1}, {2}]", path, revisionsRange.FromChangeset, revisionsRange.ToChangeset);
            var arg            = CreateSvnLogArgument(path, new RevisionRange(revisionsRange.FromChangeset, revisionsRange.ToChangeset));
            var tpRevisionInfo = SubversionUtils.ArrayOfSvnRevisionToArrayOfRevisionInfo(GetSvnRevisions(arg, path), this);

            _logger.DebugFormat("SVN Revisions for {0} [{1}, {2}] is retrieved", path, revisionsRange.FromChangeset, revisionsRange.ToChangeset);

            return(tpRevisionInfo.ToArray());
        }
Пример #9
0
        private RevisionId GetFromRevision(RevisionRange processedRevisionRange, RevisionId newFromRevision)
        {
            if (RevisionComparer.Is(StartRevision).LessThan(newFromRevision))
            {
                newFromRevision = StartRevision;
            }

            if (RevisionComparer.Is(newFromRevision).LessThan(processedRevisionRange.FromChangeset))
            {
                return(newFromRevision);
            }
            return(processedRevisionRange.FromChangeset);
        }
Пример #10
0
        private void WorkItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            PostReview.IsEnabled = WorkItems.SelectedItems != null && WorkItems.SelectedItems.Count > 0;

            bool            skipped;
            List <WorkItem> continuous = SelectCoutinuousSelectedItems(out skipped).ToList();

            Warning.Visibility = skipped ? Visibility.Visible : Visibility.Collapsed;

            RevisionRange range = GenericRepository.GetRange(continuous);

            if (SelectectionChanged != null)
            {
                SelectectionChanged(continuous, range);
            }
        }
Пример #11
0
        private void UpdateMenus(RevisionRange range)
        {
            bool selected = range != null;

            TopHint.Content = !selected ? null : string.Format(Strings.MyTickets_TopHint, range.From, range.To);

            MenuUpdateTicketMenu.IsEnabled = selected;
            if (!selected)
            {
                MenuUpdateTicketMenu.Header = Strings.MenuUpdate_NoTickets;
            }
            else
            {
                string header = string.Format(Strings.MyTickets_UpdateTicketMenu, _range.From, _range.To);
                MenuUpdateTicketMenu.Header = header;
            }
        }
Пример #12
0
        protected void SetStartRevisionBy(RevisionRange[] revisionRanges)
        {
            if (revisionRanges.Empty())
            {
                return;
            }

            var newFromRevision = RevisionComparer.FindMinFromRevision(revisionRanges);
            var newToRevision   = RevisionComparer.FindMaxToRevision(revisionRanges);
            var processedRevisionRangeStorage = Storage.Get <RevisionRange>();
            var processedRevisionRange        = processedRevisionRangeStorage.SingleOrDefault() ?? new RevisionRange(newFromRevision, newToRevision);
            var newProcessedRevisionRange     = new RevisionRange(GetFromRevision(processedRevisionRange, newFromRevision),
                                                                  GetToRevision(processedRevisionRange, newToRevision));

            processedRevisionRangeStorage.Clear();
            processedRevisionRangeStorage.Add(newProcessedRevisionRange);
        }
Пример #13
0
        private void PostReview_Click(object sender, RoutedEventArgs e)
        {
            bool            skipped;
            List <WorkItem> continuous = SelectCoutinuousSelectedItems(out skipped).ToList();
            RevisionRange   range      = GenericRepository.GetRange(continuous);
            var             review     = new Review();

            _presenter.ExtractBasicMetadata(continuous, review);
            var detailWindow = new ReviewDetails(_presenter.GetDetailsTitle(),
                                                 review,
                                                 () => IbApplication.CodeRepository.GetDiff(range));

            detailWindow.ShowDialog();
            if (review.Id != 0)
            {
                _presenter.OpenInBrowser(review);
            }
        }
Пример #14
0
        public override RevisionInfo[] GetRevisions(RevisionRange revisionRange)
        {
            try
            {
                SvnRevisionId fromChangeset = revisionRange.FromChangeset;
                SvnRevisionId toChangeset   = revisionRange.ToChangeset;

                _logger.DebugFormat("Getting revision infos [{0}:{1}]", fromChangeset, toChangeset);
                var arg = new SvnLogArgs(new SvnRevisionRange(fromChangeset.Value, toChangeset.Value))
                {
                    ThrowOnError = true
                };
                return(SubversionUtils.ArrayOfSvnRevisionToArrayOfRevisionInfo(GetSvnRevisions(arg), this).ToArray());
            }
            catch (SvnException e)
            {
                throw new VersionControlException(String.Format("Subversion exception: {0}", e.Message), e);
            }
        }
Пример #15
0
        public override string GetDiff(RevisionRange range)
        {
            long fromRev = long.Parse(range.From) - 1; // -1 is enough to include From branch
            long toRev   = long.Parse(range.To);

            string diffText;

            using (var ms = new MemoryStream())
            {
                _svn.Diff(
                    _root,
                    new SvnRevisionRange(fromRev, toRev),
                    ms);

                ms.Position = 0;
                diffText    = Encoding.UTF8.GetString(ms.ToArray());
            }

            return(diffText);
        }
Пример #16
0
        protected void OnSearch(object sender, EventArgs e)
        {
            StringBuilder redirect  = new StringBuilder();
            string        queryText = NormalizeQuery(_inputQuery.Text);
            RevisionRange rr        = GetRevisionRange();

            redirect.Append("Query.aspx");
            redirect.Append("?q=");
            redirect.Append(HttpUtility.UrlEncode(queryText));
            if (rr.First != Revision.Head)
            {
                redirect.Append("&f=");
                redirect.Append(rr.First);
            }
            if (rr.Last != Revision.Head)
            {
                redirect.Append("&l=");
                redirect.Append(rr.Last);
            }
            Context.Response.Redirect(redirect.ToString());
        }
Пример #17
0
        protected override RevisionRange[] RetrieveRevisionRanges()
        {
            var result = new RevisionRange[0];

            if (IsFirstRun)
            {
                result = VersionControlSystem.GetFromTillHead(StartRevision, PageSize);
            }
            else if (!IsStartRevisionChanged || IsStartRevisionWithinAlreadyProcessedRevisionRange)
            {
                var alreadyProcessedRevisionRange = Storage.Get <RevisionRange>().Single();

                result = VersionControlSystem.GetAfterTillHead(alreadyProcessedRevisionRange.ToChangeset, PageSize);
            }
            else if (IsStartRevisionBehindAlreadyProcessedRevisionRange)
            {
                result = VersionControlSystem.GetAfterTillHead(StartRevision, PageSize);
            }
            else if (IsStartRevisionBeforeAlreadyProcessedRevisionRange)
            {
                var revisionRanges = new List <RevisionRange>();
                var alreadyProcessedRevisionRange = Storage.Get <RevisionRange>().Single();

                revisionRanges.AddRange(VersionControlSystem.GetFromAndBefore(StartRevision, alreadyProcessedRevisionRange.FromChangeset, PageSize));
                revisionRanges.AddRange(VersionControlSystem.GetAfterTillHead(alreadyProcessedRevisionRange.ToChangeset, PageSize));

                result = revisionRanges.ToArray();
            }

            if (result.Any())
            {
                Logger.Info("New revisions found");
            }

            return(result);
        }
Пример #18
0
        public void UpdateTicket(Review r, RevisionRange range)
        {
            Task.Factory.StartNew(() =>
            {
                Exception ex = null;
                try
                {
                    _view.UpdateBusyStatus(Strings.MyTickets_Update_GeneratingDiff);
                    string diffText = IbApplication.CodeRepository.GetDiff(range);

                    _view.UpdateBusyStatus(Strings.MyTickets_Update_Diff);
                    IbApplication.RbClient.AttachDiff(r, IbApplication.CodeRepository.RelativeRoot, diffText);
                    IbApplication.RbClient.MakePublic(r);

                    string url = string.Format("{0}r/{1}", IbApplication.RbClient.ServerUri, r.Id);
                    IbApplication.OpenBrowserWindow(url, false);
                }
                catch (Exception ex1)
                {
                    ex = ex1;
                }
                _view.FinishTicketUpdate(ex);
            });
        }
 public RevisionInfo[] GetRevisions(RevisionRange revisionRange)
 {
     return(Revisions.FindAll(x =>
                              long.Parse(x.Id.Value) >= long.Parse(revisionRange.FromChangeset.Value) &&
                              long.Parse(x.Id.Value) <= long.Parse(revisionRange.ToChangeset.Value)).ToArray());
 }
Пример #20
0
        public virtual ICollection<Changeset> Log(Branch branch, RevisionRange revisionRange)
        {
            if (branch == null)
            {
                throw new ArgumentNullException("branch");
            }
            if (revisionRange == null)
            {
                throw new ArgumentNullException("revisionRange");
            }

            _log.DebugCurrent("Getting log of branch '{0}' with range '{1}'", branch, revisionRange);

            var logArguments = HgArguments
                .Log()
                .Verbose()
                .XmlStyle()
                .AddRevisionRange(revisionRange)
                .OnlyBranch(branch)
                .AddRepository(_repositoryPath);

            var logResult = ExecuteNonInteractive(logArguments, "read log")
                .StandardOutput
                .Trim();

            return string.IsNullOrEmpty(logResult)
                   	? Enumerable.Empty<Changeset>().ToList()
                   	: _xmlLogParser.GetChangesets(new StringReader(logResult));
        }
Пример #21
0
        private void DoVersionDiff_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(FilterCommits.Text))
            {
                TextTip.Content = "需要填写单号,多个单号空格隔开";
                return;
            }
            if (src.files.Count <= 0)
            {
                TextTip.Content = "拖目标文件夹进来,或目标文件夹下没有xls";
                return;
            }

            Collection <SvnLogEventArgs> logitems;

            DateTime startDateTime = DateTime.Now.AddDays(-60);
            DateTime endDateTime   = DateTime.Now;
            var      svnRange      = new SvnRevisionRange(new SvnRevision(startDateTime), new SvnRevision(endDateTime));

            List <SvnRevisionCombo> revisions = new List <SvnRevisionCombo>();

            var files = new Dictionary <string, RevisionRange>();

            var filter = FilterCommits.Text.Split(" #".ToArray(), StringSplitOptions.RemoveEmptyEntries);

            var sfilter   = string.Join("|", filter);
            var regfilter = new Regex(sfilter);

            using (SvnClient client = new SvnClient()) {
                client.Authentication.SslServerTrustHandlers += delegate(object _sender, SharpSvn.Security.SvnSslServerTrustEventArgs _e) {
                    _e.AcceptedFailures = _e.Failures;
                    _e.Save             = true; // Save acceptance to authentication store
                };

                if (client.GetUriFromWorkingCopy(src.root) != null)
                {
                    SvnInfoEventArgs info;
                    client.GetInfo(src.root, out info);
                    var uri = info.Uri;

                    var rootPath = info.Path;

                    client.GetLog(uri, new SvnLogArgs(svnRange), out logitems);

                    foreach (var logentry in logitems)
                    {
                        var author   = logentry.Author;
                        var message  = logentry.LogMessage;
                        var date     = logentry.Time;
                        var revision = logentry.Revision;

                        if (regfilter.IsMatch(message))
                        {
                            foreach (var filepath in logentry.ChangedPaths)
                            {
                                var path = filepath.Path;

                                RevisionRange minmax = null;
                                if (!files.TryGetValue(path, out minmax))
                                {
                                    minmax = new RevisionRange()
                                    {
                                        min = revision, max = revision, file = path
                                    };
                                    files[path] = minmax;
                                }
                                if (revision > minmax.max)
                                {
                                    minmax.max = revision;
                                }
                                if (revision < minmax.min)
                                {
                                    minmax.min = revision;
                                }
                            }
                        }
                    }
                }
            }

            results.Clear();
            resultRevisions.Clear();

            foreach (var file in files.Keys)
            {
                var range = files[file];
                var res   = new DiffResult <string>(file + "-" + range.min, file + "-" + range.max, DiffStatus.Modified);

                results.Add(res);
                resultRevisions.Add(range);
            }

            DstDataGrid.refreshData();
            SrcDataGrid.refreshData();
        }
Пример #22
0
 bool ICompareRevisionSecondArg.Behind(RevisionRange revisionRange)
 {
     return(int.Parse(_firstArg.Value) > int.Parse(revisionRange.ToChangeset.Value));
 }
Пример #23
0
 bool ICompareRevisionSecondArg.Belong(RevisionRange revisionRange)
 {
     return(int.Parse(_firstArg.Value) >= int.Parse(revisionRange.FromChangeset.Value) &&
            int.Parse(_firstArg.Value) <= int.Parse(revisionRange.ToChangeset.Value));
 }
Пример #24
0
 public HgArguments AddRevisionRange(RevisionRange revisionRange)
 {
     if (revisionRange == null)
     {
         throw new ArgumentNullException("revisionRange");
     }
     return revisionRange != RevisionRange.NotSpecified ? Add("--rev", revisionRange.ToString()) : this;
 }
Пример #25
0
 bool ICompareRevisionSecondArg.Before(RevisionRange revisionRange)
 {
     return(int.Parse(_firstArg.Value) < int.Parse(revisionRange.FromChangeset.Value));
 }
 bool ICompareRevisionSecondArg.Before(RevisionRange revisionRange)
 {
     return(_firstArg.Time < ((MercurialRevisionId)revisionRange.FromChangeset).Time);
 }
Пример #27
0
 public override RevisionInfo[] GetRevisions(RevisionRange revisionRange)
 {
     return(_tfsClient.GetRevisions(revisionRange.FromChangeset, revisionRange.ToChangeset));
 }
 bool ICompareRevisionSecondArg.Behind(RevisionRange revisionRange)
 {
     return(_firstArg.Time > ((MercurialRevisionId)revisionRange.ToChangeset).Time);
 }
 bool ICompareRevisionSecondArg.Belong(RevisionRange revisionRange)
 {
     return(_firstArg.Time >= ((MercurialRevisionId)revisionRange.FromChangeset).Time &&
            _firstArg.Time <= ((MercurialRevisionId)revisionRange.ToChangeset).Time);
 }
Пример #30
0
 void WorkLogSelectectionChanged(IEnumerable <WorkItem> items, RevisionRange range)
 {
     MyTickets.SetSelection(items, range);
 }
Пример #31
0
 public abstract string GetDiff(RevisionRange range);
Пример #32
0
 public override RevisionInfo[] GetRevisions(RevisionRange revisionRange)
 {
     return(_mercurial.GetRevisions(revisionRange.FromChangeset, revisionRange.ToChangeset));
 }