Started work on better repos cli

main^2
Jef Roosens 2022-04-06 22:41:19 +02:00
parent d7f6c87053
commit f44ce1c17f
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
5 changed files with 41 additions and 33 deletions

View File

@ -3,6 +3,9 @@ module git
import cli
import env
import net.http
import json
import git
import response
struct Config {
address string [required]
@ -28,13 +31,13 @@ pub fn cmd() cli.Command {
cli.Command{
name: 'add'
required_args: 2
usage: 'url branch'
usage: 'url branch arch...'
description: 'Add a new repository.'
execute: fn (cmd cli.Command) ? {
config_file := cmd.flags.get_string('config-file') ?
conf := env.load<Config>(config_file) ?
add(conf, cmd.args[0], cmd.args[1]) ?
add(conf, cmd.args[0], cmd.args[1], cmd.args[2..]) ?
}
},
cli.Command{
@ -58,12 +61,15 @@ fn list(conf Config) ? {
req.add_custom_header('X-API-Key', conf.api_key) ?
res := req.do() ?
data := json.decode(response.Response<map[string]git.GitRepo>, res.text) ?
println(res.text)
for id, details in data.data {
println("${id[..8]}\t$details.url\t$details.branch\t$details.arch")
}
}
fn add(conf Config, url string, branch string) ? {
mut req := http.new_request(http.Method.post, '$conf.address/api/repos?url=$url&branch=$branch',
fn add(conf Config, url string, branch string, arch []string) ? {
mut req := http.new_request(http.Method.post, '$conf.address/api/repos?url=$url&branch=$branch&arch=${arch.join(',')}',
'') ?
req.add_custom_header('X-API-Key', conf.api_key) ?

27
src/response.v 100644
View File

@ -0,0 +1,27 @@
module response
pub struct Response<T> {
message string
data T
}
pub fn new_response(message string) Response<string> {
return Response<string>{
message: message
data: ''
}
}
pub fn new_data_response<T>(data T) Response<T> {
return Response<T>{
message: ''
data: data
}
}
pub fn new_full_response<T>(message string, data T) Response<T> {
return Response<T>{
message: message
data: data
}
}

View File

@ -4,6 +4,7 @@ import web
import git
import net.http
import rand
import response { new_response, new_data_response }
const repos_file = 'repos.json'
@ -15,7 +16,7 @@ fn (mut app App) get_repos() web.Result {
repos := rlock app.git_mutex {
git.read_repos(app.conf.repos_file) or {
app.lerror('Failed to read repos file.')
app.lerror('Failed to read repos file: $err.msg')
return app.status(http.Status.internal_server_error)
}

View File

@ -1,27 +0,0 @@
module server
struct Response<T> {
message string
data T
}
fn new_response(message string) Response<string> {
return Response<string>{
message: message
data: ''
}
}
fn new_data_response<T>(data T) Response<T> {
return Response<T>{
message: ''
data: data
}
}
fn new_full_response<T>(message string, data T) Response<T> {
return Response<T>{
message: message
data: data
}
}

View File

@ -7,6 +7,7 @@ import time
import rand
import util
import net.http
import response { new_response, new_data_response }
// healthcheck just returns a string, but can be used to quickly check if the
// server is still responsive.