Linus Torvalds | 6683463 | 2005-04-17 12:18:17 -0700 | [diff] [blame] | 1 | #include "cache.h" |
Daniel Barkalow | b5039db | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 2 | #include "commit.h" |
Linus Torvalds | 6683463 | 2005-04-17 12:18:17 -0700 | [diff] [blame] | 3 | |
David Rientjes | 96f1e58 | 2006-08-15 10:23:48 -0700 | [diff] [blame] | 4 | static int show_all; |
Johannes Schindelin | 52cab8a | 2006-06-29 15:16:46 +0200 | [diff] [blame] | 5 | |
| 6 | static int merge_base(struct commit *rev1, struct commit *rev2) |
| 7 | { |
Rene Scharfe | c0fa825 | 2006-07-02 11:49:38 +0200 | [diff] [blame] | 8 | struct commit_list *result = get_merge_bases(rev1, rev2, 0); |
Johannes Schindelin | 52cab8a | 2006-06-29 15:16:46 +0200 | [diff] [blame] | 9 | |
| 10 | if (!result) |
| 11 | return 1; |
| 12 | |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 13 | while (result) { |
Johannes Schindelin | 52cab8a | 2006-06-29 15:16:46 +0200 | [diff] [blame] | 14 | printf("%s\n", sha1_to_hex(result->item->object.sha1)); |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 15 | if (!show_all) |
| 16 | return 0; |
Johannes Schindelin | 52cab8a | 2006-06-29 15:16:46 +0200 | [diff] [blame] | 17 | result = result->next; |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 18 | } |
Johannes Schindelin | 52cab8a | 2006-06-29 15:16:46 +0200 | [diff] [blame] | 19 | |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 20 | return 0; |
Linus Torvalds | 6683463 | 2005-04-17 12:18:17 -0700 | [diff] [blame] | 21 | } |
| 22 | |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 23 | static const char merge_base_usage[] = |
| 24 | "git-merge-base [--all] <commit-id> <commit-id>"; |
| 25 | |
Linus Torvalds | 6683463 | 2005-04-17 12:18:17 -0700 | [diff] [blame] | 26 | int main(int argc, char **argv) |
| 27 | { |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 28 | struct commit *rev1, *rev2; |
Daniel Barkalow | b5039db | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 29 | unsigned char rev1key[20], rev2key[20]; |
Linus Torvalds | 6683463 | 2005-04-17 12:18:17 -0700 | [diff] [blame] | 30 | |
Junio C Hamano | 53228a5 | 2005-11-26 00:50:02 -0800 | [diff] [blame] | 31 | setup_git_directory(); |
Junio C Hamano | 84a9b58 | 2006-03-23 23:41:18 -0800 | [diff] [blame] | 32 | git_config(git_default_config); |
Junio C Hamano | 53228a5 | 2005-11-26 00:50:02 -0800 | [diff] [blame] | 33 | |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 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 | } |
Dmitry V. Levin | 31fff30 | 2006-05-09 01:43:38 +0400 | [diff] [blame] | 42 | if (argc != 3) |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 43 | usage(merge_base_usage); |
Dmitry V. Levin | 31fff30 | 2006-05-09 01:43:38 +0400 | [diff] [blame] | 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]); |
Linus Torvalds | 9b632be | 2005-05-18 16:16:51 -0700 | [diff] [blame] | 48 | rev1 = lookup_commit_reference(rev1key); |
| 49 | rev2 = lookup_commit_reference(rev2key); |
Linus Torvalds | 4f7eb2e | 2005-07-30 15:10:20 -0700 | [diff] [blame] | 50 | if (!rev1 || !rev2) |
| 51 | return 1; |
Junio C Hamano | 9585e40 | 2005-08-23 21:08:59 -0700 | [diff] [blame] | 52 | return merge_base(rev1, rev2); |
Linus Torvalds | 6683463 | 2005-04-17 12:18:17 -0700 | [diff] [blame] | 53 | } |