Фича: режим --my-tasks -- список открытых задач, назначенных на меня #71
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Суть
Второй режим работы утилиты: список открытых задач, назначенных на текущего пользователя, отсортированный по срочности. Существующий режим (отчёт по затраченному времени) не меняется.
Зачем: утренний обзор "что мне делать" без открытия веб-интерфейса Redmine, сразу с приоритетами и горящими сроками версий.
Вызов и совместимость
--user-id,--user-login,--user-name(посмотреть чужой список), а также--url,--api-key,--config.--date,--output,--compact,--summary,--by-activity,--no-time,--commit,--send) -- явная ошибка с сообщением, по образцу валидации--init-config(cli.py:355-375).Пайплайн
Config.validate()-- без изменений._get_current_user_id()(client.py) по умолчанию или_resolve_user_id()при заданном флаге.redmine.issue.filter(assigned_to_id=<uid>, status_id='open')-- по всем проектам.fixed_version.idиз результата -> дозагрузкаdue_dateэтих версий (обычно их единицы). В выдаче списка задачfixed_versionсодержит только{id, name}, без срока. Недоступная версия не валит вывод: срок пустой, сортируется как задача без срока.Сортировка
Ключ: (ранг приоритета, срок версии, id).
due_dateверсии по возрастанию; задачи без версии или в версии без срока -- в конец своей приоритетной группы.idпо возрастанию -- стабильный tie-break.Саммари
Одна строка в stderr над таблицей (служебное -- в stderr, таблица -- в stdout: pipes-friendly,
--my-tasks | grepдаёт чистую таблицу):fixed_version; без срока -- версия есть,due_dateпуст.spent_hours(поле приходит всегда).estimated_hours; в этом Redmine оценки ставят не везде, поэтому с пометкой покрытия(по N из M). Если оценок нет совсем -- кусок опускается.Таблица
Колонки:
ID | Тема | Статус | Приор. | Версия | Срок.<redmine_url>/issues/<id>: в современных терминалах номер кликабелен, без поддержки остаётся просто номер. Ссылка только на номер, tablefmt простой -- tabulate не ANSI-aware, fancy-рамки съедут.STATUS_TRANSLATION(report_builder.py) + YAML-переопределения.2026-11-27); просроченный помечается(!)в конце.Открытых задач нет, exit 0.Пример (данные синтетические):
Принятые решения
--init-config(ответвление до отчётного пайплайна), без перехода на подкоманды.--compactв этом режиме не поддерживается (только таблица).:g(21.5h);done_ratioв саммари не используется (псевдоточная метрика).Тесты (TDD)
issue.filterсassigned_to_id/status_id, дозагрузкаdue_dateуникальных версий, недоступная версия (моки Redmine).Дополнение (санкционировано владельцем): задачи в версии с именем "Wishlist" исключаются из списка --my-tasks целиком (строки и саммари); задачи без версии и задачи в обычных версиях без срока остаются. Причина: Wishlist -- постоянный бакет без срока (мусорный фон).