This commit is contained in:
2025-08-15 08:25:00 +02:00
parent e76f558f97
commit 71298a9704
7 changed files with 34 additions and 31 deletions

View File

@@ -39,7 +39,7 @@ pub fn new(args_ GitStructureArgsNew) !&GitStructure {
}
return gs
}else{
console.print_header("Loading GitStructure for ${args.coderoot}.")
console.print_debug("Loading GitStructure for ${args.coderoot}")
}
// Create and load the GitStructure instance.
@@ -57,7 +57,7 @@ pub fn new(args_ GitStructureArgsNew) !&GitStructure {
gs.config()! // will load the config, don't remove
if gs.repos.keys().len == 0 || args.reload {
if args.reload {
gs.load(true)!
}else{
gs.load(false)!

View File

@@ -43,6 +43,7 @@ pub fn (mut gitstructure GitStructure) load(reset bool) ! {
for _, mut repo in gitstructure.repos {
repo.status_update(reset: reset)!
}
gitstructure.config_save()!
}
// Recursively loads repositories from the provided path, updating their statuses, does not check the status
@@ -127,7 +128,7 @@ fn (mut gitstructure GitStructure) repo_init_from_path_(path string, params Repo
// Retrieve GitLocation from the path.
gl := gitstructure.gitlocation_from_path(mypath.path)!
console.print_debug("Initializing GitRepo from path: ${mypath.path}")
// console.print_debug("Initializing GitRepo from path: ${mypath.path}")
// Initialize and return a GitRepo struct.
mut r := GitRepo{
gs: &gitstructure

View File

@@ -45,12 +45,10 @@ 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()
}
// if args.path == '' && args.url == '' && args.repo == '' && args.account == ''
// && args.provider == '' && args.filter == '' {
// args.path = os.getwd()
// }
if args.path != '' {
mut curdiro := pathlib.get_dir(path: args.path, create: false)!
@@ -83,8 +81,6 @@ pub fn (mut gs GitStructure) do(args_ ReposActionsArgs) !string {
// gs.load(true)! // <-- REMOVED
// }
// NEW: Update status only for the relevant repos.
console.print_header('Updating status for selected repos...')
for mut repo in repos {
repo.status_update(reset: args.reload || args.cmd == 'reload')!
}

View File

@@ -57,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.coderoot}'
header := 'Repositories: ${gitstructure.coderoot.path}'
console.print_header(header)
console.print_lf(1) // Keep one newline after header

View File

@@ -13,6 +13,7 @@ fn (mut repo GitRepo) cache_set() ! {
mut redis_client := redis_get()
repo_json := json.encode(repo)
cache_key := repo.cache_key()
// println("Caching repository ${repo.name} at ${cache_key}")
redis_client.set(cache_key, repo_json)!
}
@@ -30,6 +31,16 @@ fn (mut repo GitRepo) cache_get() ! {
}
}
fn (mut repo GitRepo) cache_exists() !bool {
mut repo_json := ''
mut redis_client := redis_get()
cache_key := repo.cache_key()
// println("${repo.name} : Checking if cache exists at ${cache_key}")
repo_json = redis_client.get(cache_key) or { return false }
// println(repo_json)
return repo_json.len > 0
}
// Remove cache
fn (mut repo GitRepo) cache_delete() ! {
mut redis_client := redis_get()

View File

@@ -18,25 +18,36 @@ pub fn (mut repo GitRepo) status_update(args StatusUpdateArgs) ! {
return
}
if args.reset || repo.last_load == 0 {
// console.print_debug('${repo.name} : Cache get')
repo.cache_get()!
}
// cacheexists:=repo.cache_exists()!
// console.print_debug('${repo.name} : Checking if a full load is needed for cacheexists:${cacheexists} ')
current_time := int(time.now().unix())
// Decide if a full load is needed.
if args.reset || repo.last_load == 0
|| current_time - repo.last_load >= repo.config.remote_check_period {
$dbg;
repo.load_internal() or {
// Persist the error state to the cache
console.print_stderr('Failed to load repository ${repo.name} at ${repo.path()}: ${err}')
if repo.status.error == '' {
repo.status.error = 'Failed to load repository: ${err}'
}
repo.cache_set()!
return error('Failed to load repository ${repo.name}: ${err}')
}
repo.cache_set()!
// $dbg;
}
}
// load_internal performs the expensive git operations to refresh the repository state.
// It should only be called by status_update().
fn (mut repo GitRepo) load_internal() ! {
console.print_header('load ${repo.print_key()}')
console.print_debug('load ${repo.print_key()}')
repo.init()!
repo.exec('git fetch --all') or {

View File

@@ -38,21 +38,5 @@ pub mut:
pub struct GitRepoConfig {
pub mut:
remote_check_period int = 300 // seconds, 5 min
remote_check_period int = 3600 // seconds = 1h
}
// // 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
// }