Chromium Code Reviews| Index: lib/src/command_runner.dart |
| diff --git a/lib/src/command_runner.dart b/lib/src/command_runner.dart |
| index 19d8cf4d18974898c89886ff9f971687d0e44e8f..3a16621776b56d0141b222b66a79595801f4a86a 100644 |
| --- a/lib/src/command_runner.dart |
| +++ b/lib/src/command_runner.dart |
| @@ -10,6 +10,7 @@ import 'dart:io'; |
| import 'package:args/args.dart'; |
| import 'package:args/command_runner.dart'; |
| import 'package:http/http.dart' as http; |
| +import 'package:path/path.dart' as p; |
| import 'command/build.dart'; |
| import 'command/cache.dart'; |
| @@ -26,6 +27,7 @@ import 'command/uploader.dart'; |
| import 'command/version.dart'; |
| import 'exceptions.dart'; |
| import 'exit_codes.dart' as exit_codes; |
| +import 'git.dart' as git; |
| import 'http.dart'; |
| import 'io.dart'; |
| import 'log.dart' as log; |
| @@ -89,6 +91,8 @@ class PubCommandRunner extends CommandRunner { |
| Future runCommand(ArgResults options) async { |
| log.withPrejudice = options['with-prejudice']; |
| + _checkDepsSynced(); |
| + |
| if (options['version']) { |
| log.message('Pub ${sdk.version}'); |
| return; |
| @@ -150,6 +154,30 @@ and include the results in a bug report on http://dartbug.com/new. |
| log.message(usage); |
| } |
| + /// Print a warning if we're running from the Dart SDK repo and pub isn't |
| + /// up-to-date. |
| + /// |
| + /// This is otherwise hard to tell, and can produce confusing behavior issues. |
| + void _checkDepsSynced() { |
| + if (!runningFromDartRepo) return; |
| + |
| + var deps = readTextFile(p.join(dartRepoRoot, 'DEPS')); |
| + var pubRevRegExp = new RegExp(r'^ +"pub_rev": +"@([^"]+)"', multiLine: true); |
|
Bob Nystrom
2015/07/13 17:15:35
Long line.
nweiz
2015/07/13 20:13:34
Done.
|
| + var match = pubRevRegExp.firstMatch(deps); |
| + if (match == null) return; |
|
Bob Nystrom
2015/07/13 17:15:35
Do we want to silently fail?
nweiz
2015/07/13 20:13:33
I don't really want to make this a place where we
|
| + var depsRev = match[1]; |
| + |
| + var actualRev = git.runSync(["rev-parse", "HEAD"], workingDir: pubRoot) |
|
Bob Nystrom
2015/07/13 17:15:35
What does this do to the test cycle time?
nweiz
2015/07/13 20:13:34
I'll run a test. I suspect it won't be that bad; g
|
| + .single; |
| + |
| + if (depsRev == actualRev) return; |
| + log.warning( |
| + "${log.yellow('Warning:')} the revision of pub in DEPS is " |
| + "${log.bold(depsRev)},\n" |
| + "but ${log.bold(actualRev)} is checked out in " |
| + "${p.relative(pubRoot)}.\n\n"); |
| + } |
| + |
| /// Returns the appropriate exit code for [exception], falling back on 1 if no |
| /// appropriate exit code could be found. |
| int _chooseExitCode(exception) { |