Schematics : Copy then delete can cause "This should never happen" error.
- Lenguaje dominante
- TypeScript
- Estrellas
- 27k
- Forks
- 11.8k
- Merge medio
- 14 h 23 min
- PR fusionados (30 d)
- 162
Descripción
# 🐞 Bug report
### Description
Moving files as part of a schematic can cause an error to be thrown:
```bash
Message:
Error: This should never happen. Path: "/projects/bar".
```
It seems to happen if those files were created by a previous rule and the move is done by copy and deletion.
(As an aside here, it _seems_ that delete operations are hoisted somehow...whenever they occur in a schematic, the logger output shows them to always happen first, this is *not* what I'd expect)
I'm aware that there is a `move` rule in `@angular-devkit/schematics/src/rules`, but this **does not work**. Attempting to use this rule to move files from one folder to another results in this error: `ENOENT: no such file or directory, rename '' -> ''`
## 🔬 Minimal Reproduction
```ts
export function move(schema: Schema): Rule {
return (host: Tree, _context: SchematicContext): Tree => {
const dir = host.getDir(schema.source);
dir.visit(file => {
const newPath = file.replace(schema.source, schema.destination);
const buffer = host.read(file);
if (buffer === null) {
return;
}
host.create(newPath, buffer);
});
host.delete(schema.source);
return host;
};
}
```
See also: https://github.com/jdpearce/move-schematic
NB - this schematic will probably work if run against a pre-existing workspace, but when the tree is set up by another schematic, as in the spec file, that's when the error is thrown.
## 🌍 Your Environment
Angular CLI: 8.3.21
Node: 13.5.0
OS: darwin x64
Angular: undefined
...
Package Version
------------------------------------------------------
@angular-devkit/architect 0.803.21 (cli-only)
@angular-devkit/core 8.3.21
@angular-devkit/schematics 8.3.21
@schematics/angular 8.3.21
@schematics/update 0.803.21 (cli-only)
rxjs 6.5.4
typescript 3.5.3
Guía de contribución
Línea de trabajo
Empieza ejecutando la reproducción mínima de la especificación esquemática del issue, especialmente cuando el Tree es creado por otro Schematic. Después, inspecciona el comportamiento de Copy/Delete de Tree y la regla Move en @angular-devkit/schematics/src/rules. La tarea estará terminada cuando el caso de Copy-then-delete ya no produzca “This should never happen” y la regla Move ya no informe de ENOENT.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- angular, typescript
- Área
- tooling
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100