[tool] Allow importing packages with NEXT (#3215)

Fixes an issue that showed up in the trial repo merge PR; if a pacakge
is new to the repository (i.e., has no git history in the parent
commit), it was being treated as a version bump, which caused failures
if NEXT was present. This adds a new state so that we can allow NEXT
during import.
This commit is contained in:
stuartmorgan
2023-02-18 12:43:11 -08:00
committed by GitHub
parent ce9c61be78
commit ab5a8c0ca8
2 changed files with 37 additions and 3 deletions

View File

@ -47,6 +47,9 @@ enum _CurrentVersionState {
/// The version has changed, and the transition is invalid.
invalidChange,
/// The package is new.
newPackage,
/// There was an error determining the version state.
unknown,
}
@ -216,6 +219,7 @@ class VersionCheckCommand extends PackageLoopingCommand {
break;
case _CurrentVersionState.validIncrease:
case _CurrentVersionState.validRevert:
case _CurrentVersionState.newPackage:
versionChanged = true;
break;
case _CurrentVersionState.invalidChange:
@ -318,7 +322,7 @@ ${indentation}HTTP response: ${pubVersionFinderResponse.httpResponse.body}
'${getBoolArg(_againstPubFlag) ? 'on pub server' : 'at git base'}.');
logWarning(
'${indentation}If this package is not new, something has gone wrong.');
return _CurrentVersionState.validIncrease; // Assume new, thus valid.
return _CurrentVersionState.newPackage;
}
if (previousVersion == currentVersion) {

View File

@ -525,6 +525,9 @@ void main() {
const String version = '1.0.1';
final RepositoryPackage plugin =
createFakePlugin('plugin', packagesDir, version: version);
processRunner.mockProcessesForExecutable['git-show'] = <io.Process>[
MockProcess(stdout: 'version: 1.0.0'),
];
const String changelog = '''
## NEXT
@ -538,7 +541,7 @@ void main() {
bool hasError = false;
final List<String> output = await runCapturingPrint(
runner, <String>['version-check', '--base-sha=main', '--against-pub'],
runner, <String>['version-check', '--base-sha=main'],
errorHandler: (Error e) {
expect(e, isA<ToolExit>());
hasError = true;
@ -559,6 +562,9 @@ void main() {
test('fails if the version increases without replacing NEXT', () async {
final RepositoryPackage plugin =
createFakePlugin('plugin', packagesDir, version: '1.0.1');
processRunner.mockProcessesForExecutable['git-show'] = <io.Process>[
MockProcess(stdout: 'version: 1.0.0'),
];
const String changelog = '''
## NEXT
@ -570,7 +576,7 @@ void main() {
bool hasError = false;
final List<String> output = await runCapturingPrint(
runner, <String>['version-check', '--base-sha=main', '--against-pub'],
runner, <String>['version-check', '--base-sha=main'],
errorHandler: (Error e) {
expect(e, isA<ToolExit>());
hasError = true;
@ -613,6 +619,30 @@ void main() {
);
});
// This handles imports of a package with a NEXT section.
test('allows NEXT for a new package', () async {
final RepositoryPackage plugin =
createFakePackage('a_package', packagesDir, version: '1.0.0');
const String changelog = '''
## NEXT
* Some changes that should be listed in the next release.
## 1.0.0
* Some other changes.
''';
plugin.changelogFile.writeAsStringSync(changelog);
final List<String> output = await runCapturingPrint(
runner, <String>['version-check', '--base-sha=main']);
expect(
output,
containsAllInOrder(<Matcher>[
contains('Unable to find previous version at git base'),
contains('Found NEXT; validating next version in the CHANGELOG'),
]),
);
});
test(
'fails gracefully if the version headers are not found due to using the wrong style',
() async {