[Feature] Metro cache cleanup uses blocking and unsafe recursive deletion
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- node.js, typescript, vscode
Línea de trabajo
Encuentra el comando “Clean [31m&[0m Restart Packager” y su método personalizado deleteDirectory() en el código fuente de la extensión. Lee primero el flujo de limpieza y el manejo de errores; comprueba que la limpieza termine antes de que se reinicie el packager y que se gestione la ausencia de una ruta de caché. El issue no indica nombres de archivos ni de pruebas, así que localiza el comando relevante y las pruebas en el repositorio.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
The “Clean & Restart Packager” command currently deletes the Metro cache using a custom recursive deleteDirectory() method.
This implementation has several issues:
- It uses synchronous filesystem APIs inside an asynchronous workflow, potentially blocking the extension host when the cache contains many files.
statSync()follows symbolic links, so recursive traversal may delete files in directories outside the Metro cache.- Separate existence checks and deletion operations introduce time-of-check/time-of-use (TOCTOU) races.
- It duplicates functionality already provided by Node.js.
Proposed solution
Replace the existence check and custom recursive deletion with:
await fs.promises.rm(metroCachePath, {
recursive: true,
force: true,
});
Remove the unused deleteDirectory() method and preserve the existing error handling.
Expected behavior
- Metro cache cleanup does not use synchronous filesystem APIs.
- Symbolic links inside the cache are removed without deleting their target contents.
- A missing cache directory does not cause cleanup to fail.
- The packager restarts after cleanup completes.
- Lenguaje dominante
- TypeScript
- Estrellas
- 2.7k
- Forks
- 298
- Merge medio
- 1 d 3 h
- PR fusionados (30 d)
- 26
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de microsoft/vscode-react-native
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
microsoft/vscode-react-native#3011 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
microsoft/vscode-react-native#3008 ·
Los mantenedores suelen responder en 1 día
-
[Feature] Avoid duplicate error notificationsPosiblemente ocupada @erenbati la tomó hace 11 días. Abiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
microsoft/vscode-react-native#2963 ·
Los mantenedores suelen responder en 1 día
-
[Feature] Stop Expo Go installation when Quick Pick is canceledPosiblemente ocupada @erenbati la tomó hace 26 días. Abiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
microsoft/vscode-react-native#2959 ·
Los mantenedores suelen responder en 1 día
-
enhancement follow-up
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
microsoft/vscode-react-native#2951 ·
Los mantenedores suelen responder en 1 día
Todos los issues de microsoft/vscode-react-native
Issues similares
-
[Bug]: Circular app layout navigation and help icons are shifted upward in the official demoAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
cloudscape-design/components#5184 ·
Los mantenedores suelen responder en 2 días
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
JarX-Concepts/react-native-platform-components#130 ·
Los mantenedores suelen responder en 1 día
-
fix(api): optimize-for-web /preview outer catches miss asDecoderOutOfMemory on V8 OOM and SIGKILLAbiertoarea: backend bug priority: low
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
snapotter-hq/SnapOtter#3773 ·
Los mantenedores suelen responder en 1 día
-
ai-driven-qa ux-audit
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
linagora/twake-contacts-frontend#386 ·
Los mantenedores suelen responder en 1 día
-
git: README should state plainly that without --repository every reachable repository is in scopeAbiertodocumentation server-git v2
Dificultad 1/5 1-3 horas Aptitud para principiantes 84/100
modelcontextprotocol/servers#5225 ·
Los mantenedores suelen responder en 1 día