]> git.ipfire.org Git - thirdparty/git.git/blobdiff - builtin/bundle.c
bundle API: change "flags" to be "extra_index_pack_args"
[thirdparty/git.git] / builtin / bundle.c
index ea6948110b0fc933c81585a33b67a1121acde35b..9b86c8529c79b784f9528599c6eda7a540cc0f9f 100644 (file)
@@ -46,7 +46,7 @@ static int parse_options_cmd_bundle(int argc,
                const char* prefix,
                const char * const usagestr[],
                const struct option options[],
-               const char **bundle_file) {
+               char **bundle_file) {
        int newargc;
        newargc = parse_options(argc, argv, NULL, options, usagestr,
                             PARSE_OPT_STOP_AT_NON_OPTION);
@@ -61,7 +61,7 @@ static int cmd_bundle_create(int argc, const char **argv, const char *prefix) {
        int progress = isatty(STDERR_FILENO);
        struct strvec pack_opts;
        int version = -1;
-
+       int ret;
        struct option options[] = {
                OPT_SET_INT('q', "quiet", &progress,
                            N_("do not show progress meter"), 0),
@@ -76,7 +76,7 @@ static int cmd_bundle_create(int argc, const char **argv, const char *prefix) {
                            N_("specify bundle format version")),
                OPT_END()
        };
-       const char* bundle_file;
+       char *bundle_file;
 
        argc = parse_options_cmd_bundle(argc, argv, prefix,
                        builtin_bundle_create_usage, options, &bundle_file);
@@ -94,75 +94,97 @@ static int cmd_bundle_create(int argc, const char **argv, const char *prefix) {
 
        if (!startup_info->have_repository)
                die(_("Need a repository to create a bundle."));
-       return !!create_bundle(the_repository, bundle_file, argc, argv, &pack_opts, version);
+       ret = !!create_bundle(the_repository, bundle_file, argc, argv, &pack_opts, version);
+       free(bundle_file);
+       return ret;
 }
 
 static int cmd_bundle_verify(int argc, const char **argv, const char *prefix) {
-       struct bundle_header header;
+       struct bundle_header header = BUNDLE_HEADER_INIT;
        int bundle_fd = -1;
        int quiet = 0;
-
+       int ret;
        struct option options[] = {
                OPT_BOOL('q', "quiet", &quiet,
                            N_("do not show bundle details")),
                OPT_END()
        };
-       const char* bundle_file;
+       char *bundle_file;
 
        argc = parse_options_cmd_bundle(argc, argv, prefix,
                        builtin_bundle_verify_usage, options, &bundle_file);
        /* bundle internals use argv[1] as further parameters */
 
-       memset(&header, 0, sizeof(header));
-       if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0)
-               return 1;
+       if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0) {
+               ret = 1;
+               goto cleanup;
+       }
        close(bundle_fd);
-       if (verify_bundle(the_repository, &header, !quiet))
-               return 1;
+       if (verify_bundle(the_repository, &header, !quiet)) {
+               ret = 1;
+               goto cleanup;
+       }
+
        fprintf(stderr, _("%s is okay\n"), bundle_file);
-       return 0;
+       ret = 0;
+cleanup:
+       free(bundle_file);
+       bundle_header_release(&header);
+       return ret;
 }
 
 static int cmd_bundle_list_heads(int argc, const char **argv, const char *prefix) {
-       struct bundle_header header;
+       struct bundle_header header = BUNDLE_HEADER_INIT;
        int bundle_fd = -1;
-
+       int ret;
        struct option options[] = {
                OPT_END()
        };
-       const char* bundle_file;
+       char *bundle_file;
 
        argc = parse_options_cmd_bundle(argc, argv, prefix,
                        builtin_bundle_list_heads_usage, options, &bundle_file);
        /* bundle internals use argv[1] as further parameters */
 
-       memset(&header, 0, sizeof(header));
-       if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0)
-               return 1;
+       if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0) {
+               ret = 1;
+               goto cleanup;
+       }
        close(bundle_fd);
-       return !!list_bundle_refs(&header, argc, argv);
+       ret = !!list_bundle_refs(&header, argc, argv);
+cleanup:
+       free(bundle_file);
+       bundle_header_release(&header);
+       return ret;
 }
 
 static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix) {
-       struct bundle_header header;
+       struct bundle_header header = BUNDLE_HEADER_INIT;
        int bundle_fd = -1;
-
+       int ret;
        struct option options[] = {
                OPT_END()
        };
-       const char* bundle_file;
+       char *bundle_file;
+       struct strvec extra_index_pack_args = STRVEC_INIT;
 
        argc = parse_options_cmd_bundle(argc, argv, prefix,
                        builtin_bundle_unbundle_usage, options, &bundle_file);
        /* bundle internals use argv[1] as further parameters */
 
-       memset(&header, 0, sizeof(header));
-       if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0)
-               return 1;
+       if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0) {
+               ret = 1;
+               goto cleanup;
+       }
        if (!startup_info->have_repository)
                die(_("Need a repository to unbundle."));
-       return !!unbundle(the_repository, &header, bundle_fd, 0) ||
+       ret = !!unbundle(the_repository, &header, bundle_fd,
+                        &extra_index_pack_args) ||
                list_bundle_refs(&header, argc, argv);
+       bundle_header_release(&header);
+cleanup:
+       free(bundle_file);
+       return ret;
 }
 
 int cmd_bundle(int argc, const char **argv, const char *prefix)