From fbf1fb1daaa9b66414697ad3ab4949464d4403df Mon Sep 17 00:00:00 2001 From: mpabi Date: Sun, 26 Apr 2026 12:35:09 +0200 Subject: [PATCH] Separate source repos from workspace clones --- README.md | 34 +++++++++++++++++++++++++++++++--- doc/workspace.md | 40 ++++++++++++++++++++++++++++++++-------- workspace.json | 6 ++++-- workspace.py | 10 +++++++++- 4 files changed, 76 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e4d452b..4f227b5 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,41 @@ Launcher do workspace `rv`. -- `workspace.json` trzyma sciezki workspace i tools +- `workspace.json` trzyma sciezki repo oryginalnych, workspace i tools - `workspace.py` listuje serie i karty - szczegolowy opis przelacznikow skryptu jest w `doc/workspace.md` - model tokenow i synchronizacji repo <-> store jest w `doc/tokens.md` +## Model katalogow + +Repo oryginalne trzymamy poza workspace: + +```bash +~/dev/rv/repos +``` + +Workspace sluzy do klonow roboczych i cwiczen: + +```bash +~/dev/workspace/rv +``` + +Typowy uklad: + +```text +~/dev/rv/repos/rv-launcher +~/dev/rv/repos/rv32i-hazard3-env +~/dev/workspace/rv/tools/rv-launcher +~/dev/workspace/rv/tools/rv32i-hazard3-env +~/dev/workspace/rv/series// +``` + +Launcher szuka `rv32i-hazard3-env` najpierw w workspace, a jesli nie znajdzie +klona roboczego, moze uzyc repo oryginalnego z `~/dev/rv/repos`. + ## Przygotowanie katalogu -Docelowy katalog: +Repo treningowe launchera trzymaj pod: ```bash ~/dev/workspace/rv/tools/rv-launcher @@ -188,7 +215,8 @@ student_branch u1 ## Wariant alternatywny: `git clone` -Jesli celem nie jest cwiczenie `remote add` i `fetch`, mozna tez uzyc: +Jesli celem nie jest cwiczenie `remote add` i `fetch`, repo treningowe mozna +tez sklonowac klasycznie: ```bash mkdir -p ~/dev/workspace/rv/tools diff --git a/doc/workspace.md b/doc/workspace.md index d0dd85c..303a96e 100644 --- a/doc/workspace.md +++ b/doc/workspace.md @@ -2,15 +2,44 @@ Plik opisuje przelaczniki i liste komend skryptu `workspace.py`. +## Model katalogow + +Repo oryginalne trzymamy poza workspace: + +```bash +~/dev/rv/repos +``` + +Workspace sluzy do klonow roboczych i cwiczen: + +```bash +~/dev/workspace/rv +``` + +Typowy uklad: + +```text +~/dev/rv/repos/rv-launcher +~/dev/rv/repos/rv32i-hazard3-env +~/dev/workspace/rv/tools/rv-launcher +~/dev/workspace/rv/tools/rv32i-hazard3-env +~/dev/workspace/rv/series// +``` + +`workspace.py` czyta karty z `series_root` w workspace. Tool repo +`rv32i-hazard3-env` wybiera najpierw z workspace, a potem z fallbacku +`~/dev/rv/repos` lub `~/dev/rv/tools`, jesli taki klon roboczy jeszcze nie +istnieje. + ## Pobranie repo i przelaczenie galezi -Jesli trzymasz tool repo pod: +Repo treningowe launchera trzymaj pod: ```bash ~/dev/workspace/rv/tools/rv-launcher ``` -to podstawowy bootstrap wyglada tak: +Podstawowy bootstrap wyglada tak: ```bash mkdir -p ~/dev/workspace/rv/tools @@ -19,12 +48,6 @@ git clone http://77.90.8.171:3001/edu-tools/rv-launcher.git cd rv-launcher ``` -Jesli w Twoim workspace narzedzia sa poza `rv/`, analogiczny katalog to: - -```bash -~/dev/workspace/tools/rv-launcher -``` - ### Autoryzacja Masz dwie drogi. @@ -155,6 +178,7 @@ Typowy format: ```text config_path... +original_root... workspace_root... series_root... socket_root... diff --git a/workspace.json b/workspace.json index 6143e86..dcc8dd3 100644 --- a/workspace.json +++ b/workspace.json @@ -1,12 +1,14 @@ { "version": 1, + "original_root": "~/dev/rv/repos", "workspace_root": "~/dev/workspace/rv", "series_root": "~/dev/workspace/rv/series", "socket_root": "~/dev/workspace/rv/sockets", "token_file": "~/dev/workspace/rv/tokens/tokens.json", "tools_root_candidates": [ - "~/dev/workspace/tools/rv32i-hazard3-env", - "~/dev/workspace/rv/tools/rv32i-hazard3-env" + "~/dev/workspace/rv/tools/rv32i-hazard3-env", + "~/dev/rv/repos/rv32i-hazard3-env", + "~/dev/rv/tools/rv32i-hazard3-env" ], "git": { "base_url": "http://77.90.8.171:3001", diff --git a/workspace.py b/workspace.py index a6d5400..9ec19eb 100755 --- a/workspace.py +++ b/workspace.py @@ -36,6 +36,7 @@ class GitConfig: @dataclass class WorkspaceConfig: config_path: Path + original_root: Path workspace_root: Path series_root: Path socket_root: Path @@ -50,6 +51,7 @@ def load_config(config_path: Path) -> WorkspaceConfig: raw = json.loads(config_path.read_text(encoding="utf-8")) base_dir = config_path.parent + original_root = expand_path(raw.get("original_root", "~/dev/rv/repos"), base_dir) workspace_root = expand_path(raw.get("workspace_root", "~/dev/workspace/rv"), base_dir) series_root = expand_path(raw.get("series_root", str(workspace_root / "series")), base_dir) socket_root = expand_path(raw.get("socket_root", str(workspace_root / "sockets")), base_dir) @@ -57,7 +59,11 @@ def load_config(config_path: Path) -> WorkspaceConfig: candidate_values = raw.get("tools_root_candidates") if not candidate_values: - candidate_values = [raw.get("tools_root", "~/dev/workspace/tools/rv32i-hazard3-env")] + candidate_values = [ + raw.get("tools_root", str(workspace_root / "tools" / "rv32i-hazard3-env")), + str(original_root / "rv32i-hazard3-env"), + "~/dev/rv/tools/rv32i-hazard3-env", + ] tools_root_candidates = [expand_path(value, base_dir) for value in candidate_values] tools_root = next((path for path in tools_root_candidates if path.exists()), tools_root_candidates[0]) @@ -75,6 +81,7 @@ def load_config(config_path: Path) -> WorkspaceConfig: return WorkspaceConfig( config_path=config_path, + original_root=original_root, workspace_root=workspace_root, series_root=series_root, socket_root=socket_root, @@ -998,6 +1005,7 @@ def run_tmux_container(config: WorkspaceConfig, args: argparse.Namespace) -> Non def print_config(config: WorkspaceConfig) -> None: print(f"config_path\t{config.config_path}") + print(f"original_root\t{config.original_root}") print(f"workspace_root\t{config.workspace_root}") print(f"series_root\t{config.series_root}") print(f"socket_root\t{config.socket_root}")