Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5500800
feat: add graph model functions
superhellth Sep 18, 2026
c8cfb93
feat: add status model functions
superhellth Sep 18, 2026
6f5ccdf
feat: add tree and focus rendering
superhellth Sep 18, 2026
6a0e67d
feat: add doit status command
superhellth Sep 18, 2026
f4fd7cc
docs: document doit status, drop prototype script
superhellth Sep 18, 2026
38046b5
feat: show each task once, note extra parents inline
superhellth Sep 18, 2026
6818653
feat: add interactive curses navigator (-i)
superhellth Sep 18, 2026
91b7bd4
feat: -i starts at first root instead of virtual pipeline node
superhellth Sep 18, 2026
47d7aa0
feat: require TASK with -i
superhellth Sep 18, 2026
c776ab9
fix: match error message style of info
superhellth Sep 18, 2026
7f2613f
feat: focus view shows parents, focus, children like -i
superhellth Sep 18, 2026
ac94698
refactor: TASK view prints the -i screen once (shared frame_lines)
superhellth Sep 18, 2026
b27b221
refactor: one build_frame layout for -i screen and static TASK output
superhellth Sep 18, 2026
cbebf08
feat: -i: focus column selectable and selected by default; footer fol…
superhellth Sep 18, 2026
ba4836e
refactor: replace curses with ANSI drawing and msvcrt/termios key input
superhellth Sep 18, 2026
2f2792b
feat: -i: order arrow hint left, up, down, right
superhellth Sep 18, 2026
cf8d423
feat: -i: drop up/down from key hint
superhellth Sep 18, 2026
02033ad
feat: -i: without TASK, list all tasks in the focus column
superhellth Sep 18, 2026
2e271f4
feat: make non-interactive, no task param given case match other cases
superhellth Sep 18, 2026
ab98f6a
feat: add scrolling behaviour to task columns
superhellth Sep 19, 2026
436aacb
feat: live update parents and children
superhellth Sep 19, 2026
00d39da
refactor: clean up tests and imports
superhellth Sep 19, 2026
f7c132b
feat: change error message to fit doit info style
superhellth Sep 19, 2026
c17c042
feat: display whether or not reason is toggled
superhellth Sep 19, 2026
eeea9d6
feat: display reasons for possibly stale tasks
superhellth Sep 19, 2026
4dab4aa
refactor: remove unused import
superhellth Sep 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ Changes
0.38.0 (*unreleased*)
======================

- Add ``doit status`` command: read-only task graph with up-to-date status.


0.37.0 (*2026-02-09*)
Expand Down
89 changes: 89 additions & 0 deletions doc/cmd-other.rst
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,95 @@ Note the ``!!``, it means that task was ignored. To reverse the `ignore` use



.. _cmd-status:

status (task graph)
-------------------

*status* shows the task dependency graph with the up-to-date status of every
task. It never executes tasks and never saves any state, so it is safe to run
while a pipeline is being developed.

The screen has three columns: the left column (*parents*) lists the tasks the
focus task depends on, the middle column (*tasks*) lists all tasks, the right
column (*children*) lists the tasks that depend on the focus task. Each column
shows at most 9 tasks at once: a window around the focus task (in the
interactive navigator: around the cursor), cut off at the start and the end of
the list. A row ``↓ N more`` / ``↑ N more`` tells how many tasks are hidden
below / above (``v`` and ``^`` in ASCII). The focus task is shown in brackets.
Below the columns come the status and the reasons of the focus task.

.. code-block:: console

$ doit status build
parents tasks children
● fetch [● build] ● report
● fetch
● report
───────────────────────────────────────
build run
* input produced by task fetch

Exactly one ``TASK`` is required, except with *-i*. In the interactive
navigator without ``TASK`` no task is focused: the first 9 tasks are listed,
the parents and children columns are empty and there is no status footer.

== ===============================================================
✓ up-to-date
● will run
~ up-to-date itself, but an input file is produced by a task that will run
! error, for example an input file that no task produces
- ignored
? unknown: task is created at run time (``create_after``)
== ===============================================================

For a ``~`` task the reasons name the parents that make it stale, with their
status, for example ``input produced by task fetch (may-rerun)``.

Options must be given before ``TASK``:

* ``TASK``: exactly one task must be given. Its screen is printed: the screen
of the interactive navigator (*-i*), printed once with the same layout code,
the columns use a third of the terminal width.
* *-p*/*--private*: also show tasks that start with an underscore.
* *--all*: show sub-tasks as separate tasks. By default a group task shows the
worst status of its sub-tasks.
* *-i*/*--interactive*: browse the graph in a full-screen navigator (see
below). Starts at ``TASK``, or with no task focused when no ``TASK`` is
given.

Interactive mode
^^^^^^^^^^^^^^^^

The layout is the one described above: the parents of the focus task on the
left, all tasks in the middle, its children on the right. The cursor can be in
any column and starts on the focus task. A footer shows the status and the
reasons of the task under the cursor. The navigator starts at ``TASK``.
While the cursor is in the middle column, the focus follows it, so parents and
children update live. Without ``TASK`` the focus is set by the first ↑ or ↓.

========= ==========================================
← → move the cursor one column left / right
↑ ↓ move the cursor inside the column
Enter make the task under the cursor the focus (cursor returns to it)
r show / hide reasons
R reload the statuses
q quit
========= ==========================================

Statuses are computed once and the dependency DB file is closed (without saving)
while you navigate, so a ``doit run`` in another terminal is not blocked. ``R``
reads the DB again. Interactive mode needs a terminal for input and output. It draws
with ANSI escape sequences (Windows 10 or later); no extra package is needed.

Like ``doit list --status`` and ``doit info``, *status* evaluates ``uptodate``
entries of tasks (callables run, strings run as shell commands). File
dependencies computed by a ``calc_dep`` task are not part of the graph. Output
uses color when writing to a terminal (disabled by ``NO_COLOR``), and ASCII
symbols when the terminal encoding can not show the default ones.



.. _cmd-auto:

auto (watch)
Expand Down
Loading