shell.pushd does not restore the working directory after an exception
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 88/100
Rechercherichtung
Beginne in utils/swift_build_support, wo swift_build_support.shell.pushd() definiert ist, und reproduziere das Problem mit dem bereitgestellten Python-Snippet unter Verwendung von PYTHONPATH=utils/swift_build_support python3 repro.py. Überprüfe die Bereinigung nach yield und stelle sicher, dass das erfasste Arbeitsverzeichnis wiederhergestellt wird, wenn der Kontext eine Exception auslöst; die Aufgabe ist erledigt, wenn die abschließende Prüfung der Wiederherstellung True ausgibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Description
swift_build_support.shell.pushd() restores the previous working directory only after a normal exit from the context. If code inside the context raises, the process remains in the pushed directory. Any later error handling or cleanup that uses relative paths then runs from the wrong location.
Reproduction
import os
import tempfile
from swift_build_support import shell
start = os.getcwd()
target = tempfile.mkdtemp()
try:
with shell.pushd(target, echo=False):
raise RuntimeError("boom")
except RuntimeError:
pass
print("start:", start)
print("after:", os.getcwd())
print("restored:", os.getcwd() == start)
Run with PYTHONPATH=utils/swift_build_support python3 repro.py. The final line prints restored: False.
Expected behavior
pushd() should restore the directory it captured on entry even when the context exits by raising an exception.
Environment
Swift repository main at d2a794410e16d9699afd72d24e0a26ed51bcd9c5
Python 3.9.6
Darwin 25.6.0 arm64
Additional information
The context manager's cleanup runs after yield but is not protected by a finally block.
- Vorherrschende Sprache
- Swift
- Sterne
- 70.4k
- Forks
- 10.8k
- Ø Merge
- 2 T. 2 Std.
- Gemergte PRs (30 T.)
- 461
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus swiftlang/swift
-
triage needed
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
-
Foundation Windows
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
-
triage needed
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
-
triage needed
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Alle Issues in swiftlang/swift
Ähnliche Issues
-
type: docs
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 95/100
googleapis/google-cloud-swift#971 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
bitcoindevkit/bdk-ffi#1125 ·
-
Move wallpaper setting Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
mozilla-mobile/firefox-ios#35743 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
manaflow-ai/cmux#13417 ·
-
triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
ionic-team/capacitor#8616 ·