The check for Git was originally in flutter.bat but was removed by
b84bfa3526
in order to improve performance.
It was later brought back in
bc4fc5ffb9.
However, that change added it to a subroutine in shared.bat. If Git is
not found then shared.bat would exit the shell process to stop retries
of the subroutine.
This PR moves the check back into flutter.bat and exits the script
without quitting the shell.
Fixes https://github.com/flutter/flutter/issues/169784
cmd.exe will read from the AutoRun registry key at launch and execute
the commands listed in the key. Since `FOR /F IN (command) ...` causes a
new terminal instance to start, the AutoRun commands will be run again,
possibly changing the current working directory. In this case, the `git
rev-parse HEAD` check run in `shared.bat` could fail, which we were
assuming meant `git` was not on the user's PATH.
This change ensures that `git rev-parse HEAD` will always run in
%FLUTTER_ROOT% and explicitly adds a separate check for `git` using
`WHERE git` to more accurately determine if `git` is on the PATH.
Fixes https://github.com/flutter/flutter/issues/159018
---------
Co-authored-by: Andrew Kolos <andrewrkolos@gmail.com>
Fixes https://github.com/flutter/flutter/issues/112833
Most of the actual changes here are in [packages/flutter_tools/lib/src/version.dart](https://github.com/flutter/flutter/pull/124558/files#diff-092e00109d9e1589fbc7c6de750e29a6ae512b2dd44e85d60028953561201605), while the rest is largely just addressing changes to the constructor of `FlutterVersion` which now has different dependencies.
This change makes `FlutterVersion` an interface with two concrete implementations:
1. `_FlutterVersionGit` which is mostly the previous implementation, and
2. `_FlutterVersionFromFile` which will read a new `.version.json` file from the root of the repo
The [`FlutterVersion` constructor](https://github.com/flutter/flutter/pull/124558/files#diff-092e00109d9e1589fbc7c6de750e29a6ae512b2dd44e85d60028953561201605R70) is now a factory that first checks if `.version.json` exists, and if so returns an instance of `_FlutterVersionFromGit` else it returns the fallback `_FlutterVersionGit` which will end up writing `.version.json` so that we don't need to re-calculate the version on the next invocation.
`.version.json` will be deleted in the bash/batch entrypoints any time we need to rebuild he tool (this will usually be because the user did `flutter upgrade` or `flutter channel`, or manually changed the commit with git).
Use the pub cache resolved by pub itself.
To add packages to the flutter.zip download they are packaged as tar.gz and added to the pub-cache on first run by using `pub cache preload`.
* Use `dart __deprecated_pub` instead of `pub` to invoke pub from tools
The top level `pub` commmand has been deprecated and will print
a message. It is however implemented via the __deprecated_pub command
that prints no message.
The CFE now logs to stdout by default when compiling a program which has
non-null-safe dependencies. Since flutter_tools has not yet migrated, we
need to suppress this message when compiling the tool.
Fixes https://github.com/flutter/flutter/issues/74366
Currently an invocation of flutter/dart will always attempt to acquire a lock. This can pose problems for tools that attempt to run multiple dart/flutter instances.
Instead update the lock logic (on Linux/macOS) so that we only attempt to acquire it if an update/snapshot needs to be performed. To avoid repeatedly performing downloads/snapshots if multiple flutter/dart invocations are fired off concurrently when an update needs to be performed, do a second check of the download/snapshot condition after the lock is released.
Additionally, moves all of the building/debug output to stderr on both the bash and batch scripts. This allows machine mode consumption of the tool to ignore needing to parse/handle the rebuild messages.
fixes#57802
For users without git installed, flutter on windows bundles mingit. This needs to be added to the PATH in the main script, not the executed script, so that it is available to the tool