Signed-off-by: Pierre Habouzit <madcoder@debian.org>
---
builtin-update-ref.c | 71 +++++++++++++++++++++-----------------------------
1 files changed, 30 insertions(+), 41 deletions(-)
diff --git a/builtin-update-ref.c b/builtin-update-ref.c
index fe1f74c..eafb642 100644
--- a/builtin-update-ref.c
+++ b/builtin-update-ref.c
@@ -1,59 +1,48 @@
#include "cache.h"
#include "refs.h"
#include "builtin.h"
+#include "parse-options.h"
-static const char git_update_ref_usage[] =
-"git-update-ref [-m <reason>] (-d <refname> <value> | [--no-deref] <refname> <value> [<oldval>])";
+static const char * const git_update_ref_usage[] = {
+ "",
+ "git-update-ref [options] -d <refname> <oldval>",
+ "git-update-ref [options] <refname> <newval> [<oldval>]",
+ NULL
+};
int cmd_update_ref(int argc, const char **argv, const char *prefix)
{
- const char *refname=NULL, *value=NULL, *oldval=NULL, *msg=NULL;
+ const char *refname, *value, *oldval, *msg=NULL;
unsigned char sha1[20], oldsha1[20];
- int i, delete, ref_flags;
+ int count, delete = 0, no_deref = 0;
+ struct option git_update_ref_options[] = {
+ OPT_STRING( 'm', NULL, &msg, "reason", "reason of the update"),
+ OPT_BOOLEAN('d', NULL, &delete, "deletes the reference"),
+ OPT_BOOLEAN( 0 , "no-deref", &no_deref,
+ "update <refname> not the one it points to"),
+ };
- delete = 0;
- ref_flags = 0;
git_config(git_default_config);
-
- for (i = 1; i < argc; i++) {
- if (!strcmp("-m", argv[i])) {
- if (i+1 >= argc)
- usage(git_update_ref_usage);
- msg = argv[++i];
- if (!*msg)
- die("Refusing to perform update with empty message.");
- continue;
- }
- if (!strcmp("-d", argv[i])) {
- delete = 1;
- continue;
- }
- if (!strcmp("--no-deref", argv[i])) {
- ref_flags |= REF_NODEREF;
- continue;
- }
- if (!refname) {
- refname = argv[i];
- continue;
- }
- if (!value) {
- value = argv[i];
- continue;
- }
- if (!oldval) {
- oldval = argv[i];
- continue;
- }
- }
- if (!refname || !value)
- usage(git_update_ref_usage);
+ count = parse_options(argc, argv, git_update_ref_options,
+ ARRAY_SIZE(git_update_ref_options),
+ git_update_ref_usage, 0);
+ if (msg && !*msg)
+ die("Refusing to perform update with empty message.");
+
+ if (count < 2 || count > 3)
+ make_usage(git_update_ref_usage, git_update_ref_options,
+ ARRAY_SIZE(git_update_ref_options));
+ refname = argv[0];
+ value = argv[1];
+ oldval = argv[2];
if (get_sha1(value, sha1))
die("%s: not a valid SHA1", value);
if (delete) {
if (oldval)
- usage(git_update_ref_usage);
+ make_usage(git_update_ref_usage, git_update_ref_options,
+ ARRAY_SIZE(git_update_ref_options));
return delete_ref(refname, sha1);
}
@@ -62,5 +51,5 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
die("%s: not a valid old SHA1", oldval);
return update_ref(msg, refname, sha1, oldval ? oldsha1 : NULL,
- ref_flags, DIE_ON_ERR);
+ no_deref ? REF_NODEREF : 0, DIE_ON_ERR);
}
--
1.5.3.GIT
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html| James Bottomley | Breakage caused by unreviewed patch in x86 tree |
| Andrew Morton | Re: POHMELFS high performance network filesystem. Transactions, failover, performa... |
| Randy Dunlap | Re: 2.6.25-rc5-mm1 (paravirt/vsmp/no PCI) |
| Arnd Hannemann | 2.6.24-rc8 hangs at mfgpt-timer |
| Theodore Ts'o | Re: SVGA-alphanum. modes |
| Joseph R. Pannon | More install questions |
| Paul Richards | Header files |
| Les Andrzejewski | X386/WD90C31/SUMSUNG SYNC MASTER 4 |
git: | |
| David Miller | Re: [BUG] New Kernel Bugs |
| David Miller | Re: iptables very slow after commit784544739a25c30637397ace5489eeb6e15d7d49 |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
