[flutter_tools] cache flutter sdk version to disk by christopherfujino · Pull Request #124558 · flutter/flutter

@flutter-dashboard bot added the tool

Affects the "flutter" command-line tool. See also t: labels.

label

Apr 11, 2023

christopherfujino

@christopherfujino christopherfujino changed the title [flutter_tools] persist version information to disk [flutter_tools] cache flutter sdk version to disk

Apr 27, 2023

christopherfujino

andrewkolos

andrewkolos

andrewkolos

andrewkolos

eliasyishak

@github-actions github-actions bot removed a: text input

Entering text in a text field or keyboard related problems

tool

Affects the "flutter" command-line tool. See also t: labels.

labels

May 25, 2023

@goderbauer goderbauer added the tool

Affects the "flutter" command-line tool. See also t: labels.

label

Jun 1, 2023

@christopherfujino

@christopherfujino

auto-submit bot pushed a commit to flutter/packages that referenced this pull request

Jun 15, 2023

whesse added a commit that referenced this pull request

Jun 19, 2023

fluttermirroringbot pushed a commit that referenced this pull request

Aug 23, 2023
Fixes #133093

When I introduced the new, more robust version file `//flutter/bin/cache/version.json` in #124558, I changed `class FlutterVersion` into an abstract interface, implemented by `_FlutterVersionFromGit` (which is essentially the previous behavior) and `_FlutterVersionFromFile`, which merely reads the data it would have computed via git from `//flutter/bin/cache/version.json`.

While doing this, I made `_FlutterVersionFromGit.ensureVersionFile()` to be a no-op, since I assumed this would not be necessary since we already had a version file in the cache. However, this method was what was previously responsible for ensuring `//flutter/version` existed on disk. This means that if, for whatever reason, the user had `//flutter/bin/cache/flutter.version.json` present but NOT `//flutter/version`, the tool would have never created that file, and they would hit the tool crash seen in #133093.

This fixes the tool by ensuring `//flutter/version` exists regardless of if we're hydrating `FlutterVersion` from `//flutter/bin/cache/flutter.version.json` or not.