mirror of
https://github.com/xHyroM/gimi.git
synced 2024-11-21 15:41:04 +01:00
feat: push command
This commit is contained in:
parent
383ed08994
commit
d72999fd9e
4 changed files with 89 additions and 2 deletions
|
@ -2,6 +2,7 @@
|
|||
#include "command/config.h"
|
||||
#include "command/init.h"
|
||||
#include "command/provider.h"
|
||||
#include "command/push.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@ -31,5 +32,9 @@ int cli_handle(int argc, char **argv) {
|
|||
return cli_command_provider(argc, argv);
|
||||
}
|
||||
|
||||
if (strcmp(sub_command, "push") == 0) {
|
||||
return cli_command_push(argc, argv);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -61,8 +61,8 @@ int provider_sync(int argc, char **argv) {
|
|||
config_free(cfg);
|
||||
|
||||
char command[100];
|
||||
snprintf(command, sizeof(command), "git remote add %s %s", provider->name,
|
||||
provider->ssh);
|
||||
snprintf(command, sizeof(command), "git remote add gimi-%s %s",
|
||||
provider->name, provider->ssh);
|
||||
|
||||
int ret = system(command);
|
||||
if (ret != 0) {
|
||||
|
|
81
src/cli/command/push.c
Normal file
81
src/cli/command/push.c
Normal file
|
@ -0,0 +1,81 @@
|
|||
#include "../../config.h"
|
||||
#include <linux/limits.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
char *get_current_branch_name() {
|
||||
FILE *file_ptr;
|
||||
static char output[256];
|
||||
|
||||
file_ptr = popen("git rev-parse --abbrev-ref HEAD", "r");
|
||||
if (file_ptr == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *branch = fgets(output, sizeof(output), file_ptr);
|
||||
if (branch != NULL) {
|
||||
// remove new line
|
||||
size_t len = strlen(branch);
|
||||
if (len > 0 && branch[len - 1] == '\n') {
|
||||
branch[len - 1] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
pclose(file_ptr);
|
||||
|
||||
return branch;
|
||||
}
|
||||
|
||||
int git_push(char *provider_name, char *branch_name, bool verbose) {
|
||||
FILE *file_ptr;
|
||||
char output[1024];
|
||||
char command[256];
|
||||
|
||||
snprintf(command, sizeof(command), "git push gimi-%s %s 2>&1", provider_name,
|
||||
branch_name);
|
||||
|
||||
file_ptr = popen(command, "r");
|
||||
if (file_ptr == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
while (fgets(output, sizeof(output), file_ptr) !=
|
||||
NULL) { // need to process for valid exit code
|
||||
if (verbose) {
|
||||
printf("%s", output);
|
||||
}
|
||||
}
|
||||
|
||||
int ret = WEXITSTATUS(pclose(file_ptr));
|
||||
return ret;
|
||||
}
|
||||
|
||||
int cli_command_push(int argc, char **argv) {
|
||||
struct gimi_config *cfg = config_read();
|
||||
if (!cfg)
|
||||
return 1;
|
||||
|
||||
bool verbose = argc == 2 && strcmp(argv[1], "--verbose") == 0;
|
||||
|
||||
char *branch_name = get_current_branch_name();
|
||||
|
||||
for (int i = 0; i < 1; i++) {
|
||||
struct gimi_config_provider *provider = cfg->providers[i];
|
||||
|
||||
int ret = git_push(provider->name, branch_name, verbose);
|
||||
if (ret != 0) {
|
||||
printf("error: failed to push into '%s' with git's exit code %d.\n",
|
||||
provider->name, ret);
|
||||
break;
|
||||
}
|
||||
|
||||
printf("info: successfully pushed into '%s'.\n", provider->name);
|
||||
}
|
||||
|
||||
config_free(cfg);
|
||||
|
||||
return 0;
|
||||
}
|
1
src/cli/command/push.h
Normal file
1
src/cli/command/push.h
Normal file
|
@ -0,0 +1 @@
|
|||
int cli_command_push(int argc, char **argv);
|
Loading…
Reference in a new issue