Refactors log parsing (a tiny bit)

This commit is contained in:
Eric Amodio
2017-03-28 11:31:22 -04:00
parent 296e562d9f
commit 073353dcda
4 changed files with 17 additions and 22 deletions

View File

@@ -29,7 +29,7 @@ const diffRegex = /diff --git a\/(.*) b\/(.*)/;
export class GitLogParser {
private static _parseEntries(data: string, isRepoPath: boolean, maxCount: number | undefined, reverse: boolean): ILogEntry[] {
private static _parseEntries(data: string, type: GitLogType, maxCount: number | undefined, reverse: boolean): ILogEntry[] {
if (!data) return undefined;
const lines = data.split('\n');
@@ -96,7 +96,7 @@ export class GitLogParser {
break;
case 'filename':
if (isRepoPath) {
if (type === 'repo') {
const nextLine = lines[position + 1];
// If the next line isn't blank, make sure it isn't starting a new commit
if (nextLine && Git.shaRegex.test(nextLine)) continue;
@@ -164,19 +164,18 @@ export class GitLogParser {
return entries;
}
static parse(data: string, type: GitLogType, fileNameOrRepoPath: string, sha: string | undefined, maxCount: number | undefined, isRepoPath: boolean, reverse: boolean, range: Range): IGitLog {
const entries = this._parseEntries(data, isRepoPath, maxCount, reverse);
static parse(data: string, type: GitLogType, repoPath: string | undefined, fileName: string | undefined, sha: string | undefined, maxCount: number | undefined, reverse: boolean, range: Range): IGitLog {
const entries = this._parseEntries(data, type, maxCount, reverse);
if (!entries) return undefined;
const authors: Map<string, IGitAuthor> = new Map();
const commits: Map<string, GitLogCommit> = new Map();
let repoPath: string;
let relativeFileName: string;
let recentCommit: GitLogCommit;
if (isRepoPath) {
repoPath = Git.normalizePath(fileNameOrRepoPath);
if (repoPath !== undefined) {
repoPath = Git.normalizePath(repoPath);
}
for (let i = 0, len = entries.length; i < len; i++) {
@@ -185,15 +184,13 @@ export class GitLogParser {
const entry = entries[i];
if (i === 0 || isRepoPath) {
if (isRepoPath) {
relativeFileName = entry.fileName;
}
else {
// Try to get the repoPath from the most recent commit
repoPath = Git.normalizePath(fileNameOrRepoPath.replace(fileNameOrRepoPath.startsWith('/') ? `/${entry.fileName}` : entry.fileName, ''));
relativeFileName = path.relative(repoPath, fileNameOrRepoPath).replace(/\\/g, '/');
}
if (i === 0 && type === 'file' && !repoPath) {
// Try to get the repoPath from the most recent commit
repoPath = Git.normalizePath(fileName.replace(fileName.startsWith('/') ? `/${entry.fileName}` : entry.fileName, ''));
relativeFileName = Git.normalizePath(path.relative(repoPath, fileName));
}
else {
relativeFileName = entry.fileName;
}
let commit = commits.get(entry.sha);