-
Notifications
You must be signed in to change notification settings - Fork 384
Closed
Labels
Description
I.e. instead of just inv --list spitting out the current default flat list, allow things like inv --list nested for a nested/indented display, inv --list=foo to just list the tasks within namespace foo, etc ad infinitum.
LATER EDITS: so a lot of strongly related tickets have popped up and there seem to be two major currents:
- Formatting, i.e. flat with dots vs nested vs machine-readable
- Content, i.e. all tasks vs just namespaces vs just tasks within a given namespace
Seems unwise/impossible to shoehorn all of that under a single optional value to --list so I'm sure we'll grow some additional flags either way, with the main question being which (if any) such option deserves to live as the optional --listvalue.
Brainstorm:
- Format could be a single flag with string option, e.g.
--list-format (flat|nested|machine)(what term do other tools use for "machine-readable" anyways? Can't remember offhand...LATER EDIT: actually these days we often just use JSON for that and just call it eg--list-format=json) or it could be a handful of booleans like--list-nested,--list-machine.- Former feels easier to implement, harder to fuck up by giving >1 at a time, and easier for users to grasp (i.e. fewer options to think about) so it seems like a no-brainer.
- Content needs levers for 'root' (though this needs to not clash with the related-but-distinct
--rootflag which changes where tasks files are sought from; but perhaps we should be, well, namespacing those as well so they are renamed to eg--discovery-root) and 'depth` and I think that's it, since those together can enable just about anything:- "Show me everything": root is the top of the namespace, depth is None
- "Show me just the namespaces": root is top of namespace, depth is 1
- "Show me just tasks under namespace foo"
- Might actually need another lever for the confluence of those two, i.e. "I am listing some subset of tasks and I want to tweak whether they are shown as full paths or sub-paths"?
- Though at this point I wonder if users who want a non-full-path display (i.e.
inv --namespace foo --listspitting out task names likebarandbazinstead offoo.barandfoo.baz) should be relying on "each Python module can be its own standalone namespace" and doing things likeinv --collection=namespace --list"instead (see Collection loading.)- Since, if one truly wants to 'focus' on a given sub-namespace, giving it to
--collectionautomatically ensures that everything - display, invocation, etc - instantly works as you'd expect.
- Since, if one truly wants to 'focus' on a given sub-namespace, giving it to
- The main argument I can think of why one would not want to go that route is if one wanted to do nontrivial slice n dice of namespace contents within the root tasks file (such that the namespace does not reflect Python module or package structure.)
- However it's not necessarily out of the running, we could either implement things to be depth-aware and default to stripping out parent levels on display/invocation – or (probably better) just make it possible to say "hey I know you loaded my root tasks namespace, but I'd like you to act as if I gave you
foo.baras an argument to--collection- even though, between you and me,foo.barisn't visible on the Python import paths." - Rereading this later, my gut says "ugh we're making this too complex, just add another flag if people REALLY want to see non-full paths for some stupid reason". And besides, what happened to the 'nested' idea? That's another way to show the 'short' names while clearly presenting depth/parentage.
- Though at this point I wonder if users who want a non-full-path display (i.e.
- Minor quirk: do we bother showing the root namespace when we are being asked to "show me the namespaces"? I'm leaning towards no, but might be nice to be explicit...? e.g. "your namespaces are:
(root),fooandbar"