diff --git a/cli/hero.v b/cli/hero.v index a231125c..18afac49 100644 --- a/cli/hero.v +++ b/cli/hero.v @@ -88,27 +88,6 @@ fn do() ! { herocmds.cmd_generator(mut cmd) herocmds.cmd_docusaurus(mut cmd) - // herocmds.cmd_bootstrap(mut cmd) - // herocmds.cmd_init(mut cmd) - // herocmds.cmd_imagedownsize(mut cmd) - // herocmds.cmd_biztools(mut cmd) - // herocmds.cmd_gen(mut cmd) - // herocmds.cmd_sshagent(mut cmd) - // herocmds.cmd_installers(mut cmd) - // herocmds.cmd_configure(mut cmd) - // herocmds.cmd_postgres(mut cmd) - // Ensure the herocmds module is imported so the remaining commands are visible - // `cmd_mdbook` is not part of the current code base – it has been removed. - // If you need markdown‑book support, re‑introduce the command implementation - // and uncomment the line below. - // herocmds.cmd_mdbook(mut cmd) - // herocmds.cmd_luadns(mut cmd) - // herocmds.cmd_caddy(mut cmd) - // herocmds.cmd_zola(mut cmd) - // herocmds.cmd_juggler(mut cmd) - // herocmds.cmd_starlight(mut cmd) - // herocmds.cmd_docsorter(mut cmd) - // cmd.add_command(publishing.cmd_publisher(pre_func)) cmd.setup() cmd.parse(os.args) } diff --git a/examples/clients/gitea.vsh b/examples/clients/gitea.vsh index e89d1988..2ec17c75 100755 --- a/examples/clients/gitea.vsh +++ b/examples/clients/gitea.vsh @@ -1,19 +1,40 @@ -#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run +#!/usr/bin/env -S v -n -w -g -cg -gc none -cc tcc -d use_openssl -enable-globals run -import freeflowuniverse.herolib.core -import freeflowuniverse.herolib.clients.gitea_client +import freeflowuniverse.herolib.core.playcmds +import freeflowuniverse.herolib.clients.giteaclient // Configure PostgreSQL client -heroscript := " -!!gitea_client.configure - url: 'https://gitea.example.com' - user: 'despiegk' - token: '0597b7c143953bc66b47268bfcdc324340b3f47d' -" +// heroscript := " +// !!giteaclient.configure +// url: 'git.ourworld.tf' +// user: 'despiegk' +// secret: '' +// " -// Process the heroscript configuration -gitea_client.play(heroscript: heroscript)! +// // Process the heroscript configuration +// playcmds.play(heroscript: heroscript, emptycheck: false)! // Get the configured client -mut db_client := gitea_client.get()! +mut client := giteaclient.get()! + +// Get the authenticated user +// user := client.get_current_user()! +// println('Authenticated as: ${user.login}') + +// List repositories for the authenticated user +repos := client.user_list_repos()! +println('Found ${repos.len} repositories:') +for repo in repos { + println('- ${repo.full_name}') +} + +// Get a specific repository's issues +owner := 'gitea' +repo_name := 'gitea' +println('\nFetching issues for ${owner}/${repo_name}...') +issues := client.list_repo_issues(owner, repo_name)! +println('Found ${issues.len} issues.') +for issue in issues { + println(' #${issue.number}: ${issue.title}') +} diff --git a/examples/core/openapi/gitea/gitea_openapi.vsh b/examples/core/openapi/gitea/gitea_openapi.vsh index abb99d9e..1730a0b8 100644 --- a/examples/core/openapi/gitea/gitea_openapi.vsh +++ b/examples/core/openapi/gitea/gitea_openapi.vsh @@ -9,6 +9,6 @@ const spec_path = '${os.dir(@FILE)}/openapi.json' mod := gen.generate_client_module( api_name: 'Gitea' )! -mod.write_v('${os.dir(@FILE)}/gitea_client', +mod.write_v('${os.dir(@FILE)}/giteaclient', overwrite: true )! diff --git a/lib/clients/gitea_client/instructions.md b/lib/clients/gitea_client/instructions.md deleted file mode 100644 index 6980557a..00000000 --- a/lib/clients/gitea_client/instructions.md +++ /dev/null @@ -1,17 +0,0 @@ - -example how to - -```v -pub fn (mut self GiteaClient) list_classifiers() ![]Classifier { - req := httpconnection.Request{ - method: .get - prefix: 'v1/classifiers' - } - //fetch the http client - mut httpclient := self.httpclient()! - response := httpclient.get(req)! - classifiers := json.decode([]Classifier, response)! - return classifiers -} - -``` \ No newline at end of file diff --git a/lib/clients/gitea_client/.heroscript b/lib/clients/giteaclient/.heroscript similarity index 74% rename from lib/clients/gitea_client/.heroscript rename to lib/clients/giteaclient/.heroscript index 3b85ca0d..1a73d252 100644 --- a/lib/clients/gitea_client/.heroscript +++ b/lib/clients/giteaclient/.heroscript @@ -1,6 +1,6 @@ !!hero_code.generate_client - name:'gitea_client' + name:'giteaclient' classname:'GiteaClient' singleton:0 default:1 diff --git a/lib/clients/gitea_client/gitea_client_factory_.v b/lib/clients/giteaclient/giteaclient_factory_.v similarity index 64% rename from lib/clients/gitea_client/gitea_client_factory_.v rename to lib/clients/giteaclient/giteaclient_factory_.v index c4fa8160..d0edd9aa 100644 --- a/lib/clients/gitea_client/gitea_client_factory_.v +++ b/lib/clients/giteaclient/giteaclient_factory_.v @@ -1,12 +1,12 @@ -module gitea_client +module giteaclient import freeflowuniverse.herolib.core.base import freeflowuniverse.herolib.core.playbook { PlayBook } import freeflowuniverse.herolib.ui.console __global ( - gitea_client_global map[string]&GiteaClient - gitea_client_default string + giteaclient_global map[string]&GiteaClient + giteaclient_default string ) /////////FACTORY @@ -31,19 +31,19 @@ pub fn get(args_ ArgsGet) !&GiteaClient { mut obj := GiteaClient{ name: args.name } - if args.name !in gitea_client_global { + if args.name !in giteaclient_global { if !exists(args)! { set(obj)! } else { - heroscript := context.hero_config_get('gitea_client', args.name)! + heroscript := context.hero_config_get('giteaclient', args.name)! mut obj_ := heroscript_loads(heroscript)! set_in_mem(obj_)! } } - return gitea_client_global[args.name] or { - println(gitea_client_global) + return giteaclient_global[args.name] or { + println(giteaclient_global) // bug if we get here because should be in globals - panic('could not get config for gitea_client with name, is bug:${args.name}') + panic('could not get config for giteaclient with name, is bug:${args.name}') } } @@ -52,34 +52,34 @@ pub fn set(o GiteaClient) ! { set_in_mem(o)! mut context := base.context()! heroscript := heroscript_dumps(o)! - context.hero_config_set('gitea_client', o.name, heroscript)! + context.hero_config_set('giteaclient', o.name, heroscript)! } // does the config exists? pub fn exists(args_ ArgsGet) !bool { mut context := base.context()! mut args := args_get(args_) - return context.hero_config_exists('gitea_client', args.name) + return context.hero_config_exists('giteaclient', args.name) } pub fn delete(args_ ArgsGet) ! { mut args := args_get(args_) mut context := base.context()! - context.hero_config_delete('gitea_client', args.name)! - if args.name in gitea_client_global { - // del gitea_client_global[args.name] + context.hero_config_delete('giteaclient', args.name)! + if args.name in giteaclient_global { + // del giteaclient_global[args.name] } } // only sets in mem, does not set as config fn set_in_mem(o GiteaClient) ! { mut o2 := obj_init(o)! - gitea_client_global[o.name] = &o2 - gitea_client_default = o.name + giteaclient_global[o.name] = &o2 + giteaclient_default = o.name } pub fn play(mut plbook PlayBook) ! { - mut install_actions := plbook.find(filter: 'gitea_client.configure')! + mut install_actions := plbook.find(filter: 'giteaclient.configure')! if install_actions.len > 0 { for install_action in install_actions { heroscript := install_action.heroscript() @@ -89,9 +89,9 @@ pub fn play(mut plbook PlayBook) ! { } } -// switch instance to be used for gitea_client +// switch instance to be used for giteaclient pub fn switch(name string) { - gitea_client_default = name + giteaclient_default = name } // helpers diff --git a/lib/clients/gitea_client/gitea_client_model.v b/lib/clients/giteaclient/giteaclient_model.v similarity index 66% rename from lib/clients/gitea_client/gitea_client_model.v rename to lib/clients/giteaclient/giteaclient_model.v index 8fabdece..0525ffd8 100644 --- a/lib/clients/gitea_client/gitea_client_model.v +++ b/lib/clients/giteaclient/giteaclient_model.v @@ -1,5 +1,5 @@ -// File: lib/clients/gitea_client/gitea_client_model.v -module gitea_client +// File: lib/clients/giteaclient/giteaclient_model.v +module giteaclient import freeflowuniverse.herolib.data.paramsparser import freeflowuniverse.herolib.data.encoderhero @@ -36,6 +36,24 @@ fn obj_init(mycfg_ GiteaClient) !GiteaClient { if mycfg.url == '' { return error('url needs to be filled in for ${mycfg.name}') } + if mycfg.url.starts_with('https://') { + mycfg.url = mycfg.url.replace('https://', '') + } + if mycfg.url.starts_with('http://') { + mycfg.url = mycfg.url.replace('http://', '') + } + mycfg.url = mycfg.url.trim_right('/') + if mycfg.url.ends_with('/api/v1') { + mycfg.url = mycfg.url.replace('/api/v1', '') + } + if mycfg.url.ends_with('/api') { + mycfg.url = mycfg.url.replace('/api', '') + } + mycfg.url = "https://${mycfg.url}/api/v1" + + if mycfg.secret.len == 0 { + return error('secret needs to be filled in for ${mycfg.name}') + } return mycfg } diff --git a/lib/clients/gitea_client/methods.v b/lib/clients/giteaclient/methods.v similarity index 82% rename from lib/clients/gitea_client/methods.v rename to lib/clients/giteaclient/methods.v index 34746158..c1cb3966 100644 --- a/lib/clients/gitea_client/methods.v +++ b/lib/clients/giteaclient/methods.v @@ -1,29 +1,25 @@ -// File: lib/clients/gitea_client/methods.v -module gitea_client +// File: lib/clients/giteaclient/methods.v +module giteaclient import freeflowuniverse.herolib.core.httpconnection import json import net.http -// NOTE: This file should contain the implementation for all API endpoints from the swagger spec. -// Each public method on GiteaClient corresponds to an API call. - -// -// Repository Operations -// - // List a user's own repositories pub fn (mut client GiteaClient) user_list_repos() ![]Repository { + $dbg; req := httpconnection.Request{ method: .get prefix: '/user/repos' } mut http_client := client.httpclient()! - return http_client.get_json_list_generic[Repository](req)! + r:=http_client.get_json_list_generic[Repository](req)! + $dbg; + return r } // Get a repository -pub fn (mut client GiteaClient) get_repo(owner string, repo string) !&Repository { +pub fn (mut client GiteaClient) get_repo(owner string, repo string) !Repository { req := httpconnection.Request{ method: .get prefix: '/repos/${owner}/${repo}' @@ -33,7 +29,7 @@ pub fn (mut client GiteaClient) get_repo(owner string, repo string) !&Repository } // Create a repository for the authenticated user. -pub fn (mut client GiteaClient) create_current_user_repo(args CreateRepoOption) !&Repository { +pub fn (mut client GiteaClient) create_current_user_repo(args CreateRepoOption) !Repository { req := httpconnection.Request{ method: .post prefix: '/user/repos' @@ -59,7 +55,7 @@ pub fn (mut client GiteaClient) list_repo_issues(owner string, repo string) ![]I } // Get an issue -pub fn (mut client GiteaClient) get_issue(owner string, repo string, index i64) !&Issue { +pub fn (mut client GiteaClient) get_issue(owner string, repo string, index i64) !Issue { req := httpconnection.Request{ method: .get prefix: '/repos/${owner}/${repo}/issues/${index}' @@ -69,7 +65,7 @@ pub fn (mut client GiteaClient) get_issue(owner string, repo string, index i64) } // Create an issue -pub fn (mut client GiteaClient) create_issue(owner string, repo string, args CreateIssueOption) !&Issue { +pub fn (mut client GiteaClient) create_issue(owner string, repo string, args CreateIssueOption) !Issue { req := httpconnection.Request{ method: .post prefix: '/repos/${owner}/${repo}/issues' @@ -85,7 +81,7 @@ pub fn (mut client GiteaClient) create_issue(owner string, repo string, args Cre // // get_user gets a user by username -pub fn (mut client GiteaClient) get_user(username string) !&User { +pub fn (mut client GiteaClient) get_user(username string) !User { req := httpconnection.Request{ method: .get prefix: '/users/${username}' @@ -95,7 +91,7 @@ pub fn (mut client GiteaClient) get_user(username string) !&User { } // get_current_user gets the authenticated user -pub fn (mut client GiteaClient) get_current_user() !&User { +pub fn (mut client GiteaClient) get_current_user() !User { req := httpconnection.Request{ method: .get prefix: '/user' diff --git a/lib/clients/gitea_client/models.v b/lib/clients/giteaclient/models.v similarity index 76% rename from lib/clients/gitea_client/models.v rename to lib/clients/giteaclient/models.v index 08150bbf..b71402e9 100644 --- a/lib/clients/gitea_client/models.v +++ b/lib/clients/giteaclient/models.v @@ -1,4 +1,4 @@ -module gitea_client +module giteaclient import time @@ -27,9 +27,9 @@ pub: pub struct Activity { pub: - act_user &User + act_user User act_user_id i64 - comment &Comment + comment Comment comment_id i64 content string created time.Time @@ -37,7 +37,7 @@ pub: is_private bool op_type string ref_name string - repo &Repository + repo Repository repo_id i64 user_id i64 } @@ -64,12 +64,12 @@ pub: pub struct AnnotatedTag { pub: message string - object &AnnotatedTagObject + object AnnotatedTagObject sha string tag string - tagger &CommitUser + tagger CommitUser url string - verification &PayloadCommitVerification + verification PayloadCommitVerification } pub struct Attachment { @@ -93,7 +93,7 @@ pub: pub struct Branch { pub: - commit &PayloadCommit + commit PayloadCommit effective_branch_protection_name string enable_status_check bool name string @@ -145,10 +145,10 @@ pub: pub struct ChangeFilesOptions { pub: - author &Identity + author Identity branch string - committer &Identity - dates &CommitDateOptions + committer Identity + dates CommitDateOptions files []ChangeFileOperation message string new_branch string @@ -170,15 +170,15 @@ pub: pub struct Commit { pub: - author &User - commit &RepoCommit - committer &User + author User + commit RepoCommit + committer User created time.Time files []CommitAffectedFiles html_url string parents []CommitMeta sha string - stats &CommitStats + stats CommitStats url string } @@ -215,11 +215,26 @@ pub: name string } +pub struct Comment { +pub: + assets []Attachment + body string + created_at time.Time + html_url string + id i64 + issue_url string + original_author string + original_author_id i64 + pull_request_url string + updated_at time.Time + user User +} + pub struct CreateIssueOption { pub: title string assignee string - assignees []string + assignees []string body string closed bool due_date time.Time @@ -250,21 +265,28 @@ pub: name string } +pub struct InternalTracker { +pub: + allow_only_contributors_to_track_time bool + enable_issue_dependencies bool + enable_time_tracker bool +} + pub struct Issue { pub: id i64 url string html_url string number i64 - user &User + user User original_author string original_author_id i64 title string body string ref string labels []Label - milestone &Milestone - assignee &User + milestone Milestone + assignee User assignees []User state string // StateType is_locked bool @@ -273,8 +295,8 @@ pub: updated_at time.Time closed_at time.Time due_date time.Time - pull_request &PullRequestMeta - repository &RepositoryMeta + pull_request PullRequestMeta + repository RepositoryMeta assets []Attachment pin_order i64 } @@ -304,16 +326,59 @@ pub: due_on time.Time } +pub struct Organization { +pub: + avatar_url string + description string + email string + full_name string + id i64 + location string + name string + repo_admin_change_team_access bool + username string + visibility string + website string +} + pub struct PayloadCommitVerification { pub: payload string reason string signature string - signer &PayloadUser + signer PayloadUser verified bool } +pub struct PayloadCommit { +pub: + added []string + author PayloadUser + committer PayloadUser + id string + message string + modified []string + removed []string + timestamp time.Time + url string + verification PayloadCommitVerification +} + +pub struct PayloadUser { +pub: + email string + name string + username string +} + +pub struct Permission { +pub: + admin bool + pull bool + push bool +} + pub struct PullRequestMeta { pub: merged bool @@ -324,18 +389,18 @@ pub: pub struct RepoCommit { pub: - author &CommitUser - committer &CommitUser + author CommitUser + committer CommitUser message string - tree &CommitMeta + tree CommitMeta url string - verification &PayloadCommitVerification + verification PayloadCommitVerification } pub struct Repository { pub: id i64 - owner &User + owner User name string full_name string description string @@ -343,7 +408,7 @@ pub: private bool fork bool template bool - parent &Repository + parent_id i64 mirror bool size i64 language string @@ -365,9 +430,9 @@ pub: created_at time.Time updated_at time.Time archived_at time.Time - permissions &Permission + permissions Permission has_issues bool - internal_tracker &InternalTracker + internal_tracker InternalTracker has_wiki bool has_pull_requests bool has_projects bool @@ -388,7 +453,7 @@ pub: internal bool mirror_interval string mirror_updated time.Time - repo_transfer &RepoTransfer + repo_transfer RepoTransfer } pub struct RepositoryMeta { pub: @@ -398,6 +463,26 @@ pub: full_name string } +pub struct Team { +pub: + can_create_org_repo bool + description string + id i64 + includes_all_repositories bool + name string + organization Organization + permission string + units []string + units_map map[string]string +} + +pub struct RepoTransfer { +pub: + doer User + recipient User + teams []Team +} + pub struct User { pub: id i64 diff --git a/lib/clients/gitea_client/readme.md b/lib/clients/giteaclient/readme.md similarity index 79% rename from lib/clients/gitea_client/readme.md rename to lib/clients/giteaclient/readme.md index bc01b52e..4622d9d7 100644 --- a/lib/clients/gitea_client/readme.md +++ b/lib/clients/giteaclient/readme.md @@ -1,5 +1,5 @@ -// File: lib/clients/gitea_client/readme.md -# gitea_client +// File: lib/clients/giteaclient/readme.md +# giteaclient This library provides a client for interacting with the Gitea API. @@ -8,7 +8,7 @@ This library provides a client for interacting with the Gitea API. You can configure the client using a HeroScript file: ```hero -!!gitea_client.configure +!!giteaclient.configure name: 'default' // optional, 'default' is the default instance name url: 'https://git.ourworld.tf' secret: 'your-gitea-api-token' @@ -21,7 +21,7 @@ Save this content in your project's configuration (e.g., `~/.config/hero/config. Here's how to get the client and use its methods. ```vlang -import freeflowuniverse.herolib.clients.gitea_client +import freeflowuniverse.herolib.clients.giteaclient import freeflowuniverse.herolib.core.base fn main() ! { @@ -29,12 +29,12 @@ fn main() ! { base.init()! // Example configuration (can also be loaded from file) - heroscript_config := "!!gitea_client.configure url:'https://gitea.com' secret:'...your_token...'" + heroscript_config := "!!giteaclient.configure url:'https://gitea.com' secret:'...your_token...'" mut plbook := playbook.new(text: heroscript_config)! - gitea_client.play(mut plbook)! + giteaclient.play(mut plbook)! // Get the default configured client - mut client := gitea_client.get()! + mut client := giteaclient.get()! // Get the authenticated user user := client.get_current_user()! @@ -57,3 +57,8 @@ fn main() ! { println(' #${issue.number}: ${issue.title}') } } + + +## tips + +- to see the admin api: https://git.ourworld.tf/api/swagger \ No newline at end of file diff --git a/lib/clients/gitea_client/swagger.json b/lib/clients/giteaclient/swagger.json similarity index 100% rename from lib/clients/gitea_client/swagger.json rename to lib/clients/giteaclient/swagger.json diff --git a/lib/core/herocmds/git.v b/lib/core/herocmds/git.v index 6b2bab2d..28540533 100644 --- a/lib/core/herocmds/git.v +++ b/lib/core/herocmds/git.v @@ -96,6 +96,7 @@ pub fn cmd_git(mut cmdroot Command) { mut allcmdsref := [&list_command, &clone_command, &push_command, &pull_command, &commit_command, &reload_command, &delete_command, &sourcetree_command, &editor_command] + for mut c in allcmdsref { c.add_flag(Flag{ flag: .bool @@ -216,6 +217,7 @@ fn cmd_git_execute(cmd Command) ! { // create the filter for doing group actions, or action on 1 repo mut filter := cmd.flags.get_string('filter') or { '' } + if cmd.name in gittools.gitcmds.split(',') { mut pull := cmd.flags.get_bool('pull') or { false } mut reset := cmd.flags.get_bool('reset') or { false } @@ -224,6 +226,7 @@ fn cmd_git_execute(cmd Command) ! { pull = true reset = true } + mypath := gs.do( filter: filter reload: reload diff --git a/lib/core/httpconnection/connection_methods.v b/lib/core/httpconnection/connection_methods.v index e141f0aa..6be9ecff 100644 --- a/lib/core/httpconnection/connection_methods.v +++ b/lib/core/httpconnection/connection_methods.v @@ -186,7 +186,7 @@ pub fn (mut h HTTPConnection) get_json(req Request) !string { // Get Request with json data and return response as string pub fn (mut h HTTPConnection) get(req_ Request) !string { mut req := req_ - req.debug = true + req.debug req.method = .get result := h.send(req)! return result.data diff --git a/lib/core/playcmds/factory.v b/lib/core/playcmds/factory.v index 0b5a4ebd..7c7ceff3 100644 --- a/lib/core/playcmds/factory.v +++ b/lib/core/playcmds/factory.v @@ -6,6 +6,7 @@ import freeflowuniverse.herolib.biz.bizmodel import freeflowuniverse.herolib.web.site import freeflowuniverse.herolib.web.docusaurus import freeflowuniverse.herolib.clients.openai +import freeflowuniverse.herolib.clients.giteaclient // ------------------------------------------------------------------- // run – entry point for all HeroScript play‑commands @@ -18,6 +19,11 @@ pub mut: heroscript_path string plbook ?PlayBook reset bool + emptycheck bool = true +} + +pub fn play(args_ PlayArgs) ! { + return run(args_) } pub fn run(args_ PlayArgs) ! { @@ -45,6 +51,11 @@ pub fn run(args_ PlayArgs) ! { docusaurus.play(mut plbook)! - // Ensure we did not leave any actions un‑processed - plbook.empty_check()! + giteaclient.play(mut plbook)! + + if args.emptycheck{ + // Ensure we did not leave any actions un‑processed + plbook.empty_check()! + } + } diff --git a/lib/data/encoderhero/decoder.v b/lib/data/encoderhero/decoder.v index 66e164b7..0b3ff0c8 100644 --- a/lib/data/encoderhero/decoder.v +++ b/lib/data/encoderhero/decoder.v @@ -24,6 +24,9 @@ fn decode_struct[T](_ T, data string) !T { if !data.contains(action_name) { action_name = '${obj_name}.configure' if !data.contains(action_name) { + $if debug{ + print_backtrace() + } return error('Data does not contain action name: ${obj_name}.define or ${action_name}') } } diff --git a/lib/develop/gittools/gittools_do.v b/lib/develop/gittools/gittools_do.v index ac957a6d..4619b8c4 100644 --- a/lib/develop/gittools/gittools_do.v +++ b/lib/develop/gittools/gittools_do.v @@ -43,7 +43,7 @@ pub mut: //``` pub fn (mut gs GitStructure) do(args_ ReposActionsArgs) !string { mut args := args_ - // console.print_debug('git do ${args.cmd}') + console.print_debug('git do ${args.cmd}') if args.path == '' && args.url == '' && args.repo == '' && args.account == '' && args.provider == '' && args.filter == '' { @@ -61,17 +61,6 @@ pub fn (mut gs GitStructure) do(args_ ReposActionsArgs) !string { } } - // see if a url was used means we are in 1 repo - if args.url.len > 0 { - if !(args.repo == '' && args.account == '' && args.provider == '' && args.filter == '') { - return error('when specify url cannot specify repo, account, profider or filter') - } - mut r0 := gs.get_repo(url: args.url)! - args.repo = r0.name - args.account = r0.account - args.provider = r0.provider - } - args.cmd = args.cmd.trim_space().to_lower() mut ui := gui.new()! @@ -128,6 +117,18 @@ pub fn (mut gs GitStructure) do(args_ ReposActionsArgs) !string { return '' } + + // see if a url was used means we are in 1 repo + if args.url.len > 0 { + if !(args.repo == '' && args.account == '' && args.provider == '' && args.filter == '') { + return error('when specify url cannot specify repo, account, profider or filter') + } + mut r0 := gs.get_repo(url: args.url)! + args.repo = r0.name + args.account = r0.account + args.provider = r0.provider + } + if args.cmd in 'pull,push,commit,delete'.split(',') { gs.repos_print( filter: args.filter diff --git a/lib/develop/gittools/repository_clone.v b/lib/develop/gittools/repository_clone.v index 518b783f..a3fc907c 100644 --- a/lib/develop/gittools/repository_clone.v +++ b/lib/develop/gittools/repository_clone.v @@ -24,9 +24,6 @@ pub fn (mut gitstructure GitStructure) clone(args GitCloneArgs) !&GitRepo { git_location := gitstructure.gitlocation_from_url(args.url)! mut repo := gitstructure.repo_new_from_gitlocation(git_location)! - // TODO: this seems to be wrong, we should not set the url here - // repo.status_wanted.url = args.url - // repo.status_wanted.branch = git_location.branch_or_tag mut repopath := repo.patho()! if repopath.exists() {