示例#1
0
文件: Status.cs 项目: oqewok/gitter
        /// <summary>Update status.</summary>
        public void Refresh()
        {
            StatusData status;
            var        parameters = new QueryStatusParameters();

            if (Repository.Monitor != null)
            {
                using (Repository.Monitor.BlockNotifications(
                           RepositoryNotifications.IndexUpdated,
                           RepositoryNotifications.WorktreeUpdated))
                {
                    status = Repository.Accessor.QueryStatus.Invoke(parameters);
                }
            }
            else
            {
                status = Repository.Accessor.QueryStatus.Invoke(parameters);
            }

            var stagedRoot   = BreakIntoTree(status.StagedFiles, StagedStatus.Staged);
            var unstagedRoot = BreakIntoTree(status.UnstagedFiles, StagedStatus.Unstaged);

            bool m1, m2, m3;

            lock (SyncRoot)
            {
                m1 = Merge(_stagedPlainList, _stagedRoot, status.StagedFiles, stagedRoot);
                m2 = Merge(_unstagedPlainList, _unstagedRoot, status.UnstagedFiles, unstagedRoot);
                m3 = _stagedAddedCount != status.StagedAddedCount ||
                     _stagedModifiedCount != status.StagedModifiedCount ||
                     _stagedRemovedCount != status.StagedRemovedCount ||
                     _unmergedCount != status.UnmergedCount ||
                     _unstagedUntrackedCount != status.UnstagedUntrackedCount ||
                     _unstagedModifiedCount != status.UnstagedModifiedCount ||
                     _unstagedRemovedCount != status.UnstagedRemovedCount;
                if (m3)
                {
                    _stagedAddedCount       = status.StagedAddedCount;
                    _stagedModifiedCount    = status.StagedModifiedCount;
                    _stagedRemovedCount     = status.StagedRemovedCount;
                    _unmergedCount          = status.UnmergedCount;
                    _unstagedUntrackedCount = status.UnstagedUntrackedCount;
                    _unstagedModifiedCount  = status.UnstagedModifiedCount;
                    _unstagedRemovedCount   = status.UnstagedRemovedCount;
                }

                if (m1 || m2 || m3)
                {
                    InvokeChanged();
                }
            }
        }
示例#2
0
        public Command GetQueryStatusCommand(QueryStatusParameters parameters)
        {
            Assert.IsNotNull(parameters);

            var args = new List<ICommandArgument>(7);
            args.Add(StatusCommand.Porcelain());
            args.Add(StatusCommand.UntrackedFiles(parameters.UntrackedFilesMode));
            args.Add(StatusCommand.NullTerminate());
            if(_gitCLI.GitVersion >= SubmodulesStatusArgVersion)
            {
                if(parameters.IgnoreSubmodulesMode != StatusIgnoreSubmodulesMode.Default)
                {
                    args.Add(StatusCommand.IgnoreSubmodules(parameters.IgnoreSubmodulesMode));
                }
            }
            if(!string.IsNullOrEmpty(parameters.Path))
            {
                args.Add(StatusCommand.NoMoreOptions());
                args.Add(new PathCommandArgument(parameters.Path));
            }
            return new StatusCommand(args);
        }