Skip to content

[Tool] Support glob patterns when parsing workspaces in FlutterProject#185715

Merged
auto-submit[bot] merged 5 commits into
flutter:masterfrom
jason-simmons:bug_185654
May 13, 2026
Merged

[Tool] Support glob patterns when parsing workspaces in FlutterProject#185715
auto-submit[bot] merged 5 commits into
flutter:masterfrom
jason-simmons:bug_185654

Conversation

@jason-simmons

Copy link
Copy Markdown
Member

@jason-simmons jason-simmons requested a review from bkonyi April 29, 2026 00:15
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Apr 29, 2026
@github-actions github-actions Bot added the tool Affects the "flutter" command-line tool. See also t: labels. label Apr 29, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the workspaceProjects discovery logic to support glob patterns in the workspace configuration, ensuring that only directories containing a pubspec.yaml are included. Reviewer feedback suggests using a map to prevent duplicate project instances when glob patterns overlap and recommends renaming a test case to more accurately reflect its purpose.

Comment on lines +136 to +150
List<FlutterProject> get workspaceProjects {
final result = <FlutterProject>[];
for (final String entry in manifest.workspace) {
final glob = Glob(entry);
for (final Directory globResult
in glob
.listFileSystemSync(directory.fileSystem, root: directory.path)
.whereType<Directory>()) {
if (globResult.childFile('pubspec.yaml').existsSync()) {
result.add(FlutterProject.fromDirectory(globResult));
}
}
}
return result;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The current implementation can result in duplicate FlutterProject instances if multiple glob patterns match the same directory, or if a directory is listed both explicitly and via a glob. This could lead to redundant operations when iterating over workspaceProjects. Using a map keyed by the directory path ensures each project is only included once while preserving the discovery order.

  List<FlutterProject> get workspaceProjects {
    final projects = <String, FlutterProject>{};
    for (final String entry in manifest.workspace) {
      final glob = Glob(entry);
      for (final Directory globResult in glob
          .listFileSystemSync(directory.fileSystem, root: directory.path)
          .whereType<Directory>()) {
        if (globResult.childFile("pubspec.yaml").existsSync()) {
          projects.putIfAbsent(globResult.path, () => FlutterProject.fromDirectory(globResult));
        }
      }
    }
    return projects.values.toList();
  }

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skipping this - the implementation in Dart's pub and the previous implementation in flutter_tools do not deduplicate workspace package paths.

Users should not add the same package multiple times in the pubspec.

Comment thread packages/flutter_tools/test/general.shard/project_test.dart Outdated
@github-actions github-actions Bot removed the CICD Run CI/CD label Apr 29, 2026
@jason-simmons jason-simmons added the CICD Run CI/CD label Apr 29, 2026
@jason-simmons

Copy link
Copy Markdown
Member Author

@bkonyi The test failure in https://github.com/flutter/flutter/blob/master/packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_manifest/preview_manifest_workspace_test.dart#L121 involves a situation where a package's directory was deleted but the package path is still listed in the workspace.

How should that be handled?

Previously FlutterProject.workspaceProjects would return all projects specified in the workspace even if the project did not exist at that path.

This PR only returns workspace projects that have a pubspec.yaml file within the project's path in the filesystem.

@bkonyi

bkonyi commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

@bkonyi The test failure in https://github.com/flutter/flutter/blob/master/packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_manifest/preview_manifest_workspace_test.dart#L121 involves a situation where a package's directory was deleted but the package path is still listed in the workspace.

How should that be handled?

Previously FlutterProject.workspaceProjects would return all projects specified in the workspace even if the project did not exist at that path.

This PR only returns workspace projects that have a pubspec.yaml file within the project's path in the filesystem.

I think we should load the set of workspace projects with glob resolution when we first create the FlutterProject and when reloadManifest is invoked.

@github-actions github-actions Bot removed the CICD Run CI/CD label Apr 29, 2026
@jason-simmons

Copy link
Copy Markdown
Member Author

I think we should load the set of workspace projects with glob resolution when we first create the FlutterProject and when reloadManifest is invoked.

Implemented this.

However, I found that a different change had to be made in order to get preview_manifest_workspace_test.dart passing.

PreviewManifest._calculatePubspecHashes was leaving a pubspec path in pubspecHashes if its project was not found in rootProject.workspaceProjects.

I changed _calculatePubspecHashes to remove the path from pubspecHashes if the project disappeared from workspaceProjects (which will now happen if the pubspec file has been deleted)

bkonyi
bkonyi previously approved these changes May 1, 2026
@bkonyi bkonyi added the CICD Run CI/CD label May 1, 2026
@bkonyi

bkonyi commented May 1, 2026

Copy link
Copy Markdown
Contributor

Thanks @jason-simmons! LGTM!

…manifest is updated

Also change PreviewManifest._calculatePubspecHashes to delete a path from pubspecHashes if its project was removed from rootProject.workspaceProjects
@github-actions github-actions Bot removed the CICD Run CI/CD label May 8, 2026
@jason-simmons jason-simmons added the CICD Run CI/CD label May 8, 2026
@jason-simmons jason-simmons requested review from a team as code owners May 8, 2026 17:56
@github-actions github-actions Bot added team-ios Owned by iOS platform team team-macos Owned by the macOS platform team and removed CICD Run CI/CD labels May 8, 2026
@jason-simmons jason-simmons added the CICD Run CI/CD label May 8, 2026
@github-actions github-actions Bot removed the CICD Run CI/CD label May 8, 2026
@jason-simmons jason-simmons added the CICD Run CI/CD label May 8, 2026
@jason-simmons jason-simmons requested a review from bkonyi May 8, 2026 19:05
@jason-simmons jason-simmons added the autosubmit Merge PR when tree becomes green via auto submit App label May 12, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue May 12, 2026
Merged via the queue into flutter:master with commit 4d019c4 May 13, 2026
162 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label May 13, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request May 15, 2026
…11713)

