When you permanently destroy a specific project from the command line, the following
additional good things now happen:
- all direct milestones are removed too (since they cannot live alone, and they cannot be just "moved" to the parent project since their resulting sequence would have no sense)
- closing T15913: direct milestones are not orphan, broken, invisible anymore, do not become junk in the database anymore, do not cause project query overhead anymore
- all children projects emerge like cute bubbles by one level
- closing T15918: children projects are not orphan, broken, invisible anymore
- the parent project is eventually restored as "without sub-projects", so, joinable again
- closing T15697: the parent project has not bugged memberships anymore
This change will only affect future usages of the destroy workflow on a project (or root-project or sub-project), that is, this command line workflow:
./bin/remove destroy PHID-OF-YOUR-PROJECT-TO-BE-DESTROYED
Limitations
This change has nothing to do with the action "Archive" on projects (btw, archiving still works and it's still very recommended).
This change does not try to improve the destruction of a specific milestone (still not recommended because milestones are in sequence and more discussion is needed to improve this corner case of the destruction of a single very specific milestone, btw it works).
This change does not try to improve the destruction of a specific workboard (btw, a workboard does not really exist, it's just a flag in the project).
Example initial situation
Project A [projectDepth: 0] [hasSubprojects: 1] [members: *automatic*, foo, bar] > Project B [projectDepth: 1] [hasSubprojects: 1] [members: *automatic*, foo, bar] > Project C [hasSubprojects: 0] [projectDepth: 2] [members: foo, bar] > Milestone C.1 [projectDepth: 3]
Situation after destroying only project A:
Project B [projectDepth: 0] [hasSubprojects: 1] [members: *automatic*, foo, bar] > Project C [projectDepth: 1] [hasSubprojects: 0] [members: foo, bar] > Milestone C.1 [projectDepth: 2]
Situation after destroying only project B:
Project A [projectDepth: 0] [hasSubprojects: 1] [members: *automatic*, foo, bar] > Project C [projectDepth: 1] [hasSubprojects: 0] [members: foo, bar] > Milestone C.1 [projectDepth: 2]
Situation after destroying only project C:
Project A [projectDepth: 0] [hasSubprojects: 1] [members: *automatic*, foo, bar] > Project B [projectDepth: 1] [hasSubprojects: 0] [members: foo, bar]
Situation after destroying only milestone C.1:
Project A [projectDepth: 0] [hasSubprojects: 1] [members: *automatic*, foo, bar] > Project B [projectDepth: 1] [hasSubprojects: 1] [members: *automatic*, foo, bar] > Project C [hasSubprojects: 0] [projectDepth: 2] [members: foo, bar]