grit
grit copied to clipboard
Moving nodes
I'm not sure I clearly see how to move a node/subgraph. I was expecting a grit move <node-id> [-p ]<parent-node-id> or if the node is to be a root node: grit move -r <node-id>.
The idea is to unlink the child from its parent, then link another parent to it.
E.g., given the tree:
[ ] Task (26)
├──[ ] Subtask (27)
│ ├──[ ] Subsubtask (29)
│ └──[ ] Subsubtask (30)
└──[ ] Subtask (28)
└──[ ] Subsubtask (31)
To move 31 under 27, first remove the link between 28 and 31 (the direction is always from parent to child):
$ grit unlink 28 31
If 31 has no other parent, this will make it a root. This can be confirmed with grit stat 31, or grit ls which prints out a list of all roots by default.
Now we can link 27 to it:
$ grit link 27 31
$ grit
[ ] Task (26)
├──[ ] Subtask (27)
│ ├──[ ] Subsubtask (29)
│ ├──[ ] Subsubtask (30)
│ └──[ ] Subsubtask (31)
└──[ ] Subtask (28)
I suppose a move command could be useful as a shorthand for switching parents. However, the child may have more than one parent, so it would have to work with that.
Thank you! The UX is somewhat cumbersome, so being able to just make 27 in your example into a root node would be really great. I think the default behavior when sub-subtasks have multiple parents is to keep all parent refs, except the one you're currently modifying.
EDIT: After trying your instructions, I managed to loose nodes -- probably messing up ORIGIN and TARGETS for the link command. I am left with a sense of poor UX in that it was easily possible for me to loose nodes and modify the data structure to a useless state without any way of undoing my actions.
@ironhouzi I cannot understand how you manage to lose nodes.
If a node does not have any parent (with unlink), it becomes a root node.
Only rm/remove seems to be able to delete data.