Manual roll requested by bmparr@google.com

flutter/flutter@23f6f58...0541913

2026-05-14 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Windows] Propagate the enabled accessibility state (#184501)" (flutter/flutter#186492)
2026-05-13 srawlins@google.com [dev] Use super parameters in missed spots (flutter/flutter#186193)
2026-05-13 loic.peron@inetum.com [Windows] Propagate the enabled accessibility state (flutter/flutter#184501)
2026-05-13 matt.boetger@gmail.com [flutter_tool] filter out MotionEvent-JNI warning spam from logcat (#174783) (flutter/flutter#186079)
2026-05-13 engine-flutter-autoroll@skia.org Roll Packages from 93cbed6 to 2ec2236 (1 revision) (flutter/flutter#186464)
2026-05-13 mdebbar@google.com [web] Fix untriaged issues link label (flutter/flutter#186465)
2026-05-13 bdero@google.com [Impeller] Namespace user-supplied shaders to prevent entrypoint collisions (flutter/flutter#186332)
2026-05-13 1063596+reidbaker@users.noreply.github.com [flutter_tools] Migrate detectLowCompileSdkVersionOrNdkVersion to AGP task (flutter/flutter#184731)
2026-05-13 jason-simmons@users.noreply.github.com Update the Flutter Gallery web app template files to support running with Wasm (flutter/flutter#186268)
2026-05-13 jason-simmons@users.noreply.github.com [web] Use heap allocation for buffers that would consume too much space on the Wasm stack (flutter/flutter#186228)
2026-05-13 engine-flutter-autoroll@skia.org Roll Skia from 56ca5896c0d9 to 27f7bba22600 (3 revisions) (flutter/flutter#186444)
2026-05-13 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from z7ICmPtn4hspu02zk... to y6uQHA5xUN83IF395... (flutter/flutter#186442)
2026-05-13 engine-flutter-autoroll@skia.org Roll Skia from 6385958d2feb to 56ca5896c0d9 (1 revision) (flutter/flutter#186441)
2026-05-13 engine-flutter-autoroll@skia.org Roll Dart SDK from 9576691c37d8 to 8e30b88e4d5a (1 revision) (flutter/flutter#186429)
2026-05-13 engine-flutter-autoroll@skia.org Roll Skia from 77a21bc723dc to 6385958d2feb (9 revisions) (flutter/flutter#186428)
2026-05-13 164032450+AlexEduV@users.noreply.github.com Docs/improving docs for semantics UI lib (flutter/flutter#186125)
2026-05-12 jason-simmons@users.noreply.github.com [Tool] Support glob patterns when parsing workspaces in FlutterProject (flutter/flutter#185715)
2026-05-12 nico.reiab@gmail.com docs: fix overriden -> overridden in MediaQueryData dartdoc (flutter/flutter#186323)
2026-05-12 brackenavaron@gmail.com [Test cross imports] No material in `test/foundation`, `test/gestures`, `test/semantics`, `test/services` (flutter/flutter#186144)
2026-05-12 nico.reiab@gmail.com docs: fix "tha" -> "that" typo in widget_inspector_test comment (flutter/flutter#186322)
2026-05-12 nico.reiab@gmail.com docs: Fix doubled-word typos in framework dartdoc (flutter/flutter#186319)
2026-05-12 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#186418)
2026-05-12 30870216+gaaclarke@users.noreply.github.com Bumped required mediatek vender sdk version. (flutter/flutter#186405)
2026-05-12 magder@google.com Make DeepLinkJsonFromManifestTask Gradle task build cacheable (flutter/flutter#185903)
2026-05-12 66727653+ishaq2321@users.noreply.github.com Harden dev tooling scripts against command injection and log leaks (flutter/flutter#186076)
2026-05-12 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#186274)
2026-05-12 bdero@google.com [Flutter GPU] Allow allocating multi-mip textures and overwriting specific (mip, slice) levels (flutter/flutter#185890)
2026-05-12 zhongliu88889@gmail.com [web] Fix MenuAnchor dismiss when semantics enabled (flutter/flutter#183093)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…lutter#11713)

Manual roll requested by bmparr@google.com

flutter/flutter@23f6f58...0541913

2026-05-14 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Windows] Propagate the enabled accessibility state (#184501)" (flutter/flutter#186492)
2026-05-13 srawlins@google.com [dev] Use super parameters in missed spots (flutter/flutter#186193)
2026-05-13 loic.peron@inetum.com [Windows] Propagate the enabled accessibility state (flutter/flutter#184501)
2026-05-13 matt.boetger@gmail.com [flutter_tool] filter out MotionEvent-JNI warning spam from logcat (#174783) (flutter/flutter#186079)
2026-05-13 engine-flutter-autoroll@skia.org Roll Packages from 93cbed6 to 2ec2236 (1 revision) (flutter/flutter#186464)
2026-05-13 mdebbar@google.com [web] Fix untriaged issues link label (flutter/flutter#186465)
2026-05-13 bdero@google.com [Impeller] Namespace user-supplied shaders to prevent entrypoint collisions (flutter/flutter#186332)
2026-05-13 1063596+reidbaker@users.noreply.github.com [flutter_tools] Migrate detectLowCompileSdkVersionOrNdkVersion to AGP task (flutter/flutter#184731)
2026-05-13 jason-simmons@users.noreply.github.com Update the Flutter Gallery web app template files to support running with Wasm (flutter/flutter#186268)
2026-05-13 jason-simmons@users.noreply.github.com [web] Use heap allocation for buffers that would consume too much space on the Wasm stack (flutter/flutter#186228)
2026-05-13 engine-flutter-autoroll@skia.org Roll Skia from 56ca5896c0d9 to 27f7bba22600 (3 revisions) (flutter/flutter#186444)
2026-05-13 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from z7ICmPtn4hspu02zk... to y6uQHA5xUN83IF395... (flutter/flutter#186442)
2026-05-13 engine-flutter-autoroll@skia.org Roll Skia from 6385958d2feb to 56ca5896c0d9 (1 revision) (flutter/flutter#186441)
2026-05-13 engine-flutter-autoroll@skia.org Roll Dart SDK from 9576691c37d8 to 8e30b88e4d5a (1 revision) (flutter/flutter#186429)
2026-05-13 engine-flutter-autoroll@skia.org Roll Skia from 77a21bc723dc to 6385958d2feb (9 revisions) (flutter/flutter#186428)
2026-05-13 164032450+AlexEduV@users.noreply.github.com Docs/improving docs for semantics UI lib (flutter/flutter#186125)
2026-05-12 jason-simmons@users.noreply.github.com [Tool] Support glob patterns when parsing workspaces in FlutterProject (flutter/flutter#185715)
2026-05-12 nico.reiab@gmail.com docs: fix overriden -> overridden in MediaQueryData dartdoc (flutter/flutter#186323)
2026-05-12 brackenavaron@gmail.com [Test cross imports] No material in `test/foundation`, `test/gestures`, `test/semantics`, `test/services` (flutter/flutter#186144)
2026-05-12 nico.reiab@gmail.com docs: fix "tha" -> "that" typo in widget_inspector_test comment (flutter/flutter#186322)
2026-05-12 nico.reiab@gmail.com docs: Fix doubled-word typos in framework dartdoc (flutter/flutter#186319)
2026-05-12 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#186418)
2026-05-12 30870216+gaaclarke@users.noreply.github.com Bumped required mediatek vender sdk version. (flutter/flutter#186405)
2026-05-12 magder@google.com Make DeepLinkJsonFromManifestTask Gradle task build cacheable (flutter/flutter#185903)
2026-05-12 66727653+ishaq2321@users.noreply.github.com Harden dev tooling scripts against command injection and log leaks (flutter/flutter#186076)
2026-05-12 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#186274)
2026-05-12 bdero@google.com [Flutter GPU] Allow allocating multi-mip textures and overwriting specific (mip, slice) levels (flutter/flutter#185890)
2026-05-12 zhongliu88889@gmail.com [web] Fix MenuAnchor dismiss when semantics enabled (flutter/flutter#183093)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD team-ios Owned by iOS platform team team-macos Owned by the macOS platform team tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[tool_crash] flutter test --coverage crashes finalizing coverage on 3.41.7

2 participants