merge-base.con commit Allow fetch-pack to decide keeping the fetched pack without exploding (9e10fd1)
   1#include "cache.h"
   2#include "commit.h"
   3
   4static int show_all;
   5
   6static int merge_base(struct commit *rev1, struct commit *rev2)
   7{
   8        struct commit_list *result = get_merge_bases(rev1, rev2, 0);
   9
  10        if (!result)
  11                return 1;
  12
  13        while (result) {
  14                printf("%s\n", sha1_to_hex(result->item->object.sha1));
  15                if (!show_all)
  16                        return 0;
  17                result = result->next;
  18        }
  19
  20        return 0;
  21}
  22
  23static const char merge_base_usage[] =
  24"git-merge-base [--all] <commit-id> <commit-id>";
  25
  26int main(int argc, char **argv)
  27{
  28        struct commit *rev1, *rev2;
  29        unsigned char rev1key[20], rev2key[20];
  30
  31        setup_git_directory();
  32        git_config(git_default_config);
  33
  34        while (1 < argc && argv[1][0] == '-') {
  35                char *arg = argv[1];
  36                if (!strcmp(arg, "-a") || !strcmp(arg, "--all"))
  37                        show_all = 1;
  38                else
  39                        usage(merge_base_usage);
  40                argc--; argv++;
  41        }
  42        if (argc != 3)
  43                usage(merge_base_usage);
  44        if (get_sha1(argv[1], rev1key))
  45                die("Not a valid object name %s", argv[1]);
  46        if (get_sha1(argv[2], rev2key))
  47                die("Not a valid object name %s", argv[2]);
  48        rev1 = lookup_commit_reference(rev1key);
  49        rev2 = lookup_commit_reference(rev2key);
  50        if (!rev1 || !rev2)
  51                return 1;
  52        return merge_base(rev1, rev2);
  53}