t / helper / test-submodule-config.con commit t4030: abstract away SHA-1-specific constants (a6c5799)
   1#include "test-tool.h"
   2#include "cache.h"
   3#include "config.h"
   4#include "submodule-config.h"
   5#include "submodule.h"
   6
   7static void die_usage(int argc, const char **argv, const char *msg)
   8{
   9        fprintf(stderr, "%s\n", msg);
  10        fprintf(stderr, "Usage: %s [<commit> <submodulepath>] ...\n", argv[0]);
  11        exit(1);
  12}
  13
  14int cmd__submodule_config(int argc, const char **argv)
  15{
  16        const char **arg = argv;
  17        int my_argc = argc;
  18        int output_url = 0;
  19        int lookup_name = 0;
  20
  21        arg++;
  22        my_argc--;
  23        while (arg[0] && starts_with(arg[0], "--")) {
  24                if (!strcmp(arg[0], "--url"))
  25                        output_url = 1;
  26                if (!strcmp(arg[0], "--name"))
  27                        lookup_name = 1;
  28                arg++;
  29                my_argc--;
  30        }
  31
  32        if (my_argc % 2 != 0)
  33                die_usage(argc, argv, "Wrong number of arguments.");
  34
  35        setup_git_directory();
  36
  37        while (*arg) {
  38                struct object_id commit_oid;
  39                const struct submodule *submodule;
  40                const char *commit;
  41                const char *path_or_name;
  42
  43                commit = arg[0];
  44                path_or_name = arg[1];
  45
  46                if (commit[0] == '\0')
  47                        oidclr(&commit_oid);
  48                else if (get_oid(commit, &commit_oid) < 0)
  49                        die_usage(argc, argv, "Commit not found.");
  50
  51                if (lookup_name) {
  52                        submodule = submodule_from_name(the_repository,
  53                                                        &commit_oid, path_or_name);
  54                } else
  55                        submodule = submodule_from_path(the_repository,
  56                                                        &commit_oid, path_or_name);
  57                if (!submodule)
  58                        die_usage(argc, argv, "Submodule not found.");
  59
  60                if (output_url)
  61                        printf("Submodule url: '%s' for path '%s'\n",
  62                                        submodule->url, submodule->path);
  63                else
  64                        printf("Submodule name: '%s' for path '%s'\n",
  65                                        submodule->name, submodule->path);
  66
  67                arg += 2;
  68        }
  69
  70        submodule_free(the_repository);
  71
  72        return 0;
  73}