Skip to content

Commit abf60c2

Browse files
committed
Adds e-mail to all commit models
1 parent 0378a4e commit abf60c2

File tree

6 files changed

+53
-33
lines changed

6 files changed

+53
-33
lines changed

src/git/git.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export * from './remotes/provider';
2323
let git: IGit;
2424

2525
const defaultBlameParams = ['blame', '--root', '--incremental'];
26-
const defaultLogParams = ['log', '--name-status', '--full-history', '-M', '--format=%H -%nauthor %an%nauthor-email %ae%nauthor-date %at%nparents %P%nsummary %B%nfilename ?'];
26+
const defaultLogParams = ['log', '--name-status', '--full-history', '-M', '--format=%H -%nauthor %an%nauthor-mail %ae%nauthor-date %at%nparents %P%nsummary %B%nfilename ?'];
2727
const defaultStashParams = ['stash', 'list', '--name-status', '--full-history', '-M', '--format=%H -%nauthor-date %at%nreflog-selector %gd%nsummary %B%nfilename ?'];
2828

2929
const GitWarnings = [

src/git/models/blameCommit.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export class GitBlameCommit extends GitCommit {
77
repoPath: string,
88
sha: string,
99
author: string,
10+
email: string | undefined,
1011
date: Date,
1112
message: string,
1213
fileName: string,
@@ -20,6 +21,7 @@ export class GitBlameCommit extends GitCommit {
2021
repoPath,
2122
sha,
2223
author,
24+
email,
2325
date,
2426
message,
2527
fileName,
@@ -40,6 +42,7 @@ export class GitBlameCommit extends GitCommit {
4042
this.repoPath,
4143
changes.sha || this.sha,
4244
this.author,
45+
this.email,
4346
this.date,
4447
this.message,
4548
changes.fileName || this.fileName,

src/git/models/commit.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
'use strict';
22
import { Dates, Strings } from '../../system';
33
import { Uri } from 'vscode';
4-
import { configuration, DateStyle } from '../../configuration';
4+
import { configuration, DateStyle, GravatarDefault } from '../../configuration';
55
import { GlyphChars } from '../../constants';
66
import { Container } from '../../container';
77
import { Git } from '../git';
88
import { GitUri } from '../gitUri';
99
import * as path from 'path';
1010

11+
const gravatarCache: Map<string, Uri> = new Map();
12+
export function clearGravatarCache() {
13+
gravatarCache.clear();
14+
}
15+
1116
export interface GitAuthor {
1217
name: string;
1318
lineCount: number;
@@ -58,6 +63,7 @@ export abstract class GitCommit {
5863
public readonly repoPath: string,
5964
public readonly sha: string,
6065
public readonly author: string,
66+
public readonly email: string | undefined,
6167
public readonly date: Date,
6268
public readonly message: string,
6369
fileName: string,
@@ -165,6 +171,27 @@ export abstract class GitCommit {
165171
return GitUri.getFormattedPath(this.fileName, separator);
166172
}
167173

174+
getGravatarUri(fallback: GravatarDefault): Uri {
175+
const key = this.email
176+
? `${ this.email.trim().toLowerCase() }`
177+
: '';
178+
179+
let gravatar = gravatarCache.get(key);
180+
if (gravatar !== undefined) return gravatar;
181+
182+
gravatar = Uri.parse(`https://www.gravatar.com/avatar/${this.email ? Strings.md5(this.email, 'hex') : '00000000000000000000000000000000'}.jpg?s=22&d=${fallback}`);
183+
184+
// HACK: Monkey patch Uri.toString to avoid the unwanted query string encoding
185+
const originalToStringFn = gravatar.toString;
186+
gravatar.toString = function(skipEncoding?: boolean | undefined) {
187+
return originalToStringFn.call(gravatar, true);
188+
};
189+
190+
gravatarCache.set(key, gravatar);
191+
192+
return gravatar;
193+
}
194+
168195
async resolvePreviousFileSha(): Promise<void> {
169196
if (this._resolvedPreviousFileSha !== undefined) return;
170197

src/git/models/logCommit.ts

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,10 @@
22
import { Strings } from '../../system';
33
import { Uri } from 'vscode';
44
import { GitCommit, GitCommitType } from './commit';
5-
import { GravatarDefault } from '../../configuration';
65
import { Git } from '../git';
76
import { GitStatusFileStatus, IGitStatusFile } from './status';
87
import * as path from 'path';
98

10-
const gravatarCache: Map<string, Uri> = new Map();
11-
12-
export function clearGravatarCache() {
13-
gravatarCache.clear();
14-
}
15-
169
export class GitLogCommit extends GitCommit {
1710

1811
nextSha?: string;
@@ -23,7 +16,7 @@ export class GitLogCommit extends GitCommit {
2316
repoPath: string,
2417
sha: string,
2518
author: string,
26-
public readonly email: string | undefined,
19+
email: string | undefined,
2720
date: Date,
2821
message: string,
2922
fileName: string,
@@ -39,6 +32,7 @@ export class GitLogCommit extends GitCommit {
3932
repoPath,
4033
sha,
4134
author,
35+
email,
4236
date,
4337
message,
4438
fileName,
@@ -91,27 +85,6 @@ export class GitLogCommit extends GitCommit {
9185
return `+${added} ~${changed} -${deleted}`;
9286
}
9387

94-
getGravatarUri(fallback: GravatarDefault): Uri {
95-
const key = this.email
96-
? `${ this.email.trim().toLowerCase() }`
97-
: '';
98-
99-
let gravatar = gravatarCache.get(key);
100-
if (gravatar !== undefined) return gravatar;
101-
102-
gravatar = Uri.parse(`https://www.gravatar.com/avatar/${this.email ? Strings.md5(this.email, 'hex') : '00000000000000000000000000000000'}.jpg?s=22&d=${fallback}`);
103-
104-
// HACK: Monkey patch Uri.toString to avoid the unwanted query string encoding
105-
const originalToStringFn = gravatar.toString;
106-
gravatar.toString = function(skipEncoding?: boolean | undefined) {
107-
return originalToStringFn.call(gravatar, true);
108-
};
109-
110-
gravatarCache.set(key, gravatar);
111-
112-
return gravatar;
113-
}
114-
11588
toFileCommit(fileName: string): GitLogCommit | undefined;
11689
toFileCommit(status: IGitStatusFile): GitLogCommit;
11790
toFileCommit(fileNameOrStatus: string | IGitStatusFile): GitLogCommit | undefined {

src/git/parsers/blameParser.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ interface BlameEntry {
1313
author: string;
1414
authorDate?: string;
1515
authorTimeZone?: string;
16+
authorEmail?: string;
1617

1718
previousSha?: string;
1819
previousFileName?: string;
@@ -61,6 +62,21 @@ export class GitBlameParser {
6162
: lineParts.slice(1).join(' ').trim();
6263
break;
6364

65+
case 'author-mail':
66+
entry.authorEmail = lineParts.slice(1).join(' ').trim();
67+
const start = entry.authorEmail.indexOf('<');
68+
if (start >= 0) {
69+
const end = entry.authorEmail.indexOf('>', start);
70+
if (end > start) {
71+
entry.authorEmail = entry.authorEmail.substring(start + 1, end);
72+
}
73+
else {
74+
entry.authorEmail = entry.authorEmail.substring(start + 1);
75+
}
76+
}
77+
78+
break;
79+
6480
case 'author-time':
6581
entry.authorDate = lineParts[1];
6682
break;
@@ -135,6 +151,7 @@ export class GitBlameParser {
135151
repoPath!,
136152
entry.sha,
137153
entry.author,
154+
entry.authorEmail,
138155
new Date(entry.authorDate as any * 1000),
139156
entry.summary!,
140157
fileName!,

src/git/parsers/logParser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ interface LogEntry {
99
sha: string;
1010

1111
author: string;
12-
authorEmail?: string;
1312
authorDate?: string;
13+
authorEmail?: string;
1414

1515
parentShas?: string[];
1616

@@ -84,7 +84,7 @@ export class GitLogParser {
8484
: lineParts.slice(1).join(' ').trim();
8585
break;
8686

87-
case 'author-email':
87+
case 'author-mail':
8888
entry.authorEmail = lineParts.slice(1).join(' ').trim();
8989
break;
9090

0 commit comments

Comments
 (0)