@eclipse-glsp/cli 1.1.0-next.28fb493.121 → 1.1.0-next.3cde244.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/lib/commands/check-header.d.ts +2 -2
- package/lib/commands/check-header.d.ts.map +1 -1
- package/lib/commands/check-header.js +53 -20
- package/lib/commands/check-header.js.map +1 -1
- package/lib/util/git-util.d.ts +5 -3
- package/lib/util/git-util.d.ts.map +1 -1
- package/lib/util/git-util.js +10 -5
- package/lib/util/git-util.js.map +1 -1
- package/package.json +3 -3
- package/src/commands/check-header.ts +65 -25
- package/src/util/git-util.ts +10 -5
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ yarn add @eclipse-glsp/cli --dev
|
|
|
15
15
|
|
|
16
16
|
The `checkHeaders` command can be used to validate the copyright year (range) of license headers.
|
|
17
17
|
It checks for each file (matching the include pattern) whether the defined copyright range is in line with the first and last modification date in the git repository.
|
|
18
|
-
Found violations are printed to the console.
|
|
18
|
+
Found violations are printed to the console and can be fixed automatically.
|
|
19
19
|
The validation check can be restricted to pending changes and/or the last commit e.g. to validate a commit before creating a PR.
|
|
20
20
|
|
|
21
21
|
```console
|
|
@@ -29,14 +29,14 @@ Arguments:
|
|
|
29
29
|
rootDir The starting directory for the check
|
|
30
30
|
|
|
31
31
|
Options:
|
|
32
|
-
-t, --type <type> The scope of the check. In addition to a full recursive check, is also possible to only consider pending changes or the last commit (choices: "full", "changes", "lastCommit",
|
|
33
|
-
|
|
32
|
+
-t, --type <type> The scope of the check. In addition to a full recursive check, is also possible to only consider pending changes or the last commit (choices: "full", "changes", "lastCommit", default:
|
|
33
|
+
"full")
|
|
34
34
|
-f, --fileExtensions <extensions...> File extensions that should be checked (default: ["ts","tsx"])
|
|
35
35
|
-e, --exclude <exclude...> File patterns that should be excluded from the check. New exclude patterns are added to the default patterns (default: [**/@(node_modules|lib|dist|bundle)/**])
|
|
36
36
|
--no-exclude-defaults Disables the default excludes patterns. Only explicitly passed exclude patterns (-e, --exclude) are considered
|
|
37
|
-
-p, --headerPattern <pattern> Regex pattern to extract the copyright year (range) from the header (default: "Copyright \\([cC]\\) \\d{4}(-d{4})?")
|
|
38
37
|
-j, --json Also persist validation results as json file (default: false)
|
|
39
38
|
-s, --severity <severity> The severity of validation results that should be printed. (choices: "error", "warn", "ok", default: "error" (only))
|
|
39
|
+
-a, --autoFix Auto apply & commit fixes without prompting the user (default: false)
|
|
40
40
|
-h, --help display help for command
|
|
41
41
|
```
|
|
42
42
|
|
|
@@ -2,9 +2,9 @@ export interface HeaderCheckOptions {
|
|
|
2
2
|
type: CheckType;
|
|
3
3
|
exclude: string[];
|
|
4
4
|
fileExtensions: string[];
|
|
5
|
-
headerPattern: string;
|
|
6
5
|
json: boolean;
|
|
7
6
|
excludeDefaults: boolean;
|
|
7
|
+
autoFix: boolean;
|
|
8
8
|
severity: Severity;
|
|
9
9
|
}
|
|
10
10
|
declare const checkTypes: readonly ["full", "changes", "lastCommit"];
|
|
@@ -13,7 +13,7 @@ declare const severityTypes: readonly ["error", "warn", "ok"];
|
|
|
13
13
|
type Severity = typeof severityTypes[number];
|
|
14
14
|
export declare const CheckHeaderCommand: import("commander").Command;
|
|
15
15
|
export declare function checkHeaders(rootDir: string, options: HeaderCheckOptions): void;
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function handleValidationResults(rootDir: string, results: ValidationResult[], options: HeaderCheckOptions): void;
|
|
17
17
|
interface ValidationResult {
|
|
18
18
|
file: string;
|
|
19
19
|
severity: Severity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-header.d.ts","sourceRoot":"","sources":["../../src/commands/check-header.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check-header.d.ts","sourceRoot":"","sources":["../../src/commands/check-header.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACtB;AAED,QAAA,MAAM,UAAU,4CAA6C,CAAC;AAC9D,KAAK,SAAS,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAE3C,QAAA,MAAM,aAAa,kCAAmC,CAAC;AAEvD,KAAK,QAAQ,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAO7C,eAAO,MAAM,kBAAkB,6BA+BN,CAAC;AAE1B,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAgB/E;AAkJD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CA+BvH;AAsDD,UAAU,gBAAgB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;CACxB;AAaD,KAAK,SAAS,GAAG,MAAM,GAAG,mBAAmB,GAAG,0BAA0B,GAAG,sBAAsB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.handleValidationResults = exports.checkHeaders = exports.CheckHeaderCommand = void 0;
|
|
4
4
|
/********************************************************************************
|
|
5
|
-
* Copyright (c) 2022 EclipseSource and others.
|
|
5
|
+
* Copyright (c) 2022-2023 EclipseSource and others.
|
|
6
6
|
*
|
|
7
7
|
* This program and the accompanying materials are made available under the
|
|
8
8
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -21,6 +21,7 @@ const commander_1 = require("commander");
|
|
|
21
21
|
const fs = require("fs");
|
|
22
22
|
const glob_1 = require("glob");
|
|
23
23
|
const minimatch = require("minimatch");
|
|
24
|
+
const readline = require("readline-sync");
|
|
24
25
|
const sh = require("shelljs");
|
|
25
26
|
const command_util_1 = require("../util/command-util");
|
|
26
27
|
const git_util_1 = require("../util/git-util");
|
|
@@ -31,6 +32,8 @@ const checkTypes = ['full', 'changes', 'lastCommit'];
|
|
|
31
32
|
const severityTypes = ['error', 'warn', 'ok'];
|
|
32
33
|
const DEFAULT_EXCLUDES = ['**/@(node_modules|lib|dist|bundle)/**'];
|
|
33
34
|
const YEAR_RANGE_REGEX = /\d{4}(?:-d{4})?/g;
|
|
35
|
+
const HEADER_PATTERN = 'Copyright \\([cC]\\) \\d{4}(-d{4})?';
|
|
36
|
+
const AUTO_FIX_MESSAGE = 'Fix copyright header violations';
|
|
34
37
|
exports.CheckHeaderCommand = (0, command_util_1.baseCommand)() //
|
|
35
38
|
.name('checkHeaders')
|
|
36
39
|
.description('Validates the copyright year range of license header files')
|
|
@@ -42,11 +45,11 @@ exports.CheckHeaderCommand = (0, command_util_1.baseCommand)() //
|
|
|
42
45
|
.option('-f, --fileExtensions <extensions...>', 'File extensions that should be checked', ['ts', 'tsx'])
|
|
43
46
|
.addOption(new commander_1.Option('-e, --exclude <exclude...>', 'File patterns that should be excluded from the check. New exclude patterns are added to the default patterns').default([], `[${DEFAULT_EXCLUDES}]`))
|
|
44
47
|
.option('--no-exclude-defaults', 'Disables the default excludes patterns. Only explicitly passed exclude patterns (-e, --exclude) are considered')
|
|
45
|
-
.option('-p, --headerPattern <pattern>', 'Regex pattern to extract the copyright year (range) from the header', 'Copyright \\([cC]\\) \\d{4}(-d{4})?')
|
|
46
48
|
.option('-j, --json', 'Also persist validation results as json file', false)
|
|
47
49
|
.addOption(new commander_1.Option('-s, --severity <severity>', 'The severity of validation results that should be printed.')
|
|
48
50
|
.choices(severityTypes)
|
|
49
51
|
.default('error', '"error" (only)'))
|
|
52
|
+
.option('-a, --autoFix', 'Auto apply & commit fixes without prompting the user', false)
|
|
50
53
|
.action(checkHeaders);
|
|
51
54
|
function checkHeaders(rootDir, options) {
|
|
52
55
|
(0, command_util_1.configureShell)({ silent: true, fatal: true });
|
|
@@ -60,8 +63,8 @@ function checkHeaders(rootDir, options) {
|
|
|
60
63
|
logger_1.LOGGER.info('Check completed');
|
|
61
64
|
return;
|
|
62
65
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
66
|
+
const results = validate(rootDir, files, options);
|
|
67
|
+
handleValidationResults(rootDir, results, options);
|
|
65
68
|
}
|
|
66
69
|
exports.checkHeaders = checkHeaders;
|
|
67
70
|
function getFiles(rootDir, options) {
|
|
@@ -78,14 +81,14 @@ function getFiles(rootDir, options) {
|
|
|
78
81
|
excludePattern.forEach(pattern => {
|
|
79
82
|
changedFiles = changedFiles.filter(minimatch.filter(`!${pattern}`));
|
|
80
83
|
});
|
|
81
|
-
return changedFiles;
|
|
84
|
+
return changedFiles.filter(file => fs.existsSync(file));
|
|
82
85
|
}
|
|
83
86
|
function validate(rootDir, files, options) {
|
|
84
87
|
var _a;
|
|
85
88
|
// Derives all files with valid headers, their copyright years and all files with no or invalid headers
|
|
86
|
-
const filesWithHeader = sh.grep('-l',
|
|
89
|
+
const filesWithHeader = sh.grep('-l', HEADER_PATTERN, files).stdout.trim().split('\n');
|
|
87
90
|
const copyrightYears = sh
|
|
88
|
-
.grep(
|
|
91
|
+
.grep(HEADER_PATTERN, files)
|
|
89
92
|
.stdout.trim()
|
|
90
93
|
.split('\n')
|
|
91
94
|
.map(line => line.match(YEAR_RANGE_REGEX).map(string => Number.parseInt(string, 10)));
|
|
@@ -98,7 +101,7 @@ function validate(rootDir, files, options) {
|
|
|
98
101
|
logger_1.LOGGER.info(`Found ${noHeadersLength} files with no (or an invalid) copyright header`);
|
|
99
102
|
}
|
|
100
103
|
noHeaders.forEach((file, i) => {
|
|
101
|
-
|
|
104
|
+
printFileProgress(i + 1, allFilesLength, `Validating ${file}`);
|
|
102
105
|
results.push({ file: path.resolve(rootDir, file), violation: 'noOrMissingHeader', severity: 'error' });
|
|
103
106
|
});
|
|
104
107
|
// Performance optimization: avoid retrieving the dates for each individual file by precalculating the endYear if possible.
|
|
@@ -111,12 +114,12 @@ function validate(rootDir, files, options) {
|
|
|
111
114
|
}
|
|
112
115
|
// Create validation results for all files with valid headers
|
|
113
116
|
filesWithHeader.forEach((file, i) => {
|
|
114
|
-
|
|
117
|
+
printFileProgress(i + 1 + noHeadersLength, allFilesLength, `Validating ${file}`);
|
|
115
118
|
const result = {
|
|
116
119
|
currentStartYear: copyrightYears[i].shift(),
|
|
117
|
-
expectedStartYear: (0, git_util_1.getFirstModificationDate)(file).getFullYear(),
|
|
120
|
+
expectedStartYear: (0, git_util_1.getFirstModificationDate)(file, rootDir, AUTO_FIX_MESSAGE).getFullYear(),
|
|
118
121
|
currentEndYear: copyrightYears[i].shift(),
|
|
119
|
-
expectedEndYear: defaultEndYear !== null && defaultEndYear !== void 0 ? defaultEndYear : (0, git_util_1.getLastModificationDate)(file).getFullYear(),
|
|
122
|
+
expectedEndYear: defaultEndYear !== null && defaultEndYear !== void 0 ? defaultEndYear : (0, git_util_1.getLastModificationDate)(file, rootDir, AUTO_FIX_MESSAGE).getFullYear(),
|
|
120
123
|
file,
|
|
121
124
|
severity: 'ok',
|
|
122
125
|
violation: 'none'
|
|
@@ -181,17 +184,20 @@ function validateTimePeriod(result) {
|
|
|
181
184
|
}
|
|
182
185
|
}
|
|
183
186
|
}
|
|
184
|
-
function
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
function printFileProgress(currentFileCount, maxFileCount, message, clear = true) {
|
|
188
|
+
if (clear) {
|
|
189
|
+
process.stdout.clearLine(0);
|
|
190
|
+
process.stdout.cursorTo(0);
|
|
191
|
+
}
|
|
192
|
+
process.stdout.write(`[${currentFileCount} of ${maxFileCount}] ${message}`);
|
|
193
|
+
if (!clear) {
|
|
194
|
+
process.stdout.write('\n');
|
|
195
|
+
}
|
|
188
196
|
}
|
|
189
|
-
function
|
|
197
|
+
function handleValidationResults(rootDir, results, options) {
|
|
190
198
|
logger_1.LOGGER.newLine();
|
|
191
199
|
logger_1.LOGGER.info(`Header validation for ${results.length} files completed`);
|
|
192
200
|
const violations = results.filter(result => result.severity === 'error');
|
|
193
|
-
logger_1.LOGGER.info(`Found ${violations.length} copyright header violations:`);
|
|
194
|
-
logger_1.LOGGER.newLine();
|
|
195
201
|
// Adjust results to print based on configured severity level
|
|
196
202
|
let toPrint = results;
|
|
197
203
|
if (options.severity === 'error') {
|
|
@@ -200,14 +206,20 @@ function displayValidationResult(rootDir, results, options) {
|
|
|
200
206
|
else if (options.severity === 'warn') {
|
|
201
207
|
toPrint = results.filter(result => result.severity !== 'ok');
|
|
202
208
|
}
|
|
209
|
+
logger_1.LOGGER.info(`Found ${toPrint.length} copyright header violations:`);
|
|
210
|
+
logger_1.LOGGER.newLine();
|
|
203
211
|
toPrint.forEach((result, i) => logger_1.LOGGER.info(`${i + 1}. `, result.file, ':', toPrintMessage(result)));
|
|
204
212
|
logger_1.LOGGER.newLine();
|
|
205
213
|
if (options.json) {
|
|
206
214
|
fs.writeFileSync(path.join(rootDir, 'headerCheck.json'), JSON.stringify(results, undefined, 2));
|
|
207
215
|
}
|
|
216
|
+
if (violations.length > 0 && (options.autoFix || readline.keyInYN('Do you want automatically fix copyright year range violations?'))) {
|
|
217
|
+
const toFix = violations.filter(violation => violation.severity === 'error' && isDateValidationResult(violation));
|
|
218
|
+
fixViolations(rootDir, toFix, options);
|
|
219
|
+
}
|
|
208
220
|
logger_1.LOGGER.info('Check completed');
|
|
209
221
|
}
|
|
210
|
-
exports.
|
|
222
|
+
exports.handleValidationResults = handleValidationResults;
|
|
211
223
|
function toPrintMessage(result) {
|
|
212
224
|
const colors = {
|
|
213
225
|
error: '\x1b[31m',
|
|
@@ -228,6 +240,27 @@ function toPrintMessage(result) {
|
|
|
228
240
|
}
|
|
229
241
|
return `${colors[result.severity]} OK`;
|
|
230
242
|
}
|
|
243
|
+
function fixViolations(rootDir, violations, options) {
|
|
244
|
+
logger_1.LOGGER.newLine();
|
|
245
|
+
violations.forEach((violation, i) => {
|
|
246
|
+
printFileProgress(i + 1, violations.length, `Fix ${violation.file}`, false);
|
|
247
|
+
const fixedStartYear = violation.currentStartYear < violation.expectedStartYear ? violation.currentStartYear : violation.expectedStartYear;
|
|
248
|
+
const currentRange = `${violation.currentStartYear}${violation.currentEndYear ? '-' + violation.currentEndYear : ''}`;
|
|
249
|
+
let fixedRange = `${fixedStartYear}`;
|
|
250
|
+
if (violation.expectedEndYear !== violation.expectedStartYear || fixedStartYear !== violation.expectedStartYear) {
|
|
251
|
+
fixedRange = `${fixedStartYear}-${violation.expectedEndYear}`;
|
|
252
|
+
}
|
|
253
|
+
sh.sed('-i', RegExp('Copyright \\([cC]\\) ' + currentRange), `Copyright (c) ${fixedRange}`, violation.file);
|
|
254
|
+
});
|
|
255
|
+
logger_1.LOGGER.newLine();
|
|
256
|
+
if (options.autoFix || readline.keyInYN('Do you want to create a commit for the fixed files?')) {
|
|
257
|
+
logger_1.LOGGER.newLine();
|
|
258
|
+
const files = violations.map(violation => violation.file).join(' ');
|
|
259
|
+
sh.exec(`git add ${files}`, (0, command_util_1.getShellConfig)());
|
|
260
|
+
sh.exec(`git commit -m "${AUTO_FIX_MESSAGE}"`);
|
|
261
|
+
logger_1.LOGGER.newLine();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
231
264
|
function isDateValidationResult(object) {
|
|
232
265
|
return 'currentStartYear' in object && 'expectedStartYear' in object && 'expectedEndYear' in object;
|
|
233
266
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-header.js","sourceRoot":"","sources":["../../src/commands/check-header.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check-header.js","sourceRoot":"","sources":["../../src/commands/check-header.ts"],"names":[],"mappings":"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"}
|
package/lib/util/git-util.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2022 EclipseSource and others.
|
|
2
|
+
* Copyright (c) 2022-2022 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -30,16 +30,18 @@ export declare function getChangesOfLastCommit(path?: string): string[];
|
|
|
30
30
|
* Returns the last modification date of a file (or the last commit) in a git repo.
|
|
31
31
|
* @param filePath The file. If undefined the modification date of the last commit will be returned
|
|
32
32
|
* @param repoRoot The path to the repo root. If undefined the current working directory is used.
|
|
33
|
+
* @param excludeMessage Only consider commits that don`t match the excludeMessage
|
|
33
34
|
* @returns The date or undefined if the file is outside of the git repo.
|
|
34
35
|
*/
|
|
35
|
-
export declare function getLastModificationDate(filePath?: string, repoRoot?: string): Date | undefined;
|
|
36
|
+
export declare function getLastModificationDate(filePath?: string, repoRoot?: string, excludeMessage?: string): Date | undefined;
|
|
36
37
|
/**
|
|
37
38
|
* Returns the last modification date of a file in a git repo.
|
|
38
39
|
* @param filePath The file
|
|
39
40
|
* @param repoRoot The path to the repo root. If undefined the current working directory is used.
|
|
41
|
+
* @param excludeMessage Only consider commits that don`t match the excludeMessage
|
|
40
42
|
* @returns The date or undefined if the file is outside of the git repo.
|
|
41
43
|
*/
|
|
42
|
-
export declare function getFirstModificationDate(filePath: string, repoRoot?: string): Date | undefined;
|
|
44
|
+
export declare function getFirstModificationDate(filePath: string, repoRoot?: string, excludeMessage?: string): Date | undefined;
|
|
43
45
|
export declare function getFilesOfCommit(commitHash: string, repoRoot?: string): string[];
|
|
44
46
|
/**
|
|
45
47
|
* Returns the commit hash of the initial commit of the given repository
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-util.d.ts","sourceRoot":"","sources":["../../src/util/git-util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAMlF,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAQtD;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"git-util.d.ts","sourceRoot":"","sources":["../../src/util/git-util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAMlF,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAQtD;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAW7D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAO9D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAQvH;AACD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAcvH;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQhF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWtE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOtF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlD"}
|
package/lib/util/git-util.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/********************************************************************************
|
|
3
|
-
* Copyright (c) 2022 EclipseSource and others.
|
|
3
|
+
* Copyright (c) 2022-2022 EclipseSource and others.
|
|
4
4
|
*
|
|
5
5
|
* This program and the accompanying materials are made available under the
|
|
6
6
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -48,6 +48,7 @@ function getUncommittedChanges(path) {
|
|
|
48
48
|
.exec('git status --porcelain', (0, command_util_1.getShellConfig)())
|
|
49
49
|
.stdout.trim()
|
|
50
50
|
.split('\n')
|
|
51
|
+
.filter(value => value.trim().length !== 0)
|
|
51
52
|
.map(fileInfo => { var _a;
|
|
52
53
|
// Extract relative file path from the info string and convert to absolute path
|
|
53
54
|
return (0, path_1.resolve)(path !== null && path !== void 0 ? path : process.cwd(), (_a = fileInfo.trim().split(' ').pop()) !== null && _a !== void 0 ? _a : ''); });
|
|
@@ -70,11 +71,13 @@ exports.getChangesOfLastCommit = getChangesOfLastCommit;
|
|
|
70
71
|
* Returns the last modification date of a file (or the last commit) in a git repo.
|
|
71
72
|
* @param filePath The file. If undefined the modification date of the last commit will be returned
|
|
72
73
|
* @param repoRoot The path to the repo root. If undefined the current working directory is used.
|
|
74
|
+
* @param excludeMessage Only consider commits that don`t match the excludeMessage
|
|
73
75
|
* @returns The date or undefined if the file is outside of the git repo.
|
|
74
76
|
*/
|
|
75
|
-
function getLastModificationDate(filePath, repoRoot) {
|
|
77
|
+
function getLastModificationDate(filePath, repoRoot, excludeMessage) {
|
|
76
78
|
cdIfPresent(repoRoot);
|
|
77
|
-
const
|
|
79
|
+
const additionalArgs = excludeMessage ? `--grep="${excludeMessage}" --invert-grep` : '';
|
|
80
|
+
const result = sh.exec(`git log -1 ${additionalArgs} --pretty="format:%ci" ${filePath !== null && filePath !== void 0 ? filePath : ''}`, (0, command_util_1.getShellConfig)());
|
|
78
81
|
if (result.code !== 0) {
|
|
79
82
|
return undefined;
|
|
80
83
|
}
|
|
@@ -85,11 +88,13 @@ exports.getLastModificationDate = getLastModificationDate;
|
|
|
85
88
|
* Returns the last modification date of a file in a git repo.
|
|
86
89
|
* @param filePath The file
|
|
87
90
|
* @param repoRoot The path to the repo root. If undefined the current working directory is used.
|
|
91
|
+
* @param excludeMessage Only consider commits that don`t match the excludeMessage
|
|
88
92
|
* @returns The date or undefined if the file is outside of the git repo.
|
|
89
93
|
*/
|
|
90
|
-
function getFirstModificationDate(filePath, repoRoot) {
|
|
94
|
+
function getFirstModificationDate(filePath, repoRoot, excludeMessage) {
|
|
91
95
|
cdIfPresent(repoRoot);
|
|
92
|
-
const
|
|
96
|
+
const additionalArgs = excludeMessage ? `--grep="${excludeMessage}" --invert-grep` : '';
|
|
97
|
+
const result = sh.exec(`git log ${additionalArgs} --pretty="format:%ci" --follow ${filePath}`, (0, command_util_1.getShellConfig)());
|
|
93
98
|
if (result.code !== 0) {
|
|
94
99
|
return undefined;
|
|
95
100
|
}
|
package/lib/util/git-util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-util.js","sourceRoot":"","sources":["../../src/util/git-util.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;AAElF,+BAA+B;AAC/B,8BAA8B;AAC9B,iDAAgD;AAEhD,SAAgB,eAAe,CAAC,IAAa;IACzC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClB,MAAM,SAAS,GACX,EAAE;SACG,IAAI,CAAC,qCAAqC,EAAE,IAAA,6BAAc,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;SAC7E,MAAM,CAAC,IAAI,EAAE;SACb,iBAAiB,EAAE,KAAK,MAAM,CAAC;IACxC,OAAO,SAAS,CAAC;AACrB,CAAC;AARD,0CAQC;AAED,SAAgB,UAAU,CAAC,IAAa;IACpC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClB,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAA,6BAAc,GAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5F,OAAO,IAAA,cAAO,EAAC,UAAU,CAAC,CAAC;AAC/B,CAAC;AAJD,gCAIC;AAED,SAAgB,aAAa,CAAC,IAAa;IACvC,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,CAAC;AAFD,sCAEC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,IAAa;IAC/C,WAAW,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,EAAE;SACJ,IAAI,CAAC,wBAAwB,EAAE,IAAA,6BAAc,GAAE,CAAC;SAChD,MAAM,CAAC,IAAI,EAAE;SACb,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,QAAQ,CAAC,EAAE;IACZ,+EAA+E;IAC/E,OAAA,IAAA,cAAO,EAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,OAAO,CAAC,GAAG,EAAE,EAAE,MAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,mCAAI,EAAE,CAAC,CAAA,EAAA,CACzE,CAAC;AACV,CAAC;
|
|
1
|
+
{"version":3,"file":"git-util.js","sourceRoot":"","sources":["../../src/util/git-util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-glsp/cli",
|
|
3
|
-
"version": "1.1.0-next.
|
|
3
|
+
"version": "1.1.0-next.3cde244.125+3cde244",
|
|
4
4
|
"description": "CLI Tooling & scripts for GLSP components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eclipse",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"shelljs": "0.8.5"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@eclipse-glsp/config": "1.1.0-next.
|
|
52
|
+
"@eclipse-glsp/config": "1.1.0-next.3cde244.125+3cde244",
|
|
53
53
|
"@types/glob": "^8.0.0",
|
|
54
54
|
"@types/node-fetch": "2.6.2",
|
|
55
55
|
"@types/readline-sync": "1.4.4",
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "3cde2448f4010bd2939e2977e4f614b4f63f3306"
|
|
64
64
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2022 EclipseSource and others.
|
|
2
|
+
* Copyright (c) 2022-2023 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -18,8 +18,9 @@ import { Option } from 'commander';
|
|
|
18
18
|
import * as fs from 'fs';
|
|
19
19
|
import { glob } from 'glob';
|
|
20
20
|
import * as minimatch from 'minimatch';
|
|
21
|
+
import * as readline from 'readline-sync';
|
|
21
22
|
import * as sh from 'shelljs';
|
|
22
|
-
import { baseCommand, configureShell } from '../util/command-util';
|
|
23
|
+
import { baseCommand, configureShell, getShellConfig } from '../util/command-util';
|
|
23
24
|
import {
|
|
24
25
|
getChangesOfLastCommit,
|
|
25
26
|
getFirstCommit,
|
|
@@ -28,6 +29,7 @@ import {
|
|
|
28
29
|
getLastModificationDate,
|
|
29
30
|
getUncommittedChanges
|
|
30
31
|
} from '../util/git-util';
|
|
32
|
+
|
|
31
33
|
import { LOGGER } from '../util/logger';
|
|
32
34
|
import { validateGitDirectory } from '../util/validation-util';
|
|
33
35
|
import path = require('path');
|
|
@@ -35,9 +37,9 @@ export interface HeaderCheckOptions {
|
|
|
35
37
|
type: CheckType;
|
|
36
38
|
exclude: string[];
|
|
37
39
|
fileExtensions: string[];
|
|
38
|
-
headerPattern: string;
|
|
39
40
|
json: boolean;
|
|
40
41
|
excludeDefaults: boolean;
|
|
42
|
+
autoFix: boolean;
|
|
41
43
|
severity: Severity;
|
|
42
44
|
}
|
|
43
45
|
|
|
@@ -50,6 +52,8 @@ type Severity = typeof severityTypes[number];
|
|
|
50
52
|
|
|
51
53
|
const DEFAULT_EXCLUDES = ['**/@(node_modules|lib|dist|bundle)/**'];
|
|
52
54
|
const YEAR_RANGE_REGEX = /\d{4}(?:-d{4})?/g;
|
|
55
|
+
const HEADER_PATTERN = 'Copyright \\([cC]\\) \\d{4}(-d{4})?';
|
|
56
|
+
const AUTO_FIX_MESSAGE = 'Fix copyright header violations';
|
|
53
57
|
|
|
54
58
|
export const CheckHeaderCommand = baseCommand() //
|
|
55
59
|
.name('checkHeaders')
|
|
@@ -75,17 +79,13 @@ export const CheckHeaderCommand = baseCommand() //
|
|
|
75
79
|
'--no-exclude-defaults',
|
|
76
80
|
'Disables the default excludes patterns. Only explicitly passed exclude patterns (-e, --exclude) are considered'
|
|
77
81
|
)
|
|
78
|
-
.option(
|
|
79
|
-
'-p, --headerPattern <pattern>',
|
|
80
|
-
'Regex pattern to extract the copyright year (range) from the header',
|
|
81
|
-
'Copyright \\([cC]\\) \\d{4}(-d{4})?'
|
|
82
|
-
)
|
|
83
82
|
.option('-j, --json', 'Also persist validation results as json file', false)
|
|
84
83
|
.addOption(
|
|
85
84
|
new Option('-s, --severity <severity>', 'The severity of validation results that should be printed.')
|
|
86
85
|
.choices(severityTypes)
|
|
87
86
|
.default('error', '"error" (only)')
|
|
88
87
|
)
|
|
88
|
+
.option('-a, --autoFix', 'Auto apply & commit fixes without prompting the user', false)
|
|
89
89
|
.action(checkHeaders);
|
|
90
90
|
|
|
91
91
|
export function checkHeaders(rootDir: string, options: HeaderCheckOptions): void {
|
|
@@ -102,8 +102,8 @@ export function checkHeaders(rootDir: string, options: HeaderCheckOptions): void
|
|
|
102
102
|
LOGGER.info('Check completed');
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
|
-
const
|
|
106
|
-
|
|
105
|
+
const results = validate(rootDir, files, options);
|
|
106
|
+
handleValidationResults(rootDir, results, options);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
function getFiles(rootDir: string, options: HeaderCheckOptions): string[] {
|
|
@@ -123,14 +123,14 @@ function getFiles(rootDir: string, options: HeaderCheckOptions): string[] {
|
|
|
123
123
|
excludePattern.forEach(pattern => {
|
|
124
124
|
changedFiles = changedFiles.filter(minimatch.filter(`!${pattern}`));
|
|
125
125
|
});
|
|
126
|
-
return changedFiles;
|
|
126
|
+
return changedFiles.filter(file => fs.existsSync(file));
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
function validate(rootDir: string, files: string[], options: HeaderCheckOptions): ValidationResult[] {
|
|
130
130
|
// Derives all files with valid headers, their copyright years and all files with no or invalid headers
|
|
131
|
-
const filesWithHeader = sh.grep('-l',
|
|
131
|
+
const filesWithHeader = sh.grep('-l', HEADER_PATTERN, files).stdout.trim().split('\n');
|
|
132
132
|
const copyrightYears = sh
|
|
133
|
-
.grep(
|
|
133
|
+
.grep(HEADER_PATTERN, files)
|
|
134
134
|
.stdout.trim()
|
|
135
135
|
.split('\n')
|
|
136
136
|
.map(line => line.match(YEAR_RANGE_REGEX)!.map(string => Number.parseInt(string, 10)));
|
|
@@ -146,7 +146,7 @@ function validate(rootDir: string, files: string[], options: HeaderCheckOptions)
|
|
|
146
146
|
LOGGER.info(`Found ${noHeadersLength} files with no (or an invalid) copyright header`);
|
|
147
147
|
}
|
|
148
148
|
noHeaders.forEach((file, i) => {
|
|
149
|
-
|
|
149
|
+
printFileProgress(i + 1, allFilesLength, `Validating ${file}`);
|
|
150
150
|
results.push({ file: path.resolve(rootDir, file), violation: 'noOrMissingHeader', severity: 'error' });
|
|
151
151
|
});
|
|
152
152
|
|
|
@@ -160,13 +160,13 @@ function validate(rootDir: string, files: string[], options: HeaderCheckOptions)
|
|
|
160
160
|
|
|
161
161
|
// Create validation results for all files with valid headers
|
|
162
162
|
filesWithHeader.forEach((file, i) => {
|
|
163
|
-
|
|
163
|
+
printFileProgress(i + 1 + noHeadersLength, allFilesLength, `Validating ${file}`);
|
|
164
164
|
|
|
165
165
|
const result: DateValidationResult = {
|
|
166
166
|
currentStartYear: copyrightYears[i].shift()!,
|
|
167
|
-
expectedStartYear: getFirstModificationDate(file)!.getFullYear(),
|
|
167
|
+
expectedStartYear: getFirstModificationDate(file, rootDir, AUTO_FIX_MESSAGE)!.getFullYear(),
|
|
168
168
|
currentEndYear: copyrightYears[i].shift(),
|
|
169
|
-
expectedEndYear: defaultEndYear ?? getLastModificationDate(file)!.getFullYear(),
|
|
169
|
+
expectedEndYear: defaultEndYear ?? getLastModificationDate(file, rootDir, AUTO_FIX_MESSAGE)!.getFullYear(),
|
|
170
170
|
file,
|
|
171
171
|
severity: 'ok',
|
|
172
172
|
violation: 'none'
|
|
@@ -239,19 +239,21 @@ function validateTimePeriod(result: DateValidationResult): void {
|
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
function
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
242
|
+
function printFileProgress(currentFileCount: number, maxFileCount: number, message: string, clear = true): void {
|
|
243
|
+
if (clear) {
|
|
244
|
+
process.stdout.clearLine(0);
|
|
245
|
+
process.stdout.cursorTo(0);
|
|
246
|
+
}
|
|
247
|
+
process.stdout.write(`[${currentFileCount} of ${maxFileCount}] ${message}`);
|
|
248
|
+
if (!clear) {
|
|
249
|
+
process.stdout.write('\n');
|
|
250
|
+
}
|
|
246
251
|
}
|
|
247
252
|
|
|
248
|
-
export function
|
|
253
|
+
export function handleValidationResults(rootDir: string, results: ValidationResult[], options: HeaderCheckOptions): void {
|
|
249
254
|
LOGGER.newLine();
|
|
250
255
|
LOGGER.info(`Header validation for ${results.length} files completed`);
|
|
251
256
|
const violations = results.filter(result => result.severity === 'error');
|
|
252
|
-
LOGGER.info(`Found ${violations.length} copyright header violations:`);
|
|
253
|
-
LOGGER.newLine();
|
|
254
|
-
|
|
255
257
|
// Adjust results to print based on configured severity level
|
|
256
258
|
let toPrint = results;
|
|
257
259
|
if (options.severity === 'error') {
|
|
@@ -259,6 +261,10 @@ export function displayValidationResult(rootDir: string, results: ValidationResu
|
|
|
259
261
|
} else if (options.severity === 'warn') {
|
|
260
262
|
toPrint = results.filter(result => result.severity !== 'ok');
|
|
261
263
|
}
|
|
264
|
+
|
|
265
|
+
LOGGER.info(`Found ${toPrint.length} copyright header violations:`);
|
|
266
|
+
LOGGER.newLine();
|
|
267
|
+
|
|
262
268
|
toPrint.forEach((result, i) => LOGGER.info(`${i + 1}. `, result.file, ':', toPrintMessage(result)));
|
|
263
269
|
|
|
264
270
|
LOGGER.newLine();
|
|
@@ -266,6 +272,14 @@ export function displayValidationResult(rootDir: string, results: ValidationResu
|
|
|
266
272
|
if (options.json) {
|
|
267
273
|
fs.writeFileSync(path.join(rootDir, 'headerCheck.json'), JSON.stringify(results, undefined, 2));
|
|
268
274
|
}
|
|
275
|
+
|
|
276
|
+
if (violations.length > 0 && (options.autoFix || readline.keyInYN('Do you want automatically fix copyright year range violations?'))) {
|
|
277
|
+
const toFix = violations.filter(
|
|
278
|
+
violation => violation.severity === 'error' && isDateValidationResult(violation)
|
|
279
|
+
) as DateValidationResult[];
|
|
280
|
+
fixViolations(rootDir, toFix, options);
|
|
281
|
+
}
|
|
282
|
+
|
|
269
283
|
LOGGER.info('Check completed');
|
|
270
284
|
}
|
|
271
285
|
|
|
@@ -294,6 +308,32 @@ function toPrintMessage(result: ValidationResult): string {
|
|
|
294
308
|
return `${colors[result.severity]} OK`;
|
|
295
309
|
}
|
|
296
310
|
|
|
311
|
+
function fixViolations(rootDir: string, violations: DateValidationResult[], options: HeaderCheckOptions): void {
|
|
312
|
+
LOGGER.newLine();
|
|
313
|
+
violations.forEach((violation, i) => {
|
|
314
|
+
printFileProgress(i + 1, violations.length, `Fix ${violation.file}`, false);
|
|
315
|
+
const fixedStartYear =
|
|
316
|
+
violation.currentStartYear < violation.expectedStartYear ? violation.currentStartYear : violation.expectedStartYear;
|
|
317
|
+
|
|
318
|
+
const currentRange = `${violation.currentStartYear}${violation.currentEndYear ? '-' + violation.currentEndYear : ''}`;
|
|
319
|
+
|
|
320
|
+
let fixedRange = `${fixedStartYear}`;
|
|
321
|
+
if (violation.expectedEndYear !== violation.expectedStartYear || fixedStartYear !== violation.expectedStartYear) {
|
|
322
|
+
fixedRange = `${fixedStartYear}-${violation.expectedEndYear}`;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
sh.sed('-i', RegExp('Copyright \\([cC]\\) ' + currentRange), `Copyright (c) ${fixedRange}`, violation.file);
|
|
326
|
+
});
|
|
327
|
+
LOGGER.newLine();
|
|
328
|
+
if (options.autoFix || readline.keyInYN('Do you want to create a commit for the fixed files?')) {
|
|
329
|
+
LOGGER.newLine();
|
|
330
|
+
const files = violations.map(violation => violation.file).join(' ');
|
|
331
|
+
sh.exec(`git add ${files}`, getShellConfig());
|
|
332
|
+
sh.exec(`git commit -m "${AUTO_FIX_MESSAGE}"`);
|
|
333
|
+
LOGGER.newLine();
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
297
337
|
// Helper types
|
|
298
338
|
interface ValidationResult {
|
|
299
339
|
file: string;
|
package/src/util/git-util.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2022 EclipseSource and others.
|
|
2
|
+
* Copyright (c) 2022-2022 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -48,6 +48,7 @@ export function getUncommittedChanges(path?: string): string[] {
|
|
|
48
48
|
.exec('git status --porcelain', getShellConfig())
|
|
49
49
|
.stdout.trim()
|
|
50
50
|
.split('\n')
|
|
51
|
+
.filter(value => value.trim().length !== 0)
|
|
51
52
|
.map(fileInfo =>
|
|
52
53
|
// Extract relative file path from the info string and convert to absolute path
|
|
53
54
|
resolve(path ?? process.cwd(), fileInfo.trim().split(' ').pop() ?? '')
|
|
@@ -71,11 +72,13 @@ export function getChangesOfLastCommit(path?: string): string[] {
|
|
|
71
72
|
* Returns the last modification date of a file (or the last commit) in a git repo.
|
|
72
73
|
* @param filePath The file. If undefined the modification date of the last commit will be returned
|
|
73
74
|
* @param repoRoot The path to the repo root. If undefined the current working directory is used.
|
|
75
|
+
* @param excludeMessage Only consider commits that don`t match the excludeMessage
|
|
74
76
|
* @returns The date or undefined if the file is outside of the git repo.
|
|
75
77
|
*/
|
|
76
|
-
export function getLastModificationDate(filePath?: string, repoRoot?: string): Date | undefined {
|
|
78
|
+
export function getLastModificationDate(filePath?: string, repoRoot?: string, excludeMessage?: string): Date | undefined {
|
|
77
79
|
cdIfPresent(repoRoot);
|
|
78
|
-
const
|
|
80
|
+
const additionalArgs = excludeMessage ? `--grep="${excludeMessage}" --invert-grep` : '';
|
|
81
|
+
const result = sh.exec(`git log -1 ${additionalArgs} --pretty="format:%ci" ${filePath ?? ''}`, getShellConfig());
|
|
79
82
|
if (result.code !== 0) {
|
|
80
83
|
return undefined;
|
|
81
84
|
}
|
|
@@ -85,11 +88,13 @@ export function getLastModificationDate(filePath?: string, repoRoot?: string): D
|
|
|
85
88
|
* Returns the last modification date of a file in a git repo.
|
|
86
89
|
* @param filePath The file
|
|
87
90
|
* @param repoRoot The path to the repo root. If undefined the current working directory is used.
|
|
91
|
+
* @param excludeMessage Only consider commits that don`t match the excludeMessage
|
|
88
92
|
* @returns The date or undefined if the file is outside of the git repo.
|
|
89
93
|
*/
|
|
90
|
-
export function getFirstModificationDate(filePath: string, repoRoot?: string): Date | undefined {
|
|
94
|
+
export function getFirstModificationDate(filePath: string, repoRoot?: string, excludeMessage?: string): Date | undefined {
|
|
91
95
|
cdIfPresent(repoRoot);
|
|
92
|
-
const
|
|
96
|
+
const additionalArgs = excludeMessage ? `--grep="${excludeMessage}" --invert-grep` : '';
|
|
97
|
+
const result = sh.exec(`git log ${additionalArgs} --pretty="format:%ci" --follow ${filePath}`, getShellConfig());
|
|
93
98
|
if (result.code !== 0) {
|
|
94
99
|
return undefined;
|
|
95
100
|
}
|