public static string ProcessSubmoduleStatus([NotNull] GitModule module, [NotNull] GitSubmoduleStatus status) { if (module == null) { throw new ArgumentNullException("module"); } if (status == null) { throw new ArgumentNullException("status"); } GitModule gitmodule = module.GetSubmodule(status.Name); StringBuilder sb = new StringBuilder(); sb.AppendLine("Submodule " + status.Name + " Change"); sb.AppendLine(); sb.AppendLine("From:\t" + (status.OldCommit ?? "null")); CommitData oldCommitData = null; if (gitmodule.IsValidGitWorkingDir()) { string error = ""; if (status.OldCommit != null) { oldCommitData = CommitData.GetCommitData(gitmodule, status.OldCommit, ref error); } if (oldCommitData != null) { sb.AppendLine("\t\t\t\t\t" + GetRelativeDateString(DateTime.UtcNow, oldCommitData.CommitDate.UtcDateTime) + " (" + GetFullDateString(oldCommitData.CommitDate) + ")"); var delim = new char[] { '\n', '\r' }; var lines = oldCommitData.Body.Trim(delim).Split(new string[] { "\r\n" }, 0); foreach (var curline in lines) { sb.AppendLine("\t\t" + curline); } } } else { sb.AppendLine(); } sb.AppendLine(); string dirty = !status.IsDirty ? "" : " (dirty)"; sb.AppendLine("To:\t\t" + (status.Commit ?? "null") + dirty); CommitData commitData = null; if (gitmodule.IsValidGitWorkingDir()) { string error = ""; if (status.Commit != null) { commitData = CommitData.GetCommitData(gitmodule, status.Commit, ref error); } if (commitData != null) { sb.AppendLine("\t\t\t\t\t" + GetRelativeDateString(DateTime.UtcNow, commitData.CommitDate.UtcDateTime) + " (" + GetFullDateString(commitData.CommitDate) + ")"); var delim = new char[] { '\n', '\r' }; var lines = commitData.Body.Trim(delim).Split(new string[] { "\r\n" }, 0); foreach (var curline in lines) { sb.AppendLine("\t\t" + curline); } } } else { sb.AppendLine(); } sb.AppendLine(); var submoduleStatus = gitmodule.CheckSubmoduleStatus(status.Commit, status.OldCommit, commitData, oldCommitData); sb.Append("Type: "); switch (submoduleStatus) { case SubmoduleStatus.NewSubmodule: sb.AppendLine("New submodule"); break; case SubmoduleStatus.FastForward: sb.AppendLine("Fast Forward"); break; case SubmoduleStatus.Rewind: sb.AppendLine("Rewind"); break; case SubmoduleStatus.NewerTime: sb.AppendLine("Newer commit time"); break; case SubmoduleStatus.OlderTime: sb.AppendLine("Older commit time"); break; case SubmoduleStatus.SameTime: sb.AppendLine("Same commit time"); break; default: sb.AppendLine("Unknown"); break; } if (status.AddedCommits != null && status.RemovedCommits != null && (status.AddedCommits != 0 || status.RemovedCommits != 0)) { sb.Append("\nCommits: "); if (status.RemovedCommits > 0) { sb.Append(status.RemovedCommits + " removed"); if (status.AddedCommits > 0) { sb.Append(", "); } } if (status.AddedCommits > 0) { sb.Append(status.AddedCommits + " added"); } sb.AppendLine(); } if (status.Commit != null && status.OldCommit != null) { if (status.IsDirty) { string statusText = gitmodule.GetStatusText(false); if (!String.IsNullOrEmpty(statusText)) { sb.AppendLine("\nStatus:"); sb.Append(statusText); } } string diffs = gitmodule.GetDiffFilesText(status.OldCommit, status.Commit); if (!String.IsNullOrEmpty(diffs)) { sb.AppendLine("\nDifferences:"); sb.Append(diffs); } } return(sb.ToString()); }
public static string ProcessSubmodulePatch(GitModule module, string text) { StringBuilder sb = new StringBuilder(); using (StringReader reader = new StringReader(text)) { string line = reader.ReadLine(); string moduleName = ""; if (line != null) { var match = Regex.Match(line, @"diff --git a/(\S+) b/(\S+)"); if (match != null && match.Groups.Count > 0) { moduleName = match.Groups[1].Value; } } sb.AppendLine("Submodule " + moduleName + " Change"); string fromHash = null; string toHash = null; bool dirtyFlag = false; while ((line = reader.ReadLine()) != null) { if (line.Contains("Subproject")) { sb.AppendLine(); char c = line[0]; const string commit = "commit "; string hash = ""; int pos = line.IndexOf(commit); if (pos >= 0) { hash = line.Substring(pos + commit.Length); } bool bdirty = hash.EndsWith("-dirty"); dirtyFlag |= bdirty; hash = hash.Replace("-dirty", ""); string dirty = !bdirty ? "" : " (dirty)"; if (c == '-') { fromHash = hash; sb.AppendLine("From:\t" + hash + dirty); } else if (c == '+') { toHash = hash; sb.AppendLine("To:\t\t" + hash + dirty); } GitModule gitmodule = module.GetSubmodule(moduleName); if (gitmodule.ValidWorkingDir()) { string error = ""; CommitData commitData = CommitData.GetCommitData(gitmodule, hash, ref error); if (commitData != null) { sb.AppendLine("\t\t\t\t\t" + GitCommandHelpers.GetRelativeDateString(DateTime.UtcNow, commitData.CommitDate.UtcDateTime) + commitData.CommitDate.LocalDateTime.ToString(" (ddd MMM dd HH':'mm':'ss yyyy)")); var delim = new char[] { '\n', '\r' }; var lines = commitData.Body.Trim(delim).Split(new string[] { "\r\n" }, 0); foreach (var curline in lines) { sb.AppendLine("\t\t" + curline); } } if (fromHash != null && toHash != null) { if (dirtyFlag) { string status = gitmodule.GetStatusText(false); if (!String.IsNullOrEmpty(status)) { sb.AppendLine("\nStatus:"); sb.Append(status); } } string diffs = gitmodule.GetDiffFilesText(fromHash, toHash); if (!String.IsNullOrEmpty(diffs)) { sb.AppendLine("\nDifferences:"); sb.Append(diffs); } } } else { sb.AppendLine(); } } } } return(sb.ToString()); }
public static string ProcessSubmodulePatch(GitModule module, string text) { var status = GetSubmoduleStatus(text); GitModule gitmodule = module.GetSubmodule(status.Name); StringBuilder sb = new StringBuilder(); sb.AppendLine("Submodule " + status.Name + " Change"); sb.AppendLine(); sb.AppendLine("From:\t" + status.OldCommit); if (gitmodule.ValidWorkingDir()) { string error = ""; CommitData commitData = CommitData.GetCommitData(gitmodule, status.OldCommit, ref error); if (commitData != null) { sb.AppendLine("\t\t\t\t\t" + GitCommandHelpers.GetRelativeDateString(DateTime.UtcNow, commitData.CommitDate.UtcDateTime) + commitData.CommitDate.LocalDateTime.ToString(" (ddd MMM dd HH':'mm':'ss yyyy)")); var delim = new char[] { '\n', '\r' }; var lines = commitData.Body.Trim(delim).Split(new string[] { "\r\n" }, 0); foreach (var curline in lines) { sb.AppendLine("\t\t" + curline); } } } else { sb.AppendLine(); } sb.AppendLine(); string dirty = !status.IsDirty ? "" : " (dirty)"; sb.AppendLine("To:\t\t" + status.Commit + dirty); if (gitmodule.ValidWorkingDir()) { string error = ""; CommitData commitData = CommitData.GetCommitData(gitmodule, status.Commit, ref error); if (commitData != null) { sb.AppendLine("\t\t\t\t\t" + GitCommandHelpers.GetRelativeDateString(DateTime.UtcNow, commitData.CommitDate.UtcDateTime) + commitData.CommitDate.LocalDateTime.ToString(" (ddd MMM dd HH':'mm':'ss yyyy)")); var delim = new char[] { '\n', '\r' }; var lines = commitData.Body.Trim(delim).Split(new string[] { "\r\n" }, 0); foreach (var curline in lines) { sb.AppendLine("\t\t" + curline); } } } else { sb.AppendLine(); } if (status.Commit != null && status.OldCommit != null) { if (status.IsDirty) { string statusText = gitmodule.GetStatusText(false); if (!String.IsNullOrEmpty(statusText)) { sb.AppendLine("\nStatus:"); sb.Append(statusText); } } string diffs = gitmodule.GetDiffFilesText(status.OldCommit, status.Commit); if (!String.IsNullOrEmpty(diffs)) { sb.AppendLine("\nDifferences:"); sb.Append(diffs); } } return(sb.ToString()); }
public static string ProcessSubmoduleStatus([NotNull] GitModule module, [NotNull] GitSubmoduleStatus status) { if (module == null) { throw new ArgumentNullException(nameof(module)); } if (status == null) { throw new ArgumentNullException(nameof(status)); } GitModule gitModule = module.GetSubmodule(status.Name); var sb = new StringBuilder(); sb.AppendLine("Submodule " + status.Name + " Change"); // TEMP, will be moved in the follow up refactor ICommitDataManager commitDataManager = new CommitDataManager(() => gitModule); sb.AppendLine(); sb.AppendLine("From:\t" + (status.OldCommit?.ToString() ?? "null")); CommitData oldCommitData = null; // TODO File access for Git revision access if (gitModule.IsValidGitWorkingDir()) { if (status.OldCommit != null) { oldCommitData = commitDataManager.GetCommitData(status.OldCommit.ToString(), out _); } if (oldCommitData != null) { sb.AppendLine("\t\t\t\t\t" + GetRelativeDateString(DateTime.UtcNow, oldCommitData.CommitDate.UtcDateTime) + " (" + GetFullDateString(oldCommitData.CommitDate) + ")"); var delimiter = new[] { '\n', '\r' }; var lines = oldCommitData.Body.Trim(delimiter).Split(new[] { "\r\n" }, 0); foreach (var line in lines) { sb.AppendLine("\t\t" + line); } } } else { sb.AppendLine(); } sb.AppendLine(); string dirty = !status.IsDirty ? "" : " (dirty)"; sb.AppendLine("To:\t\t" + (status.Commit?.ToString() ?? "null") + dirty); CommitData commitData = null; // TODO File access for Git revision access if (gitModule.IsValidGitWorkingDir()) { if (status.Commit != null) { commitData = commitDataManager.GetCommitData(status.Commit.ToString(), out _); } if (commitData != null) { sb.AppendLine("\t\t\t\t\t" + GetRelativeDateString(DateTime.UtcNow, commitData.CommitDate.UtcDateTime) + " (" + GetFullDateString(commitData.CommitDate) + ")"); var delimiter = new[] { '\n', '\r' }; var lines = commitData.Body.Trim(delimiter).Split(new[] { "\r\n" }, 0); foreach (var line in lines) { sb.AppendLine("\t\t" + line); } } } else { sb.AppendLine(); } sb.AppendLine(); var submoduleStatus = gitModule.CheckSubmoduleStatus(status.Commit, status.OldCommit, commitData, oldCommitData); sb.Append("Type: "); switch (submoduleStatus) { case SubmoduleStatus.NewSubmodule: sb.AppendLine("New submodule"); break; case SubmoduleStatus.FastForward: sb.AppendLine("Fast Forward"); break; case SubmoduleStatus.Rewind: sb.AppendLine("Rewind"); break; case SubmoduleStatus.NewerTime: sb.AppendLine("Newer commit time"); break; case SubmoduleStatus.OlderTime: sb.AppendLine("Older commit time"); break; case SubmoduleStatus.SameTime: sb.AppendLine("Same commit time"); break; default: sb.AppendLine("Unknown"); break; } if (status.AddedCommits != null && status.RemovedCommits != null && (status.AddedCommits != 0 || status.RemovedCommits != 0)) { sb.Append("\nCommits: "); if (status.RemovedCommits > 0) { sb.Append(status.RemovedCommits + " removed"); if (status.AddedCommits > 0) { sb.Append(", "); } } if (status.AddedCommits > 0) { sb.Append(status.AddedCommits + " added"); } sb.AppendLine(); } if (status.Commit != null && status.OldCommit != null) { if (status.IsDirty) { string statusText = gitModule.GetStatusText(untracked: false); if (!string.IsNullOrEmpty(statusText)) { sb.AppendLine("\nStatus:"); sb.Append(statusText); } } string diffs = gitModule.GetDiffFilesText(status.OldCommit.ToString(), status.Commit.ToString()); if (!string.IsNullOrEmpty(diffs)) { sb.AppendLine("\nDifferences:"); sb.Append(diffs); } } return(sb.ToString()); }