Skip to content

Commit 1fbeb2d

Browse files
committed
Replace argument handling with argp
Replace current argument handling logic with argp parsing introduced in the previous commit.
1 parent bc00434 commit 1fbeb2d

File tree

1 file changed

+20
-110
lines changed

1 file changed

+20
-110
lines changed

src/main.c

Lines changed: 20 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,13 @@
2222
#define REMOTE_BUFSIZE 8
2323
#define ASSET_BUFSIZE 8
2424

25-
char opt_draft = 0;
26-
char opt_prerelease = 0;
27-
char *opt_remote;
28-
const char *opt_github_token = NULL;
29-
const char **opt_assets;
30-
3125
const char *argv0;
3226
const char *base_url = "https://api.github.com";
3327

3428
int main(int argc, char *argv[])
3529
{
3630
struct arguments args = parse_options(argc, argv);
37-
printf("draft: %s\npre: %s\ntok: %s\ngen: %s\nrem: %s\n",
38-
args.draft ? "yes" : "no",
39-
args.prerelease ? "yes" : "no",
40-
args.token,
41-
args.generate_token ? "yes" : "no",
42-
args.remote);
43-
printf("assets:\n");
44-
for (int i = 0; args.assets[i]; i++)
45-
printf("%s\n", args.assets[i]);
46-
return 0;
47-
4831
argv0 = argv[0];
49-
int n_assets;
50-
/* int result = parse_options(argc, argv, &n_assets); */
51-
/* if (result) */
52-
/* return result; */
5332

5433
// initialize git
5534
git_libgit2_init();
@@ -82,10 +61,10 @@ int main(int argc, char *argv[])
8261

8362
// set the preferred remote
8463
FILE *remote_file;
85-
if (opt_remote)
64+
if (args.remote)
8665
{
8766
// get from command-line option
88-
if (git_remote_lookup(&preferred_remote, repo, opt_remote))
67+
if (git_remote_lookup(&preferred_remote, repo, args.remote))
8968
{
9069
h_git_error();
9170
return 1;
@@ -200,13 +179,13 @@ int main(int argc, char *argv[])
200179
if (access(".hubrelease_message", F_OK) != -1)
201180
{
202181
// user already wrote the message
203-
if (opt_draft)
182+
if (args.draft)
204183
{
205184
fprintf(stderr, ERR "--draft set with pre-written release message\n");
206185
return 1;
207186
}
208187
}
209-
else if (opt_draft)
188+
else if (args.draft)
210189
{
211190
// write tag message to release message file
212191
FILE *release_message = fopen(".hubrelease_message", "w");
@@ -255,10 +234,10 @@ int main(int argc, char *argv[])
255234
}
256235

257236
// ensure token exists
258-
if (!opt_github_token)
237+
if (!args.token)
259238
// not passed on command line
260-
opt_github_token = getenv("HUBRELEASE_GITHUB_TOKEN");
261-
if (!opt_github_token)
239+
args.token = getenv("HUBRELEASE_GITHUB_TOKEN");
240+
if (!args.token)
262241
{
263242
// not passed through env var
264243
fprintf(stderr, ERR "No GitHub token supplied\n");
@@ -288,7 +267,7 @@ int main(int argc, char *argv[])
288267
// set headers
289268
struct curl_slist *chunk = NULL;
290269
char *auth_header = malloc(MAX_HEADER * sizeof(char));
291-
sprintf(auth_header, "Authorization: token %s", opt_github_token);
270+
sprintf(auth_header, "Authorization: token %s", args.token);
292271
chunk = curl_slist_append(chunk, auth_header);
293272
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
294273

@@ -324,8 +303,8 @@ int main(int argc, char *argv[])
324303
"tag_name", git_tag_name(head_tag),
325304
"name", name,
326305
"body", body,
327-
"draft", opt_draft,
328-
"prerelease", opt_prerelease);
306+
"draft", args.draft,
307+
"prerelease", args.prerelease);
329308
char *data = json_dumps(data_json, JSON_INDENT(4));
330309
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
331310

@@ -378,7 +357,7 @@ int main(int argc, char *argv[])
378357
printf("%s\n", html_url);
379358

380359
// upload assets
381-
if (n_assets > 0)
360+
if (args.assets)
382361
{
383362
// get upload url
384363
json_t *upload_field = json_object_get(root, "upload_url");
@@ -389,24 +368,24 @@ int main(int argc, char *argv[])
389368
base_upload_url[len - n] = '\0';
390369

391370
// get asset files
392-
for (int i = 0; i < n_assets; i++)
371+
for (int i = 0; args.assets[i]; i++)
393372
{
394-
fprintf(stderr, INFO "Uploading asset %s\n", opt_assets[i]);
373+
fprintf(stderr, INFO "Uploading asset %s\n", args.assets[i]);
395374
struct stat asset_stat;
396-
if (stat(opt_assets[i], &asset_stat) == -1)
375+
if (stat(args.assets[i], &asset_stat) == -1)
397376
{
398-
fprintf(stderr, ERR "Error with asset %s:\n", opt_assets[i]);
377+
fprintf(stderr, ERR "Error with asset %s:\n", args.assets[i]);
399378
perror(argv0);
400379
continue;
401380
}
402381
if (asset_stat.st_size == 0)
403382
{
404-
fprintf(stderr, ERR "Empty asset file: %s\n", opt_assets[i]);
383+
fprintf(stderr, ERR "Empty asset file: %s\n", args.assets[i]);
405384
return 1;
406385
}
407386

408-
char *upload_url = malloc((strlen(base_upload_url) + strlen(opt_assets[i]) + strlen("?name=")) * sizeof(char));
409-
sprintf(upload_url, "%s?name=%s", base_upload_url, opt_assets[i]);
387+
char *upload_url = malloc((strlen(base_upload_url) + strlen(args.assets[i]) + strlen("?name=")) * sizeof(char));
388+
sprintf(upload_url, "%s?name=%s", base_upload_url, args.assets[i]);
410389

411390
// sanitize url
412391
// TODO do this properly
@@ -438,7 +417,7 @@ int main(int argc, char *argv[])
438417
chunk = curl_slist_append(chunk, "Content-Type: application/gzip");
439418

440419
char *auth_header = malloc(MAX_HEADER * sizeof(char));
441-
sprintf(auth_header, "Authorization: token %s", opt_github_token);
420+
sprintf(auth_header, "Authorization: token %s", args.token);
442421
chunk = curl_slist_append(chunk, auth_header);
443422
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
444423

@@ -453,7 +432,7 @@ int main(int argc, char *argv[])
453432
curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");
454433

455434
// tell curl to upload the file
456-
FILE *asset_file = fopen(opt_assets[i], "r");
435+
FILE *asset_file = fopen(args.assets[i], "r");
457436

458437
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
459438
curl_easy_setopt(curl, CURLOPT_READDATA, asset_file);
@@ -501,72 +480,3 @@ int main(int argc, char *argv[])
501480
}
502481
}
503482
}
504-
505-
/* int parse_options(int argc, char *argv[], int *n_assets) */
506-
/* { */
507-
/* *n_assets = 0; */
508-
/* int asset_bufsize = 0; */
509-
/* opt_assets = malloc(asset_bufsize * sizeof(char*)); */
510-
/* for (int i = 1; i < argc; i++) */
511-
/* { */
512-
/* if (strcmp(argv[i], "--draft") == 0) */
513-
/* opt_draft = 1; */
514-
/* if (strcmp(argv[i], "--prerelease") == 0) */
515-
/* opt_prerelease = 1; */
516-
/* if (strcmp(argv[i], "--token") == 0) */
517-
/* { */
518-
/* if (argv[i + 1][0] == '-' || !argv[i + 1]) */
519-
/* { */
520-
/* fprintf(stderr, ERR "Option %s requires argument\n", argv[i]); */
521-
/* return 1; */
522-
/* } */
523-
/* char *arg_github_token = malloc(strlen(argv[i + 1]) * sizeof(char)); */
524-
/* strcpy(arg_github_token, argv[i + 1]); */
525-
/* opt_github_token = arg_github_token; */
526-
/* } */
527-
/* if (strcmp(argv[i], "--generate-token") == 0) */
528-
/* { */
529-
/* puts(github_generate_token()); */
530-
/* return 0; */
531-
/* } */
532-
/* if (strcmp(argv[i], "--remote") == 0) */
533-
/* { */
534-
/* if (argv[i + 1][0] == '-' || !argv[i + 1]) */
535-
/* { */
536-
/* fprintf(stderr, ERR "Option %s requires argument\n", argv[i]); */
537-
/* return 1; */
538-
/* } */
539-
/* opt_remote = malloc(strlen(argv[i + 1]) * sizeof(char)); */
540-
/* strcpy(opt_remote, argv[i + 1]); */
541-
/* } */
542-
/* if (strcmp(argv[i], "--assets") == 0) */
543-
/* { */
544-
/* if (argv[i + 1][0] == '-' || !argv[i + 1]) */
545-
/* { */
546-
/* fprintf(stderr, ERR "Option %s requires argument\n", argv[i]); */
547-
/* return 1; */
548-
/* } */
549-
550-
/* i++; */
551-
/* for (i; i < argc && argv[i][0] != '-'; i++) */
552-
/* { */
553-
/* char dup = 0; */
554-
/* for (int j = 0; j < *n_assets; j++) */
555-
/* { */
556-
/* if (strcmp(opt_assets[j], argv[i]) == 0) */
557-
/* dup = 1; */
558-
/* } */
559-
/* if (dup) */
560-
/* continue; */
561-
562-
/* if (*n_assets + 1 > asset_bufsize) */
563-
/* { */
564-
/* asset_bufsize += ASSET_BUFSIZE; */
565-
/* opt_assets = realloc(opt_assets, asset_bufsize * sizeof(char*)); */
566-
/* } */
567-
/* opt_assets[(*n_assets)++] = argv[i]; */
568-
/* } */
569-
/* } */
570-
/* } */
571-
/* return 0; */
572-
/* } */

0 commit comments

Comments
 (0)