shell.pushd does not restore the working directory after an exception
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 88/100
Piste de recherche
Commencez dans utils/swift_build_support, où swift_build_support.shell.pushd() est défini, et reproduisez le problème avec l’extrait Python fourni en utilisant PYTHONPATH=utils/swift_build_support python3 repro.py. Vérifiez le nettoyage après yield et assurez-vous que le répertoire de travail capturé est restauré lorsque le contexte lève une exception ; c’est terminé lorsque la vérification finale de la restauration affiche True.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Swift
- Étoiles
- 70.4k
- Forks
- 10.8k
- Merge moyen
- 2 j 2 h
- PR mergées (30 j)
- 461
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de swiftlang/swift
-
triage needed
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
Foundation Windows
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
triage needed
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
triage needed
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Toutes les issues de swiftlang/swift
Issues similaires
-
type: docs
Difficulté 1/5 Moins d'une heure Accessibilité débutants 95/100
googleapis/google-cloud-swift#971 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
bitcoindevkit/bdk-ffi#1125 ·
-
Move wallpaper setting Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
mozilla-mobile/firefox-ios#35743 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
manaflow-ai/cmux#13417 ·
-
triage
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
ionic-team/capacitor#8616 ·