forked from vieter-v/vieter
				
			Added patch support to repos cli
							parent
							
								
									ab72c800c3
								
							
						
					
					
						commit
						c6d176f426
					
				|  | @ -48,10 +48,76 @@ pub fn cmd() cli.Command { | |||
| 					remove(conf, cmd.args[0]) ? | ||||
| 				} | ||||
| 			}, | ||||
| 			cli.Command{ | ||||
| 				name: 'edit' | ||||
| 				required_args: 1 | ||||
| 				usage: 'id' | ||||
| 				description: 'Edit the repository that matches the given ID prefix.' | ||||
| 				flags: [ | ||||
| 					cli.Flag{ | ||||
| 						name: 'url' | ||||
| 						description: 'URL of the Git repository.' | ||||
| 						flag: cli.FlagType.string | ||||
| 					}, | ||||
| 					cli.Flag{ | ||||
| 						name: 'branch' | ||||
| 						description: 'Branch of the Git repository.' | ||||
| 						flag: cli.FlagType.string | ||||
| 					}, | ||||
| 					cli.Flag{ | ||||
| 						name: 'repo' | ||||
| 						description: 'Repo to publish builds to.' | ||||
| 						flag: cli.FlagType.string | ||||
| 					}, | ||||
| 					cli.Flag{ | ||||
| 						name: 'arch' | ||||
| 						description: 'Comma-separated list of architectures to build on.' | ||||
| 						flag: cli.FlagType.string | ||||
| 					}, | ||||
| 				] | ||||
| 				execute: fn (cmd cli.Command) ? { | ||||
| 					config_file := cmd.flags.get_string('config-file') ? | ||||
| 					conf := env.load<Config>(config_file) ? | ||||
| 
 | ||||
| 					found := cmd.flags.get_all_found() | ||||
| 
 | ||||
| 					mut params := map[string]string{} | ||||
| 
 | ||||
| 					for f in found { | ||||
| 						if f.name != 'config-file' { | ||||
| 							params[f.name] = f.get_string() ? | ||||
| 						} | ||||
| 					} | ||||
| 
 | ||||
| 					patch(conf, cmd.args[0], params) ? | ||||
| 				} | ||||
| 			}, | ||||
| 		] | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| fn get_repo_id_by_prefix(conf Config, id_prefix string) ?string { | ||||
| 	repos := get_repos(conf.address, conf.api_key) ? | ||||
| 
 | ||||
| 	mut res := []string{} | ||||
| 
 | ||||
| 	for id, _ in repos { | ||||
| 		if id.starts_with(id_prefix) { | ||||
| 			res << id | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if res.len == 0 { | ||||
| 		eprintln('No repo found for given prefix.') | ||||
| 	} | ||||
| 
 | ||||
| 	if res.len > 1 { | ||||
| 		eprintln('Multiple repos found for given prefix.') | ||||
| 	} | ||||
| 
 | ||||
| 	return res[0] | ||||
| } | ||||
| 
 | ||||
| fn list(conf Config) ? { | ||||
| 	repos := get_repos(conf.address, conf.api_key) ? | ||||
| 
 | ||||
|  | @ -67,27 +133,15 @@ fn add(conf Config, url string, branch string, repo string, arch []string) ? { | |||
| } | ||||
| 
 | ||||
| fn remove(conf Config, id_prefix string) ? { | ||||
| 	repos := get_repos(conf.address, conf.api_key) ? | ||||
| 
 | ||||
| 	mut to_remove := []string{} | ||||
| 
 | ||||
| 	for id, _ in repos { | ||||
| 		if id.starts_with(id_prefix) { | ||||
| 			to_remove << id | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if to_remove.len == 0 { | ||||
| 		eprintln('No repo found for given prefix.') | ||||
| 		exit(1) | ||||
| 	} | ||||
| 
 | ||||
| 	if to_remove.len > 1 { | ||||
| 		eprintln('Multiple repos found for given prefix.') | ||||
| 		exit(1) | ||||
| 	} | ||||
| 
 | ||||
| 	res := remove_repo(conf.address, conf.api_key, to_remove[0]) ? | ||||
| 	id := get_repo_id_by_prefix(conf, id_prefix) ? | ||||
| 	res := remove_repo(conf.address, conf.api_key, id) ? | ||||
| 
 | ||||
| 	println(res.message) | ||||
| } | ||||
| 
 | ||||
| fn patch(conf Config, id_prefix string, params map[string]string) ? { | ||||
| 	id := get_repo_id_by_prefix(conf, id_prefix) ? | ||||
| 	res := patch_repo(conf.address, conf.api_key, id, params) ? | ||||
| 
 | ||||
| 	println(res.message) | ||||
| } | ||||
|  |  | |||
|  | @ -50,3 +50,12 @@ pub fn remove_repo(address string, api_key string, id string) ?Response<string> | |||
| 
 | ||||
| 	return data | ||||
| } | ||||
| 
 | ||||
| // patch_repo sends a PATCH request to the given repo with the params as | ||||
| // payload. | ||||
| pub fn patch_repo(address string, api_key string, id string, params map[string]string) ?Response<string> { | ||||
| 	data := send_request<string>(http.Method.patch, address, '/api/repos/$id', api_key, | ||||
| 		params) ? | ||||
| 
 | ||||
| 	return data | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue