예제 #1
0
        // for now, caching is disabled since the log filters can change the results so much
        public GitLogCommand(GetGitLog cmdlet) : base(cmdlet.RepositoryDirectories, false)
        {
            this.CmdletWriter    = cmdlet.CmdletWriter;
            this.EndOfLineToken  = "]|[";
            this.ValueSplitToken = "|,|";
            this.Before          = MakeFilterDate(cmdlet.Before);
            this.After           = MakeFilterDate(cmdlet.After);

            var after = string.IsNullOrEmpty(this.After) ? "" : $" --since=\"{this.After}\"";

            var before = string.IsNullOrEmpty(this.Before) ? "" : $" --before=\"{this.Before}\"";

            // format specs: https://git-scm.com/docs/pretty-formats
            var formatText = string.Format(" --pretty=format:\"%H{1}%ai{1}%ae{1}%cn{1}%ci{1}%s{1}%d{0}\"", EndOfLineToken, ValueSplitToken);
            var tokenOrder = new GitLogEntryLabels[]
            {
                GitLogEntryLabels.Hash,
                GitLogEntryLabels.AuthorDate,
                GitLogEntryLabels.AuthorEmail,
                GitLogEntryLabels.AuthorName,
                GitLogEntryLabels.CommitDate,
                GitLogEntryLabels.Subject,
                GitLogEntryLabels.Refs
            };

            Name           = "Log";
            CacheName      = "log";
            Command        = $"git log {after}{before}{formatText}";
            CacheLinkFiles = new string[] { "index", "FETCH_HEAD", "HEAD", "COMMIT_EDITMSG", "refs/remotes/origin/{branchName}" };
            Parser         = new GitLogParser(this, tokenOrder);

            CommandExecFolder = RepositoryDirectories.CurrentPath;
            CmdletWriter.WriteVerbose($"Command: {Command}");
        }
예제 #2
0
        protected string MapTokenToString(GitLogEntryLabels token, string[] values)
        {
            string result = null;

            if (_tokenPositions.ContainsKey(token))
            {
                var pos = _tokenPositions[token];

                if (values.Length > pos)
                {
                    result = values[pos];
                }
            }

            return(result);
        }
예제 #3
0
        protected string[] MapTokenToStringArray(GitLogEntryLabels token, string[] values)
        {
            var result = new List <string>();
            var val    = MapTokenToString(token, values);

            if (!string.IsNullOrEmpty(val))
            {
                var vals = val.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var refVal in vals)
                {
                    var newVal = refVal.Trim('(', ')', ' ', '\r', '\n');
                    if (!string.IsNullOrEmpty(newVal))
                    {
                        result.Add(newVal);
                    }
                }
            }

            return(result.ToArray());
        }
예제 #4
0
        protected DateTime MapTokenToDateTime(GitLogEntryLabels token, string[] values)
        {
            var result = MapTokenToString(token, values);

            return(result == null ? DateTime.MinValue : DateTime.Parse(result));
        }