Add series task branch flow

This commit is contained in:
mpabi
2026-04-29 02:46:19 +02:00
parent e179ed1549
commit 6204845304
7 changed files with 1029 additions and 223 deletions
+281 -55
View File
@@ -205,6 +205,16 @@ Komendy:
- `show-config`
- `list-series`
- `list-cards [series]`
- `series list`
- `series show SERIES`
- `series fetch SERIES [--dry-run]`
- `series cards list SERIES`
- `series cards show SERIES CARD`
- `series cards fetch SERIES CARD`
- `series cards submission SERIES CARD --class NAME`
- `series cards tasks list SERIES CARD`
- `series cards tasks show SERIES CARD TASK`
- `series cards tasks switch SERIES CARD TASK`
- `tokens scan`
- `tokens compare`
- `tokens read`
@@ -246,25 +256,247 @@ Przykład:
./rvctl show-config
```
## `list-series`
## `series list`
Listuje katalogi serii znalezione w `series_root`.
Listuje serie dostępne w źródłach i workspace. Komenda tworzy `series_root`,
jeżeli katalog jeszcze nie istnieje.
Każda linia ma format:
Format wyjścia:
```text
<series_id><TAB><liczba_kart><TAB><pełna_ścieżka>
<series_id><TAB><karty_w_źródłach><TAB><karty_w_workspace><TAB><workspace_path>
```
Przykład:
```bash
./rvctl series list
```
## `series show SERIES`
Pokazuje szczegóły jednej serii.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
Format wyjścia:
```text
series<TAB>...
source_path<TAB>...
workspace_path<TAB>...
cards_count<TAB>...
cards<TAB>...
```
## `series fetch SERIES`
Pobiera albo aktualizuje wszystkie karty z serii.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
Przełączniki:
- `--dry-run`
Pokazuje plan bez klonowania repo i bez zmian w token store.
Przykład:
```bash
./rvctl series fetch inf --dry-run
```
## `series cards list SERIES`
Listuje karty w wybranej serii.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
Format wyjścia:
```text
<card><TAB><repo><TAB><source|workspace><TAB><tytuł_z_README>
```
Przykład:
```bash
./rvctl series cards list inf
```
## `series cards show SERIES CARD`
Pokazuje szczegóły jednej karty.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
- `CARD`
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
Format wyjścia:
```text
series<TAB>...
card<TAB>...
repo<TAB>...
source_path<TAB>...
workspace_path<TAB>...
source_remote<TAB>...
source_url<TAB>...
answer_remote<TAB>...
answer_url<TAB>...
tasks<TAB>...
```
## `series cards fetch SERIES CARD`
Pobiera kartę z repo źródłowego do `series_root`. `CARD` może być pełną nazwą
repo albo unikalnym fragmentem, na przykład `bss`.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
- `CARD`
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
Przełączniki:
- `--dry-run`
Pokazuje plan bez klonowania repo, bez zapisu tokena `r1a` i bez ustawiania
remota odpowiedzi.
```bash
./rvctl series cards fetch inf bss
```
Po pobraniu komenda ustawia:
- `r1` na repo źródłowe w `edu-inf`
- `r1a` na repo pracy w `c2025-1a-inf`
`r1a` jest tworzony z tokena `r1` i wskazuje na repo o tej samej nazwie co
karta.
## `series cards submission SERIES CARD`
Alias funkcjonalny dla `submission`, ale z jawnym namespace kart.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
- `CARD`
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
Przełączniki:
- `--class NAME`
Id klasy albo grupy.
- `--nick NAME`
Nick ucznia. Jeżeli go nie podasz, `rvctl` bierze użytkownika ze store
tokenów.
- `--task TASK`
Zadanie używane do zbudowania domyślnej nazwy brancha. Domyślnie
`defaults.task` z `workspace.json`.
- `--branch NAME`
Nadpisuje nazwę brancha odpowiedzi. Bez tego branch ma format
`<login>T<numer_zadania>a`, na przykład `u1T1a`.
- `--date YYYY-MM-DD`
Data zajęć widoczna w planie.
- `--source-url URL`
Nadpisuje URL repo źródłowego.
- `--apply`
Zapisuje remotes `r1` i `r1a` w repo karty.
Przykład:
```bash
./rvctl series cards submission inf bss --class c2025-1a-inf --apply
```
## `series cards tasks list SERIES CARD`
Listuje zadania z `src/tasks` pobranej karty.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
- `CARD`
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
```bash
./rvctl series cards tasks list inf bss
```
## `series cards tasks show SERIES CARD TASK`
Pokazuje szczegóły jednego zadania.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
- `CARD`
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
- `TASK`
Pełna nazwa zadania albo unikalny fragment, na przykład `task1`.
```bash
./rvctl series cards tasks show inf bss task1
```
## `series cards tasks switch SERIES CARD TASK`
Tworzy albo przełącza lokalny branch pracy dla zadania.
Argumenty:
- `SERIES`
Id serii, na przykład `inf`.
- `CARD`
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
- `TASK`
Pełna nazwa zadania albo unikalny fragment, na przykład `task4` albo `4`.
Przełączniki:
- `--branch NAME`
Nadpisuje automatyczną nazwę brancha.
- `--dry-run`
Pokazuje plan bez przełączania brancha.
Domyślna nazwa brancha powstaje z użytkownika w `tokens.json`, numeru zadania i
końcówki `a`. Dla użytkownika `u1` i zadania `task4_stack_strlen` będzie to
`u1T4a`.
```bash
./rvctl series cards tasks switch inf bss 4
```
## `list-series`
Alias kompatybilności dla `series list`.
```bash
./rvctl list-series
```
## `list-cards [series]`
Listuje karty z wybranej serii.
Alias kompatybilności dla `series cards list SERIES`.
Argumenty:
@@ -272,18 +504,6 @@ Argumenty:
Opcjonalne id serii, na przykład `inf`.
Jeśli go brak, brana jest domyślna seria z `workspace.json`.
Format wyjścia:
```text
<card_no><TAB><tytuł_z_README><TAB><pełna_ścieżka>
```
Jeśli `README.md` nie ma nagłówka `#`, skrypt wypisuje:
```text
<card_no><TAB><pełna_ścieżka>
```
Przykłady:
```bash
@@ -317,7 +537,7 @@ Przykład:
```bash
./rvctl tokens scan
./rvctl tokens scan --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens scan --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
```
## `tokens compare`
@@ -358,7 +578,7 @@ Przykład:
```bash
./rvctl tokens compare
./rvctl tokens compare --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens compare --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
```
## `tokens list store|remote|both`
@@ -466,7 +686,7 @@ Przełączniki:
Przykład:
```bash
./rvctl tokens sync store r1 --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens sync store r1 --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
```
## `tokens remove store|remote|both REMOTE_ID`
@@ -491,7 +711,7 @@ Przykłady:
./rvctl tokens remove store r1
./rvctl tokens remove remote r1
./rvctl tokens remove both r1
./rvctl tokens remove remote r1 --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens remove remote r1 --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
```
## `tokens read`
@@ -559,7 +779,7 @@ in_sync<TAB>1
Przykład:
```bash
./rvctl tokens stats --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens stats --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
```
## `tokens write`
@@ -588,7 +808,7 @@ Przełączniki:
Przykład:
```bash
./rvctl tokens write --repo ~/dev/workspace/rv/series/inf/03 --remote r1 --server http://77.90.8.171:3001
./rvctl tokens write --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack --remote r1 --server http://77.90.8.171:3001
```
## `tokens update REMOTE_ID`
@@ -639,8 +859,8 @@ Przełączniki:
Przykłady:
```bash
./rvctl tokens update --from remotes --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens update --from store --repo ~/dev/workspace/rv/series/inf/03 --remote r1 --server http://77.90.8.171:3001
./rvctl tokens update --from remotes --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
./rvctl tokens update --from store --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack --remote r1 --server http://77.90.8.171:3001
```
## `submission [series] [card]`
@@ -648,65 +868,71 @@ Przykłady:
Wylicza przepływ oddawania rozwiązań:
- `r1` jako repo z materiałem z `edu-inf`
- `a1` jako repo odpowiedzi w `zsl-inf`
- branch ucznia na podstawie jego nicku
- `r1a` jako repo odpowiedzi w `c2025-1a-inf`
- branch ucznia liczony ze store tokenów i zadania
Nazwa repo odpowiedzi jest budowana z nazwy repo źródłowego z `edu-inf`, klasy
i daty:
Nazwa repo odpowiedzi jest taka sama jak nazwa repo źródłowego karty:
```text
<repo_z_edu-inf>-<klasa>-<data>
<repo_z_edu-inf>
```
Przykład:
```text
lab-rv32i-strlen-bss-data-stack-4i-2026-04-26
lab-rv32i-strlen-bss-data-stack
```
Argumenty pozycyjne:
- `series`
Id serii albo pełny selector, na przykład `inf` albo `inf/03`.
Id serii albo pełny selector, na przykład `inf` albo `inf/bss`.
- `card`
Numer karty, na przykład `03`.
Karta albo unikalny fragment nazwy repo, na przykład `bss`.
Przełączniki:
- `--class NAME`
Id klasy, na przykład `4i`.
Id klasy albo grupy, na przykład `c2025-1a-inf`.
- `--nick NAME`
Nick ucznia. Domyślnie z niego powstaje nazwa brancha.
Nick ucznia. Jeżeli go nie podasz, `rvctl` bierze użytkownika ze store
tokenów.
- `--task TASK`
Zadanie używane do zbudowania domyślnej nazwy brancha. Domyślnie
`defaults.task` z `workspace.json`.
- `--branch NAME`
Nadpisuje domyślną nazwę brancha.
Nadpisuje domyślną nazwę brancha. Bez tego branch ma format
`<login>T<numer_zadania>a`, na przykład `u1T1a`.
- `--date YYYY-MM-DD`
Data zajęć używana w nazwie repo odpowiedzi. Domyślnie dzisiejsza.
Data zajęć. Zostaje w raporcie, ale nie zmienia nazwy repo odpowiedzi.
- `--source-url URL`
Nadpisuje URL repo źródłowego. Bez tego launcher czyta `origin` z repo karty.
Nadpisuje URL repo źródłowego. Bez tego launcher czyta `r1` albo `origin` z
repo karty.
- `--apply`
Dodaje albo aktualizuje remote `r1` i `a1` w repo karty.
Dodaje albo aktualizuje remote `r1` i `r1a` w repo karty.
Typowy format wyjścia:
```text
selector<TAB>inf/03
selector<TAB>inf/bss
card_path<TAB>...
source_repo<TAB>edu-inf/lab-rv32i-strlen-bss-data-stack
source_remote<TAB>r1
source_url<TAB>http://77.90.8.171:3001/edu-inf/lab-rv32i-strlen-bss-data-stack.git
source_branch<TAB>deploy
answer_remote<TAB>a1
answer_repo<TAB>zsl-inf/lab-rv32i-strlen-bss-data-stack-4i-2026-04-26
answer_url<TAB>http://77.90.8.171:3001/zsl-inf/lab-rv32i-strlen-bss-data-stack-4i-2026-04-26.git
student_branch<TAB>u1
answer_remote<TAB>r1a
answer_repo<TAB>c2025-1a-inf/lab-rv32i-strlen-bss-data-stack
answer_url<TAB>http://77.90.8.171:3001/c2025-1a-inf/lab-rv32i-strlen-bss-data-stack.git
student_user<TAB>u1
student_branch<TAB>u1T1a
```
Przykłady:
```bash
./rvctl submission inf 03 --class 4i --nick u1
./rvctl submission inf 03 --class 4i --nick u1 --apply
./rvctl submission inf/03 --class 4i --nick u2 --date 2026-04-26
./rvctl submission inf bss --class c2025-1a-inf
./rvctl submission inf bss --class c2025-1a-inf --task 4 --apply
./rvctl series cards submission inf bss --class c2025-1a-inf --branch u1T4a
```
## `tmux-container [series] [card]`
@@ -716,9 +942,9 @@ Tworzy nową sesję `tmux` i uruchamia kontener w `pane 0`.
Argumenty pozycyjne:
- `series`
Id serii albo pełny selector, na przykład `inf` albo `inf/03`.
Id serii albo pełny selector, na przykład `inf` albo `inf/bss`.
- `card`
Numer karty, na przykład `03`.
Karta albo unikalny fragment nazwy repo, na przykład `bss`.
Przełączniki:
@@ -735,16 +961,16 @@ Przełączniki:
Reguły wyboru karty:
- `tmux-container inf 03` -> seria `inf`, karta `03`
- `tmux-container inf/03` -> pełny selector
- `tmux-container 03` -> domyślna seria + karta `03`
- `tmux-container inf bss` -> seria `inf`, karta `bss`
- `tmux-container inf/bss` -> pełny selector
- `tmux-container bss` -> domyślna seria + karta `bss`
- `tmux-container inf` -> seria `inf` + domyślna karta
- bez argumentów -> domyślna seria i domyślna karta
Przykłady:
```bash
./rvctl tmux-container 03 --dry-run
./rvctl tmux-container inf 03 --session rv-inf03
./rvctl tmux-container inf/03 --attach
./rvctl tmux-container bss --dry-run
./rvctl tmux-container inf bss --session rv-inf-bss
./rvctl tmux-container inf/bss --attach
```