Unverified Commit 2bb361c9 authored by Christopher Fujino's avatar Christopher Fujino Committed by GitHub

[flutter_tools] Fix roll dev script, add tests (#54783)

parent baafc668
...@@ -25,6 +25,7 @@ const String kUpstreamRemote = 'git@github.com:flutter/flutter.git'; ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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();
} }
......
// 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');
});
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment