78d789c62d9f80c21f701d65594f8b7c994e2e8b
   1#include "cache.h"
   2#include "pack.h"
   3
   4static int verify_one_pack(const char *path, int verbose)
   5{
   6        char arg[PATH_MAX];
   7        int len;
   8        struct packed_git *pack;
   9        int err;
  10
  11        len = strlcpy(arg, path, PATH_MAX);
  12        if (len >= PATH_MAX)
  13                return error("name too long: %s", path);
  14
  15        /*
  16         * In addition to "foo.idx" we accept "foo.pack" and "foo";
  17         * normalize these forms to "foo.idx" for add_packed_git().
  18         */
  19        if (has_extension(arg, len, ".pack")) {
  20                strcpy(arg + len - 5, ".idx");
  21                len--;
  22        } else if (!has_extension(arg, len, ".idx")) {
  23                if (len + 4 >= PATH_MAX)
  24                        return error("name too long: %s.idx", arg);
  25                strcpy(arg + len, ".idx");
  26                len += 4;
  27        }
  28
  29        pack = add_packed_git(arg, len, 1);
  30        if (!pack)
  31                return error("packfile %s not found.", arg);
  32
  33        err = verify_pack(pack, verbose);
  34        free(pack);
  35
  36        return err;
  37}
  38
  39static const char verify_pack_usage[] = "git-verify-pack [-v] <pack>...";
  40
  41int main(int ac, char **av)
  42{
  43        int errs = 0;
  44        int verbose = 0;
  45        int no_more_options = 0;
  46        int nothing_done = 1;
  47
  48        while (1 < ac) {
  49                if (!no_more_options && av[1][0] == '-') {
  50                        if (!strcmp("-v", av[1]))
  51                                verbose = 1;
  52                        else if (!strcmp("--", av[1]))
  53                                no_more_options = 1;
  54                        else
  55                                usage(verify_pack_usage);
  56                }
  57                else {
  58                        if (verify_one_pack(av[1], verbose))
  59                                errs++;
  60                        nothing_done = 0;
  61                }
  62                ac--; av++;
  63        }
  64
  65        if (nothing_done)
  66                usage(verify_pack_usage);
  67
  68        return !!errs;
  69}