// 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}"); }
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); }
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()); }
protected DateTime MapTokenToDateTime(GitLogEntryLabels token, string[] values) { var result = MapTokenToString(token, values); return(result == null ? DateTime.MinValue : DateTime.Parse(result)); }