예제 #1
0
        async private Task doGitUpdateAsync(string arguments, string path)
        {
            Debug.Assert(_currentUpdateType.HasValue);
            Debug.Assert(_currentUpdateOperationDescriptor == null);
            if (_isDisposed)
            {
                return;
            }

            void onProgressChangeAggregate(string status) => _onProgressChangeCallbacks?.ForEach(x => x?.Invoke(status));
            void onUpdateStateChangeAggregate() => _onUpdateStateChangeCallbacks?.ForEach(x => x?.Invoke());

            ExternalProcess.AsyncTaskDescriptor descriptor = _processManager.CreateDescriptor(
                "git", arguments, path, onProgressChangeAggregate, null);

            try
            {
                _currentUpdateOperationDescriptor = descriptor;
                onUpdateStateChangeAggregate();
                traceInformation(String.Format("START git with arguments \"{0}\" in \"{1}\" for {2}",
                                               arguments, _gitRepository.Path, _gitRepository.ProjectKey.ProjectName));
                await _processManager.Wait(descriptor);
            }
            finally
            {
                traceInformation(String.Format("FINISH git with arguments \"{0}\" in \"{1}\" for {2}",
                                               arguments, _gitRepository.Path, _gitRepository.ProjectKey.ProjectName));
                _currentUpdateOperationDescriptor = null;
                onUpdateStateChangeAggregate();
            }
        }
예제 #2
0
        public void Cancel(ExternalProcess.AsyncTaskDescriptor descriptor)
        {
            if (_isDisposed)
            {
                return;
            }

            _externalProcessManager.Cancel(descriptor);
        }
예제 #3
0
        async public Task Wait(ExternalProcess.AsyncTaskDescriptor descriptor)
        {
            if (_isDisposed)
            {
                return;
            }

            try
            {
                await _externalProcessManager.Wait(descriptor);

                checkStandardError(descriptor.StdErr);
                traceOperationStatus(descriptor.Process.StartInfo.Arguments, "end");
            }
            catch (ExternalProcessFailureException ex)
            {
                handleException("wait", ex);
            }
        }
예제 #4
0
        async protected Task <ExternalProcess.AsyncTaskDescriptor> startExternalProcessAsync(
            string appName, string arguments, string path, int[] successCodes)
        {
            try
            {
                ExternalProcess.AsyncTaskDescriptor d = _processManager.CreateDescriptor(
                    appName, arguments, path, null, successCodes);
                await _processManager.Wait(d);

                return(d);
            }
            catch (OperationCancelledException)
            {
                return(null);
            }
            catch (SystemException ex)
            {
                throw new GitCommandServiceInternalException(ex);
            }
            catch (GitCallFailedException ex)
            {
                throw new GitCommandServiceInternalException(ex);
            }
        }