diff --git a/lib/ai/mcp/rhai/logic/prompts/example_script.md b/lib/ai/mcp/rhai/logic/prompts/example_script.md index 777fe75a..e67422ba 100644 --- a/lib/ai/mcp/rhai/logic/prompts/example_script.md +++ b/lib/ai/mcp/rhai/logic/prompts/example_script.md @@ -22,7 +22,7 @@ if repos.len() > 0 { if repo_array.len() > 0 { let repo = repo_array[0]; - print("\nRepository path: " + get_repo_path(repo)); + print("\nRepository path: " + path(repo)); // Check if the repository has changes let has_changes = has_changes(repo); diff --git a/lib/core/herocmds/git.v b/lib/core/herocmds/git.v index 21a460a9..3990487b 100644 --- a/lib/core/herocmds/git.v +++ b/lib/core/herocmds/git.v @@ -208,11 +208,7 @@ fn cmd_git_execute(cmd Command) ! { coderoot = os.environ()['CODEROOT'] } - mut gs := gittools.get(coderoot: coderoot)! - if coderoot.len > 0 { - // is a hack for now - gs = gittools.new(coderoot: coderoot)! - } + mut gs := gittools.new(coderoot: coderoot)! // create the filter for doing group actions, or action on 1 repo mut filter := cmd.flags.get_string('filter') or { '' } diff --git a/lib/core/herocmds/playbook_lib.v b/lib/core/herocmds/playbook_lib.v index 4d4fe63c..90f03c2c 100644 --- a/lib/core/herocmds/playbook_lib.v +++ b/lib/core/herocmds/playbook_lib.v @@ -125,7 +125,7 @@ pub fn plbook_code_get(cmd Command) !string { pull := cmd.flags.get_bool('gitpull') or { false } // interactive := !cmd.flags.get_bool('script') or { false } - mut gs := gittools.get(coderoot: coderoot)! + mut gs := gittools.new(coderoot: coderoot)! if url.len > 0 { mut repo := gs.get_repo( pull: pull diff --git a/lib/core/herocmds/tofix.md b/lib/core/herocmds/tofix.md index 8bb58eaf..008ec5a6 100644 --- a/lib/core/herocmds/tofix.md +++ b/lib/core/herocmds/tofix.md @@ -48,8 +48,8 @@ play_docusaurus.play(mut plbook)! // <-- new line, optional | Problem | What to do | |---|---| -| **Wrong API name** – the code uses **`gittools.get(gittools.GitStructureArgGet{})`** – there is no `GitStructureArgGet` struct in the git‑tools package. The correct type is **`gittools.GitStructureArgs`** (or the default `gittools.GitStructure` argument). | Replace `GitStructureArgGet` with the correct type (`gittools.GitStructureArgs`). | -| **Missing import alias** – the file uses `gittools.get` and `gittools.new` but the import is just `import freeflowuniverse.herolib.develop.gittools`. That is fine, but for clarity rename the import to **`gittools`** (it already is) and use the same alias everywhere. | +| **Wrong API name** – the code uses **`gittools.new(gittools.GitStructureArgGet{})`** – there is no `GitStructureArgGet` struct in the git‑tools package. The correct type is **`gittools.GitStructureArgs`** (or the default `gittools.GitStructure` argument). | Replace `GitStructureArgGet` with the correct type (`gittools.GitStructureArgs`). | +| **Missing import alias** – the file uses `gittools.new` and `gittools.new` but the import is just `import freeflowuniverse.herolib.develop.gittools`. That is fine, but for clarity rename the import to **`gittools`** (it already is) and use the same alias everywhere. | | **Potential nil `gs`** – after a `git.clone` we do `gs = gittools.new(coderoot: coderoot)!`. This shadows the previous `gs` and loses the original configuration (e.g. `light`, `log`). The intent is to **re‑initialise** the `GitStructure` **only** when a `coderoot` is explicitly given. Keep the current flow but **document** the intention. | | **Unused variable `action_`** – the variable `action_` is used only for iteration. No problem. | | **Missing `gittools.GitCloneArgs`** – check that the struct is actually named `GitCloneArgs` in the git‑tools package. If not, change to the proper name. | Verify and, if needed, replace with the correct struct name (`gittools.GitCloneArgs`). | @@ -82,7 +82,7 @@ fn play_git(mut plbook PlayBook) ! { // ... (same as before) } else { // Default GitStructure (no args) - gittools.get(gittools.GitStructureArgs{})! + gittools.new(gittools.GitStructureArgs{})! } // ----------------------------------------------------------- diff --git a/lib/core/playcmds/play_core.v b/lib/core/playcmds/play_core.v index 89d0ed1d..a164af69 100644 --- a/lib/core/playcmds/play_core.v +++ b/lib/core/playcmds/play_core.v @@ -27,12 +27,13 @@ fn play_core(mut plbook PlayBook) ! { mut playrunpath := action.params.get_default('path', '')! if playrunpath.len == 0 { action.name = 'pull' - playrunpath = gittools.get_repo_path( + mypath:=gittools.path( path: playrunpath git_url: action.params.get_default('git_url', '')! git_reset: action.params.get_default_false('git_reset') git_pull: action.params.get_default_false('git_pull') )! + playrunpath = mypath.path } if playrunpath.len == 0 { return error("can't run a heroscript didn't find url or path.") diff --git a/lib/core/playcmds/play_git.v b/lib/core/playcmds/play_git.v index 7838471f..5ce04d89 100644 --- a/lib/core/playcmds/play_git.v +++ b/lib/core/playcmds/play_git.v @@ -11,11 +11,11 @@ import freeflowuniverse.herolib.ui.console // For verbose error reporting // --------------------------------------------------------------- fn play_git(mut plbook PlayBook) ! { - // ----------------------------------------------------------- - // !!git.define – configure the GitStructure - // ----------------------------------------------------------- + + mut gs:=gittools.new()! + define_actions := plbook.find(filter: 'git.define')! - mut gs := if define_actions.len > 0 { + if define_actions.len > 0 { mut p := define_actions[0].params coderoot := p.get_default('coderoot', '')! light := p.get_default_true('light') @@ -25,19 +25,19 @@ fn play_git(mut plbook PlayBook) ! { ssh_key_path := p.get_default('ssh_key_path', '')! reload := p.get_default_false('reload') - gittools.new( + gs=gittools.new( coderoot: coderoot - light: light log: log debug: debug offline: offline - ssh_key_path: ssh_key_path reload: reload )! - } else { - // Default GitStructure (no args) - gittools.get()! - } + + if light || ssh_key_path.len > 0 { + gs.config_set(light: light, ssh_key_path: ssh_key_path)! + } + + } // ----------------------------------------------------------- // !!git.clone – clone repositories diff --git a/lib/data/doctree/scan.v b/lib/data/doctree/scan.v index 6300dc9e..9c9bbec1 100644 --- a/lib/data/doctree/scan.v +++ b/lib/data/doctree/scan.v @@ -80,7 +80,7 @@ pub fn (mut tree Tree) scan(args TreeScannerArgs) ! { pub fn (mut tree Tree) scan_concurrent(args_ TreeScannerArgs) ! { mut args := args_ if args.git_url.len > 0 { - mut gs := gittools.get(coderoot: args.git_root)! + mut gs := gittools.new(coderoot: args.git_root)! mut repo := gs.get_repo( url: args.git_url pull: args.git_pull diff --git a/lib/develop/gittools/factory.v b/lib/develop/gittools/factory.v index 89538a47..78abcd82 100644 --- a/lib/develop/gittools/factory.v +++ b/lib/develop/gittools/factory.v @@ -1,7 +1,7 @@ module gittools import os -import json + import freeflowuniverse.herolib.core.pathlib import freeflowuniverse.herolib.ui.console @@ -9,37 +9,6 @@ __global ( gsinstances map[string]&GitStructure ) -@[params] -pub struct GetRepoArgs { -pub mut: - path string // if used will check if path exists if yes, just return - git_url string - git_pull bool - git_reset bool - git_root string -} - -// get_repo_path implements the GitUrlResolver interface -pub fn get_repo_path(args GetRepoArgs) !string { - if args.path!=""{ - if os.exists(args.path) { - return args.path - }else{ - if args.git_url == "" { - return error("can't resolve git repo path without url or existing path, ${args.path} does not exist.") - } - } - } - - mut gs := get(coderoot:args.git_root)! - mut repo := gs.get_repo( - url: args.git_url - pull: args.git_pull - reset: args.git_reset - )! - return repo.path() -} - pub fn reset() { gsinstances = map[string]&GitStructure{} // they key is the redis_key (hash of coderoot) } @@ -48,13 +17,10 @@ pub fn reset() { pub struct GitStructureArgsNew { pub mut: coderoot string - light bool = true // If true, clones only the last history for all branches (clone with only 1 level deep) log bool = true // If true, logs git commands/statements debug bool = true - ssh_key_name string // name of ssh key to be used when loading the gitstructure - ssh_key_path string reload bool - offline bool = false + offline bool } // Retrieve or create a new GitStructure instance with the given configuration. @@ -63,38 +29,6 @@ pub fn new(args_ GitStructureArgsNew) !&GitStructure { if args.coderoot == '' { args.coderoot = '${os.home_dir()}/code' } - mut cfg := GitStructureConfig{ - coderoot: args.coderoot - light: args.light - log: args.log - debug: args.debug - ssh_key_name: args.ssh_key_name - ssh_key_path: args.ssh_key_path - offline: args.offline - } - - return get(coderoot: args.coderoot, reload: args.reload, cfg: cfg) -} - -@[params] -pub struct GitStructureArgGet { -pub mut: - coderoot string - reload bool - cfg ?GitStructureConfig -} - -// Retrieve a GitStructure instance based on the given arguments. -pub fn get(args_ GitStructureArgGet) !&GitStructure { - mut args := args_ - if args.coderoot == '' { - args.coderoot = '${os.home_dir()}/code' - } - - // make sure coderoot exists - if !os.exists(args.coderoot) { - os.mkdir_all(args.coderoot)! - } rediskey_ := cache_key(args.coderoot) @@ -103,7 +37,6 @@ pub fn get(args_ GitStructureArgGet) !&GitStructure { mut gs := gsinstances[rediskey_] or { panic('Unexpected error: key not found in gsinstances') } - gs.load(false)! return gs }else{ console.print_header("Loading GitStructure for ${args.coderoot}.") @@ -113,32 +46,27 @@ pub fn get(args_ GitStructureArgGet) !&GitStructure { mut gs := GitStructure{ key: rediskey_ coderoot: pathlib.get_dir(path: args.coderoot, create: true)! + log: args.log + debug: args.debug + offline: args.offline } - mut cfg := args.cfg or { - mut cfg_ := GitStructureConfig{ - coderoot: 'SKIP' - } - cfg_ - } - - if cfg.coderoot != 'SKIP' { - gs.config_ = cfg - gs.config_save()! - // println(gs.config()!) + if 'OFFLINE' in os.environ() { + gs.offline = true } gs.config()! // will load the config, don't remove - gs.load(false)! - if gs.repos.keys().len == 0 || args.reload { gs.load(true)! + }else{ + gs.load(false)! } gsinstances[rediskey_] = &gs return gsinstances[rediskey_] or { panic('bug') } + } @[params] @@ -161,12 +89,19 @@ pub mut: // git_pull bool pub fn path(args_ GitPathGetArgs) !pathlib.Path { mut args := args_ - if args.path.trim_space() == '' && args.currentdir { - args.path = os.getwd() - } + + if args.path!=""{ + if os.exists(args.path) { + return pathlib.get(args.path) + }else{ + if args.git_url == "" { + return error("can't resolve git repo path without url or existing path, ${args.path} does not exist.") + } + } + } if args.git_url.len > 0 { - mut gs := get(coderoot: args.git_root)! + mut gs := new(coderoot: args.git_root)! mut repo := gs.get_repo( url: args.git_url pull: args.git_pull @@ -179,3 +114,4 @@ pub fn path(args_ GitPathGetArgs) !pathlib.Path { } return pathlib.get(args.path) } + diff --git a/lib/develop/gittools/gitstructure.v b/lib/develop/gittools/gitstructure.v index a818c862..1d09ec29 100644 --- a/lib/develop/gittools/gitstructure.v +++ b/lib/develop/gittools/gitstructure.v @@ -2,21 +2,9 @@ module gittools import crypto.md5 import freeflowuniverse.herolib.core.pathlib -import freeflowuniverse.herolib.core.redisclient import os -import freeflowuniverse.herolib.ui.console import json -pub struct GitStructureConfig { -pub mut: - coderoot string // just to be informative, its not used - light bool = true // If true, clones only the last history for all branches (clone with only 1 level deep) - log bool = true // If true, logs git commands/statements - debug bool = true - ssh_key_name string - ssh_key_path string - offline bool = false -} // GitStructure holds information about repositories within a specific code root. // This structure keeps track of loaded repositories, their configurations, and their status. @@ -28,6 +16,9 @@ pub mut: key string // Unique key representing the git structure (default is hash of $home/code). repos map[string]&GitRepo // Map of repositories coderoot pathlib.Path + log bool = true // If true, logs git commands/statements + debug bool = true + offline bool } ////////////////////////////////////////////////////////////////////////////////////// @@ -134,8 +125,7 @@ fn (mut gitstructure GitStructure) repo_init_from_path_(path string, params Repo // Initialize and return a GitRepo struct. mut r := GitRepo{ gs: &gitstructure - status_remote: GitRepoStatusRemote{} - status_local: GitRepoStatusLocal{} + status: GitStatus{} config: GitRepoConfig{} provider: gl.provider account: gl.account @@ -196,34 +186,3 @@ fn (mut self GitStructure) coderoot() !pathlib.Path { mut coderoot := pathlib.get_dir(path: self.coderoot.path, create: true)! return coderoot } - -////// CONFIG - -// Load config from redis -pub fn (mut self GitStructure) config() !GitStructureConfig { - mut config := self.config_ or { - mut redis := redis_get() - data := redis.get('${self.cache_key()}:config')! - mut c := GitStructureConfig{} - if data.len > 0 { - c = json.decode(GitStructureConfig, data)! - } - c - } - - return config -} - -// Reset the configuration cache for Git structures. -pub fn (mut self GitStructure) config_reset() ! { - mut redis := redis_get() - redis.del('${self.cache_key()}:config')! -} - -// save to the cache -pub fn (mut self GitStructure) config_save() ! { - // Retrieve the configuration from Redis. - mut redis := redis_get() - datajson := json.encode(self.config()!) - redis.set('${self.cache_key()}:config', datajson)! -} diff --git a/lib/develop/gittools/gitstructure_config.v b/lib/develop/gittools/gitstructure_config.v new file mode 100644 index 00000000..bae0aa2a --- /dev/null +++ b/lib/develop/gittools/gitstructure_config.v @@ -0,0 +1,48 @@ +module gittools + +import json + + +@[params] +pub struct GitStructureConfig { +pub mut: + light bool = true // If true, clones only the last history for all branches (clone with only 1 level deep) + ssh_key_name string + ssh_key_path string +} + + + +// Load config from redis +pub fn (mut self GitStructure) config() !GitStructureConfig { + mut config := self.config_ or { + mut redis := redis_get() + data := redis.get('${self.cache_key()}:config')! + mut c := GitStructureConfig{} + if data.len > 0 { + c = json.decode(GitStructureConfig, data)! + } + c + } + return config +} + + +pub fn (mut self GitStructure) config_set(args GitStructureConfig) ! { + mut redis := redis_get() + redis.set('${self.cache_key()}:config', json.encode(args))! +} + +// Reset the configuration cache for Git structures. +fn (mut self GitStructure) config_reset() ! { + mut redis := redis_get() + redis.del('${self.cache_key()}:config')! +} + +// save to the cache +fn (mut self GitStructure) config_save() ! { + // Retrieve the configuration from Redis. + mut redis := redis_get() + datajson := json.encode(self.config()!) + redis.set('${self.cache_key()}:config', datajson)! +} diff --git a/lib/develop/gittools/gittools_do.v b/lib/develop/gittools/gittools_do.v index a0606795..602610c8 100644 --- a/lib/develop/gittools/gittools_do.v +++ b/lib/develop/gittools/gittools_do.v @@ -45,6 +45,8 @@ pub fn (mut gs GitStructure) do(args_ ReposActionsArgs) !string { mut args := args_ console.print_debug('git do ${args.cmd}') + $dbg; + if args.path == '' && args.url == '' && args.repo == '' && args.account == '' && args.provider == '' && args.filter == '' { args.path = os.getwd() @@ -84,7 +86,7 @@ pub fn (mut gs GitStructure) do(args_ ReposActionsArgs) !string { // NEW: Update status only for the relevant repos. console.print_header('Updating status for selected repos...') for mut repo in repos { - repo.status_update(reload: args.reload || args.cmd == 'reload')! + repo.status_update(reset: args.reload || args.cmd == 'reload')! } if args.cmd == 'list' { diff --git a/lib/develop/gittools/repos_print.v b/lib/develop/gittools/repos_print.v index 230bbdd4..78d2825a 100644 --- a/lib/develop/gittools/repos_print.v +++ b/lib/develop/gittools/repos_print.v @@ -7,22 +7,15 @@ fn get_repo_status(gr GitRepo) !string { mut repo := gr mut statuses := []string{} - if repo.status_local.error.len > 0 { - mut err_msg := repo.status_local.error + if repo.status.error.len > 0 { + mut err_msg := repo.status.error if err_msg.len > 40 { err_msg = err_msg[0..40] + '...' } - statuses << 'ERROR (Local): ${err_msg}' - } - if repo.status_remote.error.len > 0 { - mut err_msg := repo.status_remote.error - if err_msg.len > 40 { - err_msg = err_msg[0..40] + '...' - } - statuses << 'ERROR (Remote): ${err_msg}' + statuses << 'ERROR: ${err_msg}' } - if repo.has_changes { + if repo.status.has_changes { statuses << 'COMMIT' } @@ -41,10 +34,10 @@ fn get_repo_status(gr GitRepo) !string { fn format_repo_info(repo GitRepo) ![]string { status := get_repo_status(repo)! - tag_or_branch := if repo.status_local.tag.len > 0 { - '[[${repo.status_local.tag}]]' // Display tag if it exists + tag_or_branch := if repo.status.tag.len > 0 { + '[[${repo.status.tag}]]' // Display tag if it exists } else { - '[${repo.status_local.branch}]' // Otherwise, display branch + '[${repo.status.branch}]' // Otherwise, display branch } relative_path := repo.get_human_path()! @@ -64,7 +57,7 @@ pub fn (mut gitstructure GitStructure) repos_print(args ReposGetArgs) ! { console.clear() // console.print_lf(1) // Removed to reduce newlines - header := 'Repositories: ${gitstructure.config()!.coderoot}' + header := 'Repositories: ${gitstructure.coderoot}' console.print_header(header) console.print_lf(1) // Keep one newline after header diff --git a/lib/develop/gittools/repository.v b/lib/develop/gittools/repository.v index 7666614b..d3927166 100644 --- a/lib/develop/gittools/repository.v +++ b/lib/develop/gittools/repository.v @@ -4,51 +4,8 @@ module gittools import freeflowuniverse.herolib.ui.console import freeflowuniverse.herolib.osal.core as osal import os -import time -import freeflowuniverse.herolib.core.pathlib -import freeflowuniverse.herolib.develop.vscode -import freeflowuniverse.herolib.develop.sourcetree -import freeflowuniverse.herolib.osal.sshagent -// GitStatus holds the unified status information for a repository. -// It reflects the CURRENT state, not a desired state. -pub struct GitStatus { -pub mut: - // Combined local & remote state (from fetch) - branches map[string]string // All branch names -> commit hash - tags map[string]string // All tag names -> commit hash - // Current local state - branch string // The current checked-out branch. - tag string // The current checked-out tag (if any). - ahead int // Commits ahead of remote. - behind int // Commits behind remote. - - // Combined status - has_changes bool // True if there are uncommitted local changes. - error string // Error message if any status update fails. -} - -pub struct GitRepoConfig { -pub mut: - remote_check_period int = 300 // seconds, 5 min -} - -// GitRepo represents a single git repository. -@[heap] -pub struct GitRepo { - // a git repo is always part of a git structure -mut: - gs &GitStructure - last_load int // epoch when last loaded -pub mut: - provider string // e.g., github.com - account string // Git account name - name string // Repository name - deploysshkey string // SSH key for git operations - config GitRepoConfig - status GitStatus -} // commit stages all changes and commits them with the provided message. pub fn (mut repo GitRepo) commit(msg string) ! { diff --git a/lib/develop/gittools/repository_load.v b/lib/develop/gittools/repository_load.v index 7dd5af98..4744bdfc 100644 --- a/lib/develop/gittools/repository_load.v +++ b/lib/develop/gittools/repository_load.v @@ -13,7 +13,7 @@ pub fn (mut repo GitRepo) status_update(args StatusUpdateArgs) ! { repo.init()! // Skip remote checks if offline. - if 'OFFLINE' in os.environ() || (repo.gs.config()!.offline) { + if repo.gs.offline { console.print_debug('status update skipped (offline) for ${repo.path()}') return } @@ -79,7 +79,7 @@ fn (mut repo GitRepo) load_internal() ! { // Persist the newly loaded state to the cache. repo.cache_set()! - println(repo) + // println(repo) $dbg; } diff --git a/lib/develop/gittools/repository_model.v b/lib/develop/gittools/repository_model.v index 1853acab..41c50d8d 100644 --- a/lib/develop/gittools/repository_model.v +++ b/lib/develop/gittools/repository_model.v @@ -1,69 +1,58 @@ module gittools -// GitRepo holds information about a single Git repository. + +// GitRepo represents a single git repository. @[heap] pub struct GitRepo { + // a git repo is always part of a git structure +mut: + gs &GitStructure + last_load int // epoch when last loaded pub mut: - gs &GitStructure @[skip; str: skip] // Reference to the parent GitStructure - provider string // e.g., github.com, shortened to 'github' - account string // Git account name - name string // Repository name - status_remote GitRepoStatusRemote // Remote repository status - status_local GitRepoStatusLocal // Local repository status - status_wanted GitRepoStatusWanted // what is the status we want? - config GitRepoConfig // Repository-specific configuration - last_load int // Epoch timestamp of the last load from reality - deploysshkey string // to use with git - has_changes bool + provider string // e.g., github.com + account string // Git account name + name string // Repository name + deploysshkey string // SSH key for git operations + config GitRepoConfig + status GitStatus } -// this is the status we want, we need to work towards off -pub struct GitRepoStatusWanted { +// GitStatus holds the unified status information for a repository. +// It reflects the CURRENT state, not a desired state. +pub struct GitStatus { pub mut: - branch string - tag string - url string // Remote repository URL, is basically the one we want - readonly bool // if read only then we cannot push or commit, all changes will be reset when doing pull + // Combined local & remote state (from fetch) + branches map[string]string // All branch names -> commit hash + tags map[string]string // All tag names -> commit hash + + // Current local state + branch string // The current checked-out branch. + tag string // The current checked-out tag (if any). + ahead int // Commits ahead of remote. + behind int // Commits behind remote. + + // Combined status + has_changes bool // True if there are uncommitted local changes. + error string // Error message if any status update fails. } -// GitRepoStatusRemote holds remote status information for a repository. -pub struct GitRepoStatusRemote { -pub mut: - ref_default string // is the default branch hash - branches map[string]string // Branch name -> commit hash - tags map[string]string // Tag name -> commit hash - error string // Error message if remote status update fails -} - -// GitRepoStatusLocal holds local status information for a repository. -pub struct GitRepoStatusLocal { -pub mut: - branches map[string]string // Branch name -> commit hash - branch string // the current branch - tag string // If the local branch is not set, the tag may be set - ahead int // Commits ahead of remote - behind int // Commits behind remote - error string // Error message if local status update fails -} - -// GitRepoConfig holds repository-specific configuration options. pub struct GitRepoConfig { pub mut: - remote_check_period int = 3600 * 24 * 7 // Seconds to wait between remote checks (0 = check every time), default 7 days + remote_check_period int = 300 // seconds, 5 min } -// just some initialization mechanism -fn (mut gitstructure GitStructure) repo_new_from_gitlocation(git_location GitLocation) !&GitRepo { - mut repo := GitRepo{ - provider: git_location.provider - name: git_location.name - account: git_location.account - gs: &gitstructure - status_remote: GitRepoStatusRemote{} - status_local: GitRepoStatusLocal{} - status_wanted: GitRepoStatusWanted{} - } - gitstructure.repos[repo.cache_key()] = &repo +// // just some initialization mechanism +// fn (mut gitstructure GitStructure) repo_new_from_gitlocation(git_location GitLocation) !&GitRepo { +// mut repo := GitRepo{ +// provider: git_location.provider +// name: git_location.name +// account: git_location.account +// gs: &gitstructure +// status_remote: GitRepoStatusRemote{} +// status_local: GitRepoStatusLocal{} +// status_wanted: GitRepoStatusWanted{} +// } +// gitstructure.repos[repo.cache_key()] = &repo - return &repo -} +// return &repo +// } diff --git a/lib/develop/reprompt/templates/prompt_example.md b/lib/develop/reprompt/templates/prompt_example.md index 94615eef..0675fea0 100644 --- a/lib/develop/reprompt/templates/prompt_example.md +++ b/lib/develop/reprompt/templates/prompt_example.md @@ -591,7 +591,7 @@ module playcmds // } // // if action.name == 'get' { -// // mut gs := gittools.get()! +// // mut gs := gittools.new()! // // url := action.params.get('url')! // // branch := action.params.get_default('branch', '')! // // reset := action.params.get_default_false('reset')! @@ -1493,7 +1493,7 @@ fn play_core(mut plbook PlayBook) ! { mut playrunpath := action.params.get_default('path', '')! if playrunpath.len == 0 { action.name = 'pull' - playrunpath = gittools.get_repo_path( + playrunpath = gittools.path( path: action.params.get_default('path', '')! git_url: action.params.get_default('git_url', '')! git_reset: action.params.get_default_false('git_reset') diff --git a/lib/installers/infra/coredns/coredns_configure.v b/lib/installers/infra/coredns/coredns_configure.v index c45fe364..1e358457 100644 --- a/lib/installers/infra/coredns/coredns_configure.v +++ b/lib/installers/infra/coredns/coredns_configure.v @@ -7,7 +7,7 @@ import os pub fn configure() ! { mut args := get()! - mut gs := gittools.get()! + mut gs := gittools.new()! mut repo_path := '' set_global_dns() diff --git a/lib/installers/infra/zinit_installer/zinit_installer_actions.v b/lib/installers/infra/zinit_installer/zinit_installer_actions.v index e6e5a28b..b349bbae 100644 --- a/lib/installers/infra/zinit_installer/zinit_installer_actions.v +++ b/lib/installers/infra/zinit_installer/zinit_installer_actions.v @@ -101,7 +101,7 @@ fn build() ! { // install zinit if it was already done will return true console.print_header('build zinit') - mut gs := gittools.get(coderoot: '/tmp/builder')! + mut gs := gittools.new(coderoot: '/tmp/builder')! mut repo := gs.get_repo( url: 'https://github.com/threefoldtech/zinit' reset: true diff --git a/lib/installers/lang/herolib/crystallib.v b/lib/installers/lang/herolib/crystallib.v index f8adcfac..9a569552 100644 --- a/lib/installers/lang/herolib/crystallib.v +++ b/lib/installers/lang/herolib/crystallib.v @@ -29,7 +29,7 @@ pub fn install(args InstallArgs) ! { vlang.install(reset: args.reset)! vlang.v_analyzer_install(reset: args.reset)! - mut gs := gittools.get()! + mut gs := gittools.new()! gs.config()!.light = true // means we clone depth 1 mut repo := gs.get_repo( diff --git a/lib/installers/lang/vlang/vlang.v b/lib/installers/lang/vlang/vlang.v index ffdeddab..f9fe0840 100644 --- a/lib/installers/lang/vlang/vlang.v +++ b/lib/installers/lang/vlang/vlang.v @@ -38,7 +38,7 @@ pub fn install(args_ InstallArgs) ! { base.develop()! - mut gs := gittools.get(coderoot: '${os.home_dir()}/_code')! + mut gs := gittools.new(coderoot: '${os.home_dir()}/_code')! mut repo := gs.get_repo( pull: true reset: true diff --git a/lib/installers/net/yggdrasil/ygg.v b/lib/installers/net/yggdrasil/ygg.v index 353a0804..25e10299 100644 --- a/lib/installers/net/yggdrasil/ygg.v +++ b/lib/installers/net/yggdrasil/ygg.v @@ -41,7 +41,7 @@ Peers: if args.reset { golang.install()! console.print_header('install yggdrasil') - mut gs := gittools.get(coderoot: '${os.home_dir()}/_code')! + mut gs := gittools.new(coderoot: '${os.home_dir()}/_code')! mut repo := gs.get_repo( url: 'https://github.com/yggdrasil-network/yggdrasil-go.git' reset: false diff --git a/lib/installers/sysadmintools/restic/builder.v b/lib/installers/sysadmintools/restic/builder.v index 14f1037a..7722fa3b 100644 --- a/lib/installers/sysadmintools/restic/builder.v +++ b/lib/installers/sysadmintools/restic/builder.v @@ -26,7 +26,7 @@ pub fn build_(args BuildArgs) ! { // install restic if it was already done will return true console.print_header('build restic') - mut gs := gittools.get(coderoot: '/tmp/builder')! + mut gs := gittools.new(coderoot: '/tmp/builder')! mut repo := gs.get_repo( url: url reset: true diff --git a/lib/installers/sysadmintools/s3/builder.v b/lib/installers/sysadmintools/s3/builder.v index 485edc80..233ea695 100644 --- a/lib/installers/sysadmintools/s3/builder.v +++ b/lib/installers/sysadmintools/s3/builder.v @@ -25,7 +25,7 @@ pub fn build_(args BuildArgs) ! { osal.package_install('libssl-dev,pkg-config')! - mut gs := gittools.get()! + mut gs := gittools.new()! mut repo := gs.get_repo( url: 'https://github.com/leesmet/s3-cas' reset: false diff --git a/lib/installers/threefold/tfrobot/tfrobot.v b/lib/installers/threefold/tfrobot/tfrobot.v index 39058086..2ec4e0ad 100644 --- a/lib/installers/threefold/tfrobot/tfrobot.v +++ b/lib/installers/threefold/tfrobot/tfrobot.v @@ -48,7 +48,7 @@ pub fn build_() ! { dest_on_os = '/usr/local/bin' } - mut gs := gittools.get()! + mut gs := gittools.new()! mut repo := gs.get_repo( url: 'https://github.com/threefoldtech/tfgrid-sdk-go' reset: true diff --git a/lib/mcp/rhai/logic/prompts/example_script.md b/lib/mcp/rhai/logic/prompts/example_script.md index 777fe75a..e67422ba 100644 --- a/lib/mcp/rhai/logic/prompts/example_script.md +++ b/lib/mcp/rhai/logic/prompts/example_script.md @@ -22,7 +22,7 @@ if repos.len() > 0 { if repo_array.len() > 0 { let repo = repo_array[0]; - print("\nRepository path: " + get_repo_path(repo)); + print("\nRepository path: " + path(repo)); // Check if the repository has changes let has_changes = has_changes(repo); diff --git a/lib/virt/docker/docker_recipe_code.v b/lib/virt/docker/docker_recipe_code.v index 2601185c..0cb5d916 100644 --- a/lib/virt/docker/docker_recipe_code.v +++ b/lib/virt/docker/docker_recipe_code.v @@ -18,7 +18,7 @@ pub mut: // checkout a code repository on right location pub fn (mut r DockerBuilderRecipe) add_codeget(args_ CodeGetArgs) ! { mut args := args_ - mut gs := gittools.get(coderoot: '${r.path()}/code')! + mut gs := gittools.new(coderoot: '${r.path()}/code')! mut gr := gs.get_repo(url: args.url, pull: args.pull, reset: args.reset)! if args.name == '' { diff --git a/lib/web/docusaurus/dsite_import.v b/lib/web/docusaurus/dsite_import.v index 08ab4065..db2ada9d 100644 --- a/lib/web/docusaurus/dsite_import.v +++ b/lib/web/docusaurus/dsite_import.v @@ -29,7 +29,7 @@ pub fn (mut docsite DocSite) import() ! { } // Use gittools to get path of what we want to import - import_path := gittools.get_repo_path( + mut import_path := gittools.path( git_pull: c.reset git_reset: c.reset git_url: importparams.url @@ -37,13 +37,14 @@ pub fn (mut docsite DocSite) import() ! { path: importparams.path )! - mut import_patho := pathlib.get(import_path) - + if import_path.path == "" { + return error("import path not found for url:${importparams.url} and path:${importparams.path}") + } if importparams.dest.starts_with("/") { return error("Import path ${importparams.dest} must be relative, will be relative in relation to the build dir.") } - import_patho.copy(dest: '${c.path_build.path}/${importparams.dest}', delete: false)! + import_path.copy(dest: '${c.path_build.path}/${importparams.dest}', delete: false)! // println(importparams) // replace: {'NAME': 'MyName', 'URGENCY': 'red'}