Matthias Kestenholz | 640ce10 | 2006-08-03 17:24:38 +0200 | [diff] [blame] | 1 | #include "builtin.h" |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 2 | #include "cache.h" |
Junio C Hamano | 8da1977 | 2006-09-20 22:02:01 -0700 | [diff] [blame] | 3 | #include "refs.h" |
Pierre Habouzit | 7855861 | 2007-10-07 23:18:23 +0200 | [diff] [blame] | 4 | #include "parse-options.h" |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 5 | |
Pierre Habouzit | 7855861 | 2007-10-07 23:18:23 +0200 | [diff] [blame] | 6 | static const char * const git_symbolic_ref_usage[] = { |
| 7 | "git-symbolic-ref [options] name [ref]", |
| 8 | NULL |
| 9 | }; |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 10 | |
Junio C Hamano | a0f4280 | 2007-01-15 13:56:05 -0800 | [diff] [blame] | 11 | static void check_symref(const char *HEAD, int quiet) |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 12 | { |
| 13 | unsigned char sha1[20]; |
Junio C Hamano | 8da1977 | 2006-09-20 22:02:01 -0700 | [diff] [blame] | 14 | int flag; |
| 15 | const char *refs_heads_master = resolve_ref(HEAD, sha1, 0, &flag); |
Linus Torvalds | ed378ec | 2006-09-11 20:17:35 -0700 | [diff] [blame] | 16 | |
| 17 | if (!refs_heads_master) |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 18 | die("No such ref: %s", HEAD); |
Junio C Hamano | a0f4280 | 2007-01-15 13:56:05 -0800 | [diff] [blame] | 19 | else if (!(flag & REF_ISSYMREF)) { |
| 20 | if (!quiet) |
| 21 | die("ref %s is not a symbolic ref", HEAD); |
| 22 | else |
| 23 | exit(1); |
| 24 | } |
Linus Torvalds | ed378ec | 2006-09-11 20:17:35 -0700 | [diff] [blame] | 25 | puts(refs_heads_master); |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 26 | } |
| 27 | |
Matthias Kestenholz | 640ce10 | 2006-08-03 17:24:38 +0200 | [diff] [blame] | 28 | int cmd_symbolic_ref(int argc, const char **argv, const char *prefix) |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 29 | { |
Junio C Hamano | a0f4280 | 2007-01-15 13:56:05 -0800 | [diff] [blame] | 30 | int quiet = 0; |
Nicolas Pitre | 8b5157e | 2007-01-26 17:26:10 -0500 | [diff] [blame] | 31 | const char *msg = NULL; |
Pierre Habouzit | 7855861 | 2007-10-07 23:18:23 +0200 | [diff] [blame] | 32 | struct option options[] = { |
| 33 | OPT__QUIET(&quiet), |
| 34 | OPT_STRING('m', NULL, &msg, "reason", "reason of the update"), |
| 35 | OPT_END(), |
| 36 | }; |
Junio C Hamano | a0f4280 | 2007-01-15 13:56:05 -0800 | [diff] [blame] | 37 | |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 38 | git_config(git_default_config, NULL); |
Pierre Habouzit | 7855861 | 2007-10-07 23:18:23 +0200 | [diff] [blame] | 39 | argc = parse_options(argc, argv, options, git_symbolic_ref_usage, 0); |
| 40 | if (msg &&!*msg) |
| 41 | die("Refusing to perform update with empty message"); |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 42 | switch (argc) { |
Pierre Habouzit | 7855861 | 2007-10-07 23:18:23 +0200 | [diff] [blame] | 43 | case 1: |
| 44 | check_symref(argv[0], quiet); |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 45 | break; |
Pierre Habouzit | 7855861 | 2007-10-07 23:18:23 +0200 | [diff] [blame] | 46 | case 2: |
| 47 | create_symref(argv[0], argv[1], msg); |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 48 | break; |
| 49 | default: |
Pierre Habouzit | 7855861 | 2007-10-07 23:18:23 +0200 | [diff] [blame] | 50 | usage_with_options(git_symbolic_ref_usage, options); |
Junio C Hamano | 8098a17 | 2005-09-30 14:26:57 -0700 | [diff] [blame] | 51 | } |
| 52 | return 0; |
| 53 | } |