4 #include "parse-options.h"
6 static const char * const git_update_ref_usage
[] = {
7 "git-update-ref [options] -d <refname> <oldval>",
8 "git-update-ref [options] <refname> <newval> [<oldval>]",
12 int cmd_update_ref(int argc
, const char **argv
, const char *prefix
)
14 const char *refname
, *value
, *oldval
, *msg
=NULL
;
15 unsigned char sha1
[20], oldsha1
[20];
16 int delete = 0, no_deref
= 0;
17 struct option options
[] = {
18 OPT_STRING( 'm', NULL
, &msg
, "reason", "reason of the update"),
19 OPT_BOOLEAN('d', NULL
, &delete, "deletes the reference"),
20 OPT_BOOLEAN( 0 , "no-deref", &no_deref
,
21 "update <refname> not the one it points to"),
25 git_config(git_default_config
);
26 argc
= parse_options(argc
, argv
, options
, git_update_ref_usage
, 0);
28 die("Refusing to perform update with empty message.");
30 if (argc
< 2 || argc
> 3)
31 usage_with_options(git_update_ref_usage
, options
);
36 if (get_sha1(value
, sha1
))
37 die("%s: not a valid SHA1", value
);
41 usage_with_options(git_update_ref_usage
, options
);
42 return delete_ref(refname
, sha1
);
46 if (oldval
&& *oldval
&& get_sha1(oldval
, oldsha1
))
47 die("%s: not a valid old SHA1", oldval
);
49 return update_ref(msg
, refname
, sha1
, oldval
? oldsha1
: NULL
,
50 no_deref
? REF_NODEREF
: 0, DIE_ON_ERR
);