-
Notifications
You must be signed in to change notification settings - Fork 30.8k
Comparing changes
Open a pull request
base repository: flutter/flutter
base: dc2a8703e12b
head repository: flutter/flutter
compare: f7b66f3e7b4d
- 12 commits
- 31 files changed
- 11 contributors
Commits on Jul 10, 2026
-
Update Depdencies Used By
flutter_engine_group_performance(#189229)I raised the warn and error version in this PR: #189109. The dependencies used by `flutter_engine_group_performance` were not updated as a part of that PR. I missed that update earlier, and I'm guessing that `flutter_engine_group_performance` is post-submit test. Fixes #189228 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Configuration menu - View commit details
-
Copy full SHA for 1d5bcf3 - Browse repository at this point
Copy the full SHA 1d5bcf3View commit details -
Roll Fuchsia Linux SDK from QcRFUtvCw2EobfJ8s... to czpzDg9ABY2oKLAOY…
…... (#189222) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: 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
Configuration menu - View commit details
-
Copy full SHA for 2144227 - Browse repository at this point
Copy the full SHA 2144227View commit details -
Roll Fuchsia Test Scripts from s5_gZFJ8De9AJalTw... to dFkTCiDxEtPxYK…
…5Nn... (#189215) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/fuchsia-test-scripts-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: 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
Configuration menu - View commit details
-
Copy full SHA for 97b6bac - Browse repository at this point
Copy the full SHA 97b6bacView commit details -
[web] Repair RenderCanvas CSS size drift (#188797)
## What changed This PR makes the stock `RenderCanvas` path repair stale inline canvas CSS size even when the backing-store size and DPR have not changed. Changes: - Factor the expected logical canvas CSS size into a helper. - Check actual `style.width` / `style.height` before the same-size early return. - Re-apply backing-store / DPR CSS size when the inline style is stale. - Add regression coverage for `1206 x 2142 @ DPR 3`, repairing `0.333333px` back to `402 x 714px`. ## Why #188723 tracks a Safari/WebKit Skwasm case where the canvas backing store can be valid while the visible CSS/display rect remains collapsed around `0.328125 x 0.328125px`. The existing stock `RenderCanvas` code repairs CSS size on physical-size changes and DPR changes, but not when only the inline CSS value is stale. This PR makes that same-size path self-heal. ## Scope This does not enable Skwasm by default, change WebKit policy, depend on the multi-surface rasterizer, or by itself close all Safari/WebKit default-policy gates. ## Validation - `dart format`: passed. - `git diff --check`: passed. - Targeted `felt` browser test in the #188797 checkout: passed locally. - Command: `DART_SUPPRESS_ANALYTICS=true HOME=/private/tmp DART_SDK_DIR=/private/tmp/flutter-mobile-safari-skwasm-canvas-css-size-fix-upstream-worktree/engine/src/flutter/third_party/dart/tools/sdks/dart-sdk ./dev/felt test --gcs-prod --browser chrome --compiler dart2js --renderer canvaskit --fail-early test/engine/compositing/render_canvas_test.dart` - Result: `chrome-dart2js-canvaskit-engine`, `3/3`, `All tests passed!`. - Fresh `engine/src/out/wasm_release/flutter_web_sdk` build from the #188797 worktree: passed locally. - `dev/benchmarks/macrobenchmarks` built as web wasm/profile using the local `wasm_release` SDK: passed locally. - Guardrail: preserved SDK/app build logs and generated bundle were checked for `FLUTTER_WEB_SKWASM_FORCE_MULTI_SURFACE_RASTERIZER`; the string was absent. - Simulator MobileSafari, Skwasm, `variant=none`, no forced CSS sizing, `bench_card_infinite_scroll`: `probe-complete`, `errors: []`, loaded `skwasm_heavy`, `main.dart.mjs`, and `main.dart.wasm`, `crossOriginIsolated=true`, canvas backing `1206 x 2142`, CSS/display/style `402 x 714` / `402px x 714px`. - Physical iPhone MobileSafari, Skwasm, `variant=none`, no forced CSS sizing, `bench_card_infinite_scroll`: `all-benchmarks-complete`, `errors: []`, loaded `skwasm_heavy`, `main.dart.mjs`, and `main.dart.wasm`, canvas backing `1206 x 2142`, CSS/display/style `402 x 714` / `402px x 714px`. - Physical iPhone MobileSafari, Skwasm, `variant=none`, no forced CSS sizing, `bench_simple_lazy_text_scroll`: `all-benchmarks-complete`, `errors: []`, loaded `skwasm_heavy`, `main.dart.mjs`, and `main.dart.wasm`, canvas backing `1206 x 2142`, CSS/display/style `402 x 714` / `402px x 714px`. Physical iPhone page telemetry reported `crossOriginIsolated=false` even though the harness served isolation headers. Skwasm still loaded through the WebKit allowlist, so this is local physical geometry/benchmark-completion evidence, not a cross-origin-isolation pass. Related issue: #188723. Broader Safari/WebKit Wasm/Skwasm tracking: #178893. --------- Co-authored-by: Harry Terkelsen <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 8303fed - Browse repository at this point
Copy the full SHA 8303fedView commit details -
Adds a missing
awaitto aFutureOr(#189198)This merely adds a missing `await` to a `FutureOr` for a new `linter` change tracked at: - dart-lang/sdk#59105 Since the surrounding was already `async`, I don't expect any tests to break. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Configuration menu - View commit details
-
Copy full SHA for 8062c0e - Browse repository at this point
Copy the full SHA 8062c0eView commit details -
Roll Dart SDK from a11fb7ed40a5 to 0fc1668c4af4 (5 revisions) (#189257)
https://dart.googlesource.com/sdk.git/+log/a11fb7ed40a5..0fc1668c4af4 2026-07-10 [email protected] Version 3.14.0-10.0.dev 2026-07-10 [email protected] Version 3.14.0-9.0.dev 2026-07-10 [email protected] Version 3.14.0-8.0.dev 2026-07-09 [email protected] Version 3.14.0-7.0.dev 2026-07-09 [email protected] Version 3.14.0-6.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: 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
Configuration menu - View commit details
-
Copy full SHA for f9628e3 - Browse repository at this point
Copy the full SHA f9628e3View commit details -
Roll Fuchsia Test Scripts from dFkTCiDxEtPxYK5Nn... to wLST_A-xfOeGT_…
…5mj... (#189259) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/fuchsia-test-scripts-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: 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
Configuration menu - View commit details
-
Copy full SHA for a6ad4b0 - Browse repository at this point
Copy the full SHA a6ad4b0View commit details -
Assert TextStyle height is not NaN (#186617)
Fixes #175248 Prevents `TextStyle(height: double.nan)` and `getParagraphStyle(height: double.nan)` from passing NaN line heights down to dart:ui in debug mode. This produces a clear assertion before platform-specific text layout failures. Tests: - `./bin/dart format --output=none --set-exit-if-changed packages/flutter/lib/src/painting/text_style.dart packages/flutter/test/painting/text_style_test.dart` - `./bin/flutter test packages/flutter/test/painting/text_style_test.dart` - `./bin/flutter analyze packages/flutter/lib/src/painting/text_style.dart packages/flutter/test/painting/text_style_test.dart` - `git diff --check`
Configuration menu - View commit details
-
Copy full SHA for bc6a4c8 - Browse repository at this point
Copy the full SHA bc6a4c8View commit details -
[Impeller] Recycle HostBuffer arena entries only after GPU completion (…
…#188965) Fixes #184091. HostBuffer reuses each arena entry kHostBufferArenaSize (4) resets after it was written, assuming no more than 4 frames are ever in flight. Nothing enforces that assumption. On macOS the embedder applies no frame backpressure, so GPU-heavy workloads run the pipeline deeper than the arena and per-frame uniform and vertex data is overwritten while the GPU is still reading it, corrupting rendering. This makes reuse completion-aware. Each backend context records command buffer submissions and completions in a monotonic watermark, and HostBuffer::Reset retires entries whose GPU work has not yet completed (keeping their buffers alive until it has) and starts them over with fresh allocations. Deep pipelines now cost transient memory instead of correctness, and the memory drains back once the GPU catches up. Metal tracks completion via command buffer completed handlers and Vulkan via the fence waiter. GLES tracks at reactor consumption granularity, since GL synchronizes buffer reuse implicitly and provides no equivalent completion signal there. Before fix (repro: #184091 (comment)): https://github.com/user-attachments/assets/ef49ab50-8273-4571-a759-bf4d8285a372 After fix: https://github.com/user-attachments/assets/450eadf4-6165-47bb-83df-68a51c274e65 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Configuration menu - View commit details
-
Copy full SHA for 1db664b - Browse repository at this point
Copy the full SHA 1db664bView commit details -
[web] Preserve text field focus across tab switches (#188738)
Fixes #178109 **Problem** On Flutter Web, a focused `TextFormField` loses focus after switching to another browser tab and returning. The browser blurs the hidden text input before reporting the page as hidden, so the engine closes the text input connection too early. **Fix** Defer closing the text input connection when the document has lost focus and `relatedTarget` is null. If the page becomes hidden, keep the connection alive so focus can recover on tab resume. If the page stays visible, close as before to preserve window and iframe blur behavior. The delayed callback also skips closing if the document quickly regains focus. **Demo** | Before | After | |---|---| | https://flutter-demo-45-before.web.app | https://flutter-demo-45-after.web.app | Steps: focus the text field, type text, switch to another browser tab, then return. Before: `Focused` becomes `no`. After: `Focused` returns to `yes`.
Configuration menu - View commit details
-
Copy full SHA for 6a01720 - Browse repository at this point
Copy the full SHA 6a01720View commit details -
Fix broken listener code in WindowScope (#189208)
## What's new? WindowScope is an InheritedModel that is rebuilt with the same controller instance whenever the controller notifies its listeners. Its updateShouldNotify and updateShouldNotifyDependent compared the live controller's values against oldWidget.controller's values, but since the controller is the same object across rebuilds, those comparisons were always false and dependents never rebuilt. Capture a snapshot of each aspect value in the WindowScope constructor so the old and new widgets hold independent values that can be compared to detect which aspects changed. The per-aspect value computations are extracted into static helpers shared with the *Of accessors. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
Configuration menu - View commit details
-
Copy full SHA for fec28c6 - Browse repository at this point
Copy the full SHA fec28c6View commit details -
[iOS][test] Fix VSyncClient display link deallocation test on iOS 27 (#…
…188627) Follow-up to #187164, which fixed a retain cycle where `CADisplayLink` was directly targeting `VSyncClient` by introducing `VSyncClientRelay` as a weak-proxy target. The accompanying test verified the fix by checking both `weakClient == nil` (no retain cycle) and `weakDisplayLink == nil` (display link fully released) after deallocation. The test passes on iOS 18 and 26 but fails reproducibly on iOS 27. This PR renames and adjusts the test to reflect what it actually verifies: the absence of a retain cycle, not iOS-internal display server cleanup timing. ## Investigation On iOS 27, `weakClient == nil` passes: `VSyncClient` is correctly released. However `weakDisplayLink` remains non-nil indefinitely, causing the test to time out. `_CADisplayLinkAssertion` is a `QuartzCore`-internal object. It is created when `CADisplayLink` is added to a run loop and registered with the display server. On iOS 26 and earlier, this assertion is released synchronously when `link.invalidate()` is called. On iOS 27, the assertion persists: its release appears to be deferred to an internal display server event that never fires for a link that was never unpaused. ## Approaches ruled out - `remove + invalidate on task runner thread` (original) -> PERMANENT HOLD - `remove + invalidate on main run loop` -> PERMANENT HOLD - `isPaused = false + remove + invalidate in same synchronous block` -> PERMANENT HOLD The display server is out-of-process. No synchronous call sequence from the app side is sufficient to force it to release `_CADisplayLinkAssertion` for a link that was never activated. ## Fix The `weakDisplayLink` assertion was testing iOS-internal display server cleanup timing rather than the retain cycle the test was designed to catch. Since `VSyncClient` itself is correctly released (`weakClient == nil`) on all iOS versions, there is no leak in Flutter's object graph. The test is renamed to `testDeallocatesAfterRegistrationCompletes` and the `weakDisplayLink` check is removed. The `weakClient` assertion is retained and continues to verify the no-retain-cycle invariant. ## Test Results | --- | --- | --- | | iOS | Before | Now | | 18.6 | Pass | Pass | | 26.0 | Pass | Pass | | 26.0.1 | Pass | Pass | | 26.1 | Pass | Pass | | 27.0 | Fail | Pass | ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Chris Bracken <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for f7b66f3 - Browse repository at this point
Copy the full SHA f7b66f3View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff dc2a8703e12b...f7b66f3e7b4d