1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
import type { Faker } from '../..';
/**
* Module to generate git related entries.
*/
export class Git {
private hexChars = [
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'a',
'b',
'c',
'd',
'e',
'f',
];
constructor(private readonly faker: Faker) {
// Bind `this` so namespaced is working correctly
for (const name of Object.getOwnPropertyNames(Git.prototype)) {
if (name === 'constructor' || typeof this[name] !== 'function') {
continue;
}
this[name] = this[name].bind(this);
}
}
/**
* Generates a random branch name.
*
* @example
* faker.git.branch() // 'feed-parse'
*/
branch(): string {
const noun = this.faker.hacker.noun().replace(' ', '-');
const verb = this.faker.hacker.verb().replace(' ', '-');
return `${noun}-${verb}`;
}
/**
* Generates a random commit entry.
*
* @param options Options for the commit entry.
* @param options.merge Set to `true` to generate a merge message line.
* @param options.eol Choose the end of line character to use. Defaults to 'CRLF'.
* 'LF' = '\n',
* 'CRLF' = '\r\n'
*
* @example
* faker.git.commitEntry()
* // commit fe8c38a965d13d9794eb36918cb24cebe49a45c2
* // Author: Mable Harvey <[email protected]>
* // Date: Sat Feb 05 2022 15:09:18 GMT+0100 (Mitteleuropäische Normalzeit)
* //
* // copy primary system
*/
commitEntry(
options: {
merge?: boolean;
eol?: 'LF' | 'CRLF';
} = {}
): string {
const lines = [`commit ${this.faker.git.commitSha()}`];
if (options.merge || this.faker.datatype.number({ min: 0, max: 4 }) === 0) {
lines.push(`Merge: ${this.shortSha()} ${this.shortSha()}`);
}
lines.push(
`Author: ${this.faker.name.firstName()} ${this.faker.name.lastName()} <${this.faker.internet.email()}>`,
`Date: ${this.faker.date.recent().toString()}`,
'',
`\xa0\xa0\xa0\xa0${this.commitMessage()}`,
// to end with a eol char
''
);
const eolOption = options.eol ?? 'CRLF';
const eolChar = eolOption === 'CRLF' ? '\r\n' : '\n';
const entry = lines.join(eolChar);
return entry;
}
/**
* Generates a random commit message.
*
* @example
* faker.git.commitMessage() // 'reboot cross-platform driver'
*/
commitMessage(): string {
return `${this.faker.hacker.verb()} ${this.faker.hacker.adjective()} ${this.faker.hacker.noun()}`;
}
/**
* Generates a random commit sha (full).
*
* @example
* faker.git.commitSha() // '2c6e3880fd94ddb7ef72d34e683cdc0c47bec6e6'
*/
commitSha(): string {
let commit = '';
for (let i = 0; i < 40; i++) {
commit += this.faker.helpers.arrayElement(this.hexChars);
}
return commit;
}
/**
* Generates a random commit sha (short).
*
* @example
* faker.git.shortSha() // '6155732'
*/
shortSha(): string {
let shortSha = '';
for (let i = 0; i < 7; i++) {
shortSha += this.faker.helpers.arrayElement(this.hexChars);
}
return shortSha;
}
}
|