[flutter_tools] Fix roll dev script, add tests (#54783)
This commit is contained in:
parent
baafc66817
commit
2bb361c9f7
@ -25,6 +25,7 @@ const String kUpstreamRemote = 'git@github.com:flutter/flutter.git';
|
|||||||
|
|
||||||
void main(List<String> args) {
|
void main(List<String> args) {
|
||||||
final ArgParser argParser = ArgParser(allowTrailingOptions: false);
|
final ArgParser argParser = ArgParser(allowTrailingOptions: false);
|
||||||
|
|
||||||
argParser.addOption(
|
argParser.addOption(
|
||||||
kIncrement,
|
kIncrement,
|
||||||
help: 'Specifies which part of the x.y.z version number to increment. Required.',
|
help: 'Specifies which part of the x.y.z version number to increment. Required.',
|
||||||
@ -38,9 +39,9 @@ void main(List<String> args) {
|
|||||||
);
|
);
|
||||||
argParser.addOption(
|
argParser.addOption(
|
||||||
kCommit,
|
kCommit,
|
||||||
help: 'Specifies which git commit to roll to the dev branch.',
|
help: 'Specifies which git commit to roll to the dev branch. Required.',
|
||||||
valueHelp: 'hash',
|
valueHelp: 'hash',
|
||||||
defaultsTo: 'upstream/master',
|
defaultsTo: null, // This option is required
|
||||||
);
|
);
|
||||||
argParser.addOption(
|
argParser.addOption(
|
||||||
kOrigin,
|
kOrigin,
|
||||||
@ -57,6 +58,7 @@ void main(List<String> args) {
|
|||||||
);
|
);
|
||||||
argParser.addFlag(kYes, negatable: false, abbr: 'y', help: 'Skip the confirmation prompt.');
|
argParser.addFlag(kYes, negatable: false, abbr: 'y', help: 'Skip the confirmation prompt.');
|
||||||
argParser.addFlag(kHelp, negatable: false, help: 'Show this help message.', hide: true);
|
argParser.addFlag(kHelp, negatable: false, help: 'Show this help message.', hide: true);
|
||||||
|
|
||||||
ArgResults argResults;
|
ArgResults argResults;
|
||||||
try {
|
try {
|
||||||
argResults = argParser.parse(args);
|
argResults = argParser.parse(args);
|
||||||
@ -73,7 +75,7 @@ void main(List<String> args) {
|
|||||||
final bool autoApprove = argResults[kYes] as bool;
|
final bool autoApprove = argResults[kYes] as bool;
|
||||||
final bool help = argResults[kHelp] as bool;
|
final bool help = argResults[kHelp] as bool;
|
||||||
|
|
||||||
if (help || level == null) {
|
if (help || level == null || commit == null) {
|
||||||
print('roll_dev.dart --increment=level --commit=hash • update the version tags and roll a new dev build.\n');
|
print('roll_dev.dart --increment=level --commit=hash • update the version tags and roll a new dev build.\n');
|
||||||
print(argParser.usage);
|
print(argParser.usage);
|
||||||
exit(0);
|
exit(0);
|
||||||
@ -165,23 +167,31 @@ void main(List<String> args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getFullTag() {
|
String getFullTag() {
|
||||||
|
const String glob = '*.*.*-*.*.pre';
|
||||||
return getGitOutput(
|
return getGitOutput(
|
||||||
'describe --match *.*.*-dev.*.* --first-parent --long --tags',
|
'describe --match $glob --first-parent --long --tags',
|
||||||
'obtain last released version number',
|
'obtain last released version number',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Match parseFullTag(String version) {
|
Match parseFullTag(String version) {
|
||||||
final RegExp versionPattern = RegExp(r'^([0-9]+)\.([0-9]+)\.([0-9]+)-dev\.([0-9]+)\.([0-9]+)-([0-9]+)-g([a-f0-9]+)$');
|
// of the form: x.y.z-m.n.pre-c-g<revision>
|
||||||
|
final RegExp versionPattern = RegExp(
|
||||||
|
r'^(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)\.pre-(\d+)-g([a-f0-9]+)$');
|
||||||
return versionPattern.matchAsPrefix(version);
|
return versionPattern.matchAsPrefix(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getVersionFromParts(List<int> parts) {
|
String getVersionFromParts(List<int> parts) {
|
||||||
|
// where parts correspond to [x, y, z, m, n] from tag
|
||||||
assert(parts.length == 5);
|
assert(parts.length == 5);
|
||||||
final StringBuffer buf = StringBuffer()
|
final StringBuffer buf = StringBuffer()
|
||||||
|
// take x, y, and z
|
||||||
..write(parts.take(3).join('.'))
|
..write(parts.take(3).join('.'))
|
||||||
..write('-dev.')
|
..write('-')
|
||||||
..write(parts.skip(3).join('.'));
|
// skip x, y, and z, take m and n
|
||||||
|
..write(parts.skip(3).take(2).join('.'))
|
||||||
|
..write('.pre');
|
||||||
|
// return a string that looks like: '1.2.3-4.5.pre'
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
54
dev/tools/test/roll_dev_test.dart
Normal file
54
dev/tools/test/roll_dev_test.dart
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
import 'package:dev_tools/roll_dev.dart';
|
||||||
|
import './common.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
group('parseFullTag', () {
|
||||||
|
test('returns match on valid version input', () {
|
||||||
|
final List<String> validTags = <String>[
|
||||||
|
'1.2.3-1.2.pre-3-gabc123',
|
||||||
|
'10.2.30-12.22.pre-45-gabc123',
|
||||||
|
'1.18.0-0.0.pre-0-gf0adb240a',
|
||||||
|
'2.0.0-1.99.pre-45-gf0adb240a',
|
||||||
|
'12.34.56-78.90.pre-12-g9db2703a2',
|
||||||
|
'0.0.1-0.0.pre-1-g07601eb95ff82f01e870566586340ed2e87b9cbb',
|
||||||
|
'958.80.144-6.224.pre-7803-g06e90',
|
||||||
|
];
|
||||||
|
for (final String validTag in validTags) {
|
||||||
|
final Match match = parseFullTag(validTag);
|
||||||
|
expect(match, isNotNull, reason: 'Expected $validTag to be parsed');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('returns null on invalid version input', () {
|
||||||
|
final List<String> invalidTags = <String>[
|
||||||
|
'1.2.3-dev.1.2-3-gabc123',
|
||||||
|
'1.2.3-1.2-3-gabc123',
|
||||||
|
'v1.2.3',
|
||||||
|
'2.0.0',
|
||||||
|
'v1.2.3-1.2.pre-3-gabc123',
|
||||||
|
'10.0.1-0.0.pre-gf0adb240a',
|
||||||
|
'10.0.1-0.0.pre-3-gggggggggg',
|
||||||
|
'1.2.3-1.2.pre-3-abc123',
|
||||||
|
'1.2.3-1.2.pre-3-gabc123_',
|
||||||
|
];
|
||||||
|
for (final String invalidTag in invalidTags) {
|
||||||
|
final Match match = parseFullTag(invalidTag);
|
||||||
|
expect(match, null, reason: 'Expected $invalidTag to not be parsed');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
group('getVersionFromParts', () {
|
||||||
|
test('returns correct string from valid parts', () {
|
||||||
|
List<int> parts = <int>[1, 2, 3, 4, 5];
|
||||||
|
expect(getVersionFromParts(parts), '1.2.3-4.5.pre');
|
||||||
|
|
||||||
|
parts = <int>[11, 2, 33, 1, 0];
|
||||||
|
expect(getVersionFromParts(parts), '11.2.33-1.0.pre');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user