Skip to content

Commit 9d9ec70

Browse files
authored
[Conductor] Add ability to override mirror, add tests for default arg parsing and custom arg parsing (flutter#154363)
fixes flutter#154342
1 parent 35b0349 commit 9d9ec70

File tree

2 files changed

+106
-13
lines changed

2 files changed

+106
-13
lines changed

dev/conductor/core/lib/src/start.dart

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ class StartCommand extends Command<void> {
6060
help: 'The target release channel for the release.',
6161
allowed: kBaseReleaseChannels,
6262
);
63+
argParser.addOption(
64+
kFrameworkMirrorOption,
65+
help:
66+
'Configurable Framework repo mirror remote.',
67+
);
6368
argParser.addOption(
6469
kFrameworkUpstreamOption,
6570
defaultsTo: FrameworkRepository.defaultUpstream,
@@ -112,14 +117,8 @@ class StartCommand extends Command<void> {
112117
@override
113118
String get description => 'Initialize a new Flutter release.';
114119

115-
@override
116-
Future<void> run() async {
117-
final ArgResults argumentResults = argResults!;
118-
if (!platform.isMacOS && !platform.isLinux) {
119-
throw ConductorException(
120-
'Error! This tool is only supported on macOS and Linux',
121-
);
122-
}
120+
@visibleForTesting
121+
StartContext createContext(ArgResults argumentResults) {
123122

124123
final String frameworkUpstream = getValueFromEnvOrArgs(
125124
kFrameworkUpstreamOption,
@@ -131,7 +130,12 @@ class StartCommand extends Command<void> {
131130
argumentResults,
132131
platform.environment,
133132
)!;
134-
final String frameworkMirror =
133+
final String frameworkMirror = getValueFromEnvOrArgs(
134+
kFrameworkMirrorOption,
135+
argumentResults,
136+
platform.environment,
137+
allowNull: true,
138+
) ??
135139
'[email protected]:$githubUsername/flutter.git';
136140
final String engineUpstream = getValueFromEnvOrArgs(
137141
kEngineUpstreamOption,
@@ -175,7 +179,7 @@ class StartCommand extends Command<void> {
175179
versionOverride = Version.fromString(versionOverrideString);
176180
}
177181

178-
final StartContext context = StartContext(
182+
return StartContext(
179183
candidateBranch: candidateBranch,
180184
checkouts: checkouts,
181185
dartRevision: dartRevision,
@@ -191,7 +195,18 @@ class StartCommand extends Command<void> {
191195
versionOverride: versionOverride,
192196
githubUsername: githubUsername,
193197
);
194-
return context.run();
198+
}
199+
200+
@override
201+
Future<void> run() async {
202+
final ArgResults argumentResults = argResults!;
203+
if (!platform.isMacOS && !platform.isLinux) {
204+
throw ConductorException(
205+
'Error! This tool is only supported on macOS and Linux',
206+
);
207+
}
208+
209+
return createContext(argumentResults).run();
195210
}
196211
}
197212

dev/conductor/core/test/start_test.dart

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ void main() {
2323
const String flutterRoot = '/flutter';
2424
const String checkoutsParentDirectory = '$flutterRoot/dev/tools/';
2525
const String githubUsername = 'user';
26-
const String frameworkMirror =
27-
'[email protected]:$githubUsername/flutter.git';
26+
const String frameworkMirror = '[email protected]:$githubUsername/flutter.git';
2827
const String engineMirror = '[email protected]:$githubUsername/engine.git';
2928
const String candidateBranch = 'flutter-1.2-candidate.3';
3029
const String releaseChannel = 'beta';
@@ -76,6 +75,85 @@ void main() {
7675
return CommandRunner<void>('codesign-test', '')..addCommand(command);
7776
}
7877

78+
group('start arg parser', () {
79+
const String nextDartRevision =
80+
'f6c91128be6b77aef8351e1e3a9d07c85bc2e46e';
81+
late StartCommand startCommand;
82+
setUp(() {
83+
final String operatingSystem = const LocalPlatform().operatingSystem;
84+
final Map<String, String> environment = <String, String>{
85+
'HOME': '/path/to/user/home',
86+
};
87+
final Directory homeDir = fileSystem.directory(
88+
environment['HOME'],
89+
);
90+
// Tool assumes this exists
91+
homeDir.createSync(recursive: true);
92+
platform = FakePlatform(
93+
environment: environment,
94+
operatingSystem: operatingSystem,
95+
pathSeparator: '/',
96+
);
97+
processManager = FakeProcessManager.list(<FakeCommand>[]);
98+
checkouts = Checkouts(
99+
fileSystem: fileSystem,
100+
parentDirectory: fileSystem.directory(checkoutsParentDirectory),
101+
platform: platform,
102+
processManager: processManager,
103+
stdio: stdio,
104+
);
105+
startCommand = StartCommand(
106+
checkouts: checkouts, conductorVersion: conductorVersion);
107+
});
108+
109+
test('default args', () async {
110+
final List<String> args = <String>[
111+
'start',
112+
'--$kCandidateOption',
113+
candidateBranch,
114+
'--$kReleaseOption',
115+
'stable',
116+
'--$kStateOption',
117+
'/path/to/statefile.json',
118+
'--$kDartRevisionOption',
119+
nextDartRevision,
120+
'--$kGithubUsernameOption',
121+
githubUsername,
122+
];
123+
final StartContext context =
124+
startCommand.createContext(startCommand.argParser.parse(args));
125+
expect(context.frameworkUpstream, FrameworkRepository.defaultUpstream);
126+
expect(context.frameworkMirror, contains(githubUsername));
127+
expect(context.frameworkMirror, contains('/flutter.git'));
128+
expect(context.engineUpstream, EngineRepository.defaultUpstream);
129+
});
130+
131+
test('overridden mirror', () async {
132+
const String customFrameworkMirror =
133+
'[email protected]:$githubUsername/flutter-work.git';
134+
final List<String> args = <String>[
135+
'start',
136+
'--$kCandidateOption',
137+
candidateBranch,
138+
'--$kReleaseOption',
139+
'stable',
140+
'--$kStateOption',
141+
'/path/to/statefile.json',
142+
'--$kDartRevisionOption',
143+
nextDartRevision,
144+
'--$kGithubUsernameOption',
145+
githubUsername,
146+
'--$kFrameworkMirrorOption',
147+
customFrameworkMirror,
148+
];
149+
final StartContext context =
150+
startCommand.createContext(startCommand.argParser.parse(args));
151+
expect(
152+
context.frameworkMirror, customFrameworkMirror
153+
);
154+
});
155+
});
156+
79157
test('throws exception if run from Windows', () async {
80158
final CommandRunner<void> runner = createRunner(
81159
commands: <FakeCommand>[

0 commit comments

Comments
 (0)