Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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());
        }