Skip to content

Commit 13fc1da

Browse files
committed
Workaround for dependency issue, fixed support for missing license and default replacement value
1 parent 1b32ad5 commit 13fc1da

File tree

3 files changed

+45
-27
lines changed

3 files changed

+45
-27
lines changed

pubspec.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ workspace:
1212
dev_dependencies:
1313
build_runner: ^2.3.3
1414
flutter_lints: ^5.0.0
15+
16+
dependency_overrides:
17+
analyzer: 6.11.0
18+
dart_style: 2.3.3

tool/lib/license_utils.dart

+16-22
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,10 @@ class LicenseHeader {
212212
),
213213
);
214214
await for (final content in stream) {
215-
// Return just the license headers for the simple case with no stored
216-
// value requested (i.e. content matches licenseText verbatim)
215+
final storedName = _parseStoredName(replacementLicenseText);
217216
if (content.contains(existingLicenseText)) {
218-
final storedName = _parseStoredName(replacementLicenseText);
217+
// Return just the license headers for the simple case with no stored
218+
// value requested (i.e. content matches licenseText verbatim)
219219
replacementLicenseText = replacementLicenseText.replaceAll(
220220
'<$storedName>',
221221
defaultStoredValue ?? DateTime.now().year.toString(),
@@ -227,17 +227,14 @@ class LicenseHeader {
227227
}
228228
// Return a non-empty map for the case where there is a stored value
229229
// requested (i.e. when there is a '<value>' defined in the license text)
230-
final storedName = _parseStoredName(existingLicenseText);
231-
if (storedName.isNotEmpty) {
232-
return _processHeaders(
233-
storedName: storedName,
234-
existingLicenseText: existingLicenseText,
235-
replacementLicenseText: replacementLicenseText,
236-
content: content,
237-
);
238-
}
230+
return _processHeaders(
231+
storedName: storedName,
232+
existingLicenseText: existingLicenseText,
233+
replacementLicenseText: replacementLicenseText,
234+
content: content,
235+
);
239236
}
240-
throw StateError('License header expected in ${file.path}, but not found!');
237+
throw StateError('License header could not be added to ${file.path}');
241238
}
242239

243240
/// Returns a copy of the given [file] with the [existingHeader] replaced by
@@ -356,7 +353,7 @@ class LicenseHeader {
356353
}
357354
if (!updatedPathsList.contains(file.path)) {
358355
final licenseHeaders = _processHeaders(
359-
storedName: '',
356+
storedName: _parseStoredName(replacementLicenseText),
360357
existingLicenseText: '',
361358
replacementLicenseText: replacementLicenseText,
362359
content: '',
@@ -401,13 +398,6 @@ class LicenseHeader {
401398
required String replacementLicenseText,
402399
required String content,
403400
}) {
404-
if (existingLicenseText.isEmpty) {
405-
final defaultReplacementHeader = replacementLicenseText.replaceAll(
406-
'<$storedName>',
407-
DateTime.now().year.toString(),
408-
);
409-
return (existingHeader: '', replacementHeader: defaultReplacementHeader);
410-
}
411401
final matchStr = RegExp.escape(existingLicenseText);
412402
final storedNameIndex = matchStr.indexOf('<$storedName>');
413403
if (storedNameIndex != -1) {
@@ -438,7 +428,11 @@ class LicenseHeader {
438428
);
439429
}
440430
}
441-
return const (existingHeader: '', replacementHeader: '');
431+
final defaultReplacementHeader = replacementLicenseText.replaceAll(
432+
'<$storedName>',
433+
DateTime.now().year.toString(),
434+
);
435+
return (existingHeader: '', replacementHeader: defaultReplacementHeader);
442436
}
443437

444438
// TODO(mossmana) Add support for multiple stored names

tool/test/license_utils_test.dart

+25-5
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,11 @@ text that should be removed from the file. */''';
174174
const existingLicenseText = '''// This is some multiline license text to
175175
// remove that does not contain a stored value.''';
176176
const replacementLicenseText =
177-
'''// This is some <value4> multiline license
177+
'''// This is some <value> multiline license
178178
// text that should be added to the file.''';
179179

180-
final replacementInfo = await _getTestReplacementInfo(
180+
// Contains existing license
181+
var replacementInfo = await _getTestReplacementInfo(
181182
testFile: testFile10,
182183
existingLicenseText: existingLicenseText,
183184
replacementLicenseText: replacementLicenseText,
@@ -200,6 +201,20 @@ text that should be removed from the file. */''';
200201
replacementInfo.replacementHeader,
201202
equals(expectedReplacementHeader),
202203
);
204+
205+
// Missing existing license
206+
replacementInfo = await _getTestReplacementInfo(
207+
testFile: testFile10,
208+
existingLicenseText: existingLicenseText,
209+
replacementLicenseText: replacementLicenseText,
210+
);
211+
212+
expect(replacementInfo.existingHeader, equals(expectedExistingHeader));
213+
214+
expect(
215+
replacementInfo.replacementHeader,
216+
equals(expectedReplacementHeader),
217+
);
203218
});
204219

205220
test('stored value preserved in replacement header', () async {
@@ -334,19 +349,19 @@ text that should be added to the file. */''',
334349
final config = LicenseConfig.fromYamlFile(configFile);
335350
final header = LicenseHeader();
336351

337-
final contentsBeforeUpdate = testFile1.readAsStringSync();
352+
// missing license
353+
final contentsBeforeUpdate = testFile9.readAsStringSync();
338354
final results = await header.bulkUpdate(
339355
directory: testDirectory,
340356
config: config,
341357
);
342-
final contentsAfterUpdate = testFile1.readAsStringSync();
358+
final contentsAfterUpdate = testFile9.readAsStringSync();
343359

344360
final includedPaths = results.includedPaths;
345361
expect(includedPaths, isNotNull);
346362
expect(includedPaths.length, equals(9));
347363
// Order is not guaranteed
348364
expect(includedPaths.contains(testFile1.path), true);
349-
expect(contentsBeforeUpdate, isNot(equals(contentsAfterUpdate)));
350365
expect(includedPaths.contains(testFile2.path), true);
351366
expect(includedPaths.contains(testFile3.path), true);
352367
expect(includedPaths.contains(testFile7.path), true);
@@ -369,6 +384,11 @@ text that should be added to the file. */''',
369384
expect(updatedPaths.contains(testFile10.path), true);
370385
expect(updatedPaths.contains(skipFile.path), false);
371386
expect(updatedPaths.contains(doNothingFile.path), false);
387+
388+
expect(contentsBeforeUpdate, isNot(equals(contentsAfterUpdate)));
389+
// There is an extremely rare failure case on the year boundary.
390+
// TODO(mossmana): Handle running test on Dec 31 - Jan 1.
391+
expect(contentsAfterUpdate, contains(DateTime.now().year.toString()));
372392
});
373393

374394
test('license headers bulk update can be dry run', () async {

0 commit comments

Comments
 (0)