/// <summary> /// Set empty submodule status for 'submoduleName' and below /// </summary> /// <param name="superModule">The module to compare to</param> /// <param name="submoduleName">Name of the submodule</param> private void SetSubmoduleEmptyDetailedStatus(VsrModule superModule, string submoduleName) { if (superModule == null || string.IsNullOrEmpty(submoduleName)) { return; } string path = superModule.GetSubmoduleFullPath(submoduleName); if (!_submoduleInfos.ContainsKey(path) || _submoduleInfos[path] == null) { return; } // null is default status var info = _submoduleInfos[path]; info.Detailed = null; var module = new VsrModule(path); foreach (var name in module.GetSubmodulesLocalPaths(false)) { SetSubmoduleEmptyDetailedStatus(module, name); } }
/// <summary> /// Get the detailed submodule status for 'submoduleName' and below /// </summary> /// <param name="superModule">Module to compare to</param> /// <param name="submoduleName">Name of the submodule</param> /// <param name="cancelToken">Cancelation token</param> /// <returns>the task</returns> private async Task GetSubmoduleDetailedStatusAsync(VsrModule superModule, string submoduleName, CancellationToken cancelToken) { if (superModule == null || string.IsNullOrWhiteSpace(submoduleName)) { return; } var path = superModule.GetSubmoduleFullPath(submoduleName); if (!_submoduleInfos.ContainsKey(path) || _submoduleInfos[path] == null) { return; } var info = _submoduleInfos[path]; cancelToken.ThrowIfCancellationRequested(); var submoduleStatus = await GitCommandHelpers.GetCurrentSubmoduleChangesAsync(superModule, submoduleName, noLocks : true) .ConfigureAwait(false); if (submoduleStatus != null && submoduleStatus.Commit != submoduleStatus.OldCommit) { submoduleStatus.CheckSubmoduleStatus(submoduleStatus.GetSubmodule(superModule)); } info.Detailed = submoduleStatus == null ? null : new DetailedSubmoduleInfo() { Status = submoduleStatus.Status, IsDirty = submoduleStatus.IsDirty, AddedAndRemovedText = submoduleStatus.AddedAndRemovedString() }; if (submoduleStatus != null) { SetTopModuleAsDirty(superModule.GetTopModule().WorkingDir); } // Recursively update submodules var module = new VsrModule(path); await GetSubmoduleDetailedStatusAsync(module, cancelToken); }