Hook: GIT_DIR laesst Flutter das falsche Repo als SDK lesen
Git reicht GIT_DIR, GIT_INDEX_FILE und GIT_WORK_TREE an Hooks weiter. Der
Hook ruft flutter auf, und Flutter ermittelt seine eigene Version per git in
seinem SDK-Verzeichnis - mit geerbtem GIT_DIR liest es stattdessen DIESES
Repo und erfindet daraus eine SDK-Version.
Nachgemessen (flutter --version, gleiche Maschine, nur GIT_DIR variiert):
GIT_DIR=<repo>/.git/worktrees/<name> -> 3.48.0-0.2.pre, channel
[user-branch], revision =
Commit dieses Branches
GIT_DIR=<repo>/.git -> 3.48.0-0.2.pre, channel main,
revision = Commit von main
ohne GIT_DIR -> 3.44.8, channel stable
Es betrifft also BEIDE Faelle, nicht nur verlinkte Worktrees - nur das
sichtbare Symptom unterscheidet sich:
- Aus einem verlinkten Worktree scheitert die Abhaengigkeitsaufloesung
("The current Flutter SDK version is 0.0.0-unknown") und der Commit wird
abgelehnt, obwohl mit dem Code alles in Ordnung ist.
- Aus dem Haupt-Checkout laeuft das Gate zwar durch, aber Flutter baut sein
Werkzeug bei jedem Commit neu ("Building flutter tool...", ein bis zwei
Minuten). Diesen Preis zahlt dort bisher jeder Commit unbemerkt.
Zusaetzlich gibt Flutter dabei die Remote-URL des gelesenen Repos aus. Da
der Zugriffstoken in dieser URL eingebettet ist, stand er so in jeder
Hook-Ausgabe. Der Fix schliesst auch diesen Weg. (Die Token-Ablage selbst
gehoert getrennt behandelt - Credential-Helper statt URL-Einbettung.)
Fix: Repo-Wurzel merken, dann die von git gesetzten Variablen loeschen,
bevor flutter laeuft.
Getestet: Hook mit gesetztem GIT_DIR und GIT_INDEX_FILE aus einem
verlinkten Worktree aufgerufen - analyze und test laufen beide durch,
Exit 0. Unabhaengig von der zweiten Session im Haupt-Checkout bestaetigt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QbuWT267W8rFDsaavANuEn
This commit is contained in:
co-authored by
Claude Opus 5
parent
34d6d8e52a
commit
a44321c510
+17
-1
@@ -8,9 +8,25 @@ export PATH="$HOME/development/flutter/bin:$PATH"
|
||||
|
||||
echo "🔍 Melo App Qualitäts-Gate gestartet..."
|
||||
|
||||
# Git reicht GIT_DIR/GIT_INDEX_FILE/GIT_WORK_TREE an Hooks weiter. Flutter
|
||||
# ermittelt seine Version per git im SDK-Verzeichnis — erbt es dabei GIT_DIR,
|
||||
# liest es stattdessen DIESES Repo und erfindet daraus eine SDK-Version.
|
||||
# Betrifft BEIDE Arbeitsbäume, nur unterschiedlich sichtbar:
|
||||
# verlinkter Worktree -> harter Abbruch ("SDK version is 0.0.0-unknown"),
|
||||
# korrekte Commits werden abgelehnt
|
||||
# Haupt-Checkout -> still: Flutter baut sein Werkzeug bei JEDEM Commit
|
||||
# neu (ein bis zwei Minuten pro Commit)
|
||||
# Gemessen: ohne GIT_DIR meldet Flutter 3.44.8/stable, mit GIT_DIR dagegen
|
||||
# 3.48.0-0.2.pre und als Revision einen Commit AUS DIESEM REPO.
|
||||
# Nebeneffekt: Flutter gibt dabei die Remote-URL aus — steht dort ein Token
|
||||
# in der URL, landet es in der Hook-Ausgabe. Das unset schließt auch das.
|
||||
ROOT="$(git rev-parse --show-toplevel)" || exit 1
|
||||
unset GIT_DIR GIT_INDEX_FILE GIT_WORK_TREE GIT_PREFIX GIT_COMMON_DIR
|
||||
cd "$ROOT" || exit 1
|
||||
|
||||
# 1. Dart Analyse
|
||||
echo -n " Prüfe: flutter analyze ... "
|
||||
cd "$(git rev-parse --show-toplevel)" || exit 1
|
||||
|
||||
ANALYZE_OUTPUT=$($FLUTTER analyze 2>&1)
|
||||
if echo "$ANALYZE_OUTPUT" | grep -q "No issues found"; then
|
||||
echo "✅"
|
||||
|
||||
Reference in New Issue
Block a user