mirror of
https://github.com/git/git.git
synced 2024-11-18 23:03:56 +01:00
c01499ef69
Correct all hits from git grep -e '\(&&\|||\)[^ ]' -e '[^ ]\(&&\|||\)' -- '*.c' i.e. && or || operators that are followed by anything but a SP, or that follow something other than a SP or a HT, so that these operators have a SP around it when necessary. We usually refrain from making this kind of a tree-wide change in order to avoid unnecessary conflicts with other "real work" patches, but in this case, the end result does not have a potentially cumbersome tree-wide impact, while this is a tree-wide cleanup. Fixes to compat/regex/regcomp.c and xdiff/xemit.c are to replace a HT immediately after && with a SP. This is based on Felipe's patch to bultin/symbolic-ref.c; I did all the finding out what other files in the whole tree need to be fixed and did the fix and also the log message while reviewing that single liner, so any screw-ups in this version are mine. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
77 lines
1.9 KiB
C
77 lines
1.9 KiB
C
#include "builtin.h"
|
|
#include "cache.h"
|
|
#include "refs.h"
|
|
#include "parse-options.h"
|
|
|
|
static const char * const git_symbolic_ref_usage[] = {
|
|
N_("git symbolic-ref [options] name [ref]"),
|
|
N_("git symbolic-ref -d [-q] name"),
|
|
NULL
|
|
};
|
|
|
|
static int check_symref(const char *HEAD, int quiet, int shorten, int print)
|
|
{
|
|
unsigned char sha1[20];
|
|
int flag;
|
|
const char *refname = resolve_ref_unsafe(HEAD, sha1, 0, &flag);
|
|
|
|
if (!refname)
|
|
die("No such ref: %s", HEAD);
|
|
else if (!(flag & REF_ISSYMREF)) {
|
|
if (!quiet)
|
|
die("ref %s is not a symbolic ref", HEAD);
|
|
else
|
|
return 1;
|
|
}
|
|
if (print) {
|
|
if (shorten)
|
|
refname = shorten_unambiguous_ref(refname, 0);
|
|
puts(refname);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
|
|
{
|
|
int quiet = 0, delete = 0, shorten = 0, ret = 0;
|
|
const char *msg = NULL;
|
|
struct option options[] = {
|
|
OPT__QUIET(&quiet,
|
|
N_("suppress error message for non-symbolic (detached) refs")),
|
|
OPT_BOOL('d', "delete", &delete, N_("delete symbolic ref")),
|
|
OPT_BOOL(0, "short", &shorten, N_("shorten ref output")),
|
|
OPT_STRING('m', NULL, &msg, N_("reason"), N_("reason of the update")),
|
|
OPT_END(),
|
|
};
|
|
|
|
git_config(git_default_config, NULL);
|
|
argc = parse_options(argc, argv, prefix, options,
|
|
git_symbolic_ref_usage, 0);
|
|
if (msg && !*msg)
|
|
die("Refusing to perform update with empty message");
|
|
|
|
if (delete) {
|
|
if (argc != 1)
|
|
usage_with_options(git_symbolic_ref_usage, options);
|
|
ret = check_symref(argv[0], 1, 0, 0);
|
|
if (ret)
|
|
die("Cannot delete %s, not a symbolic ref", argv[0]);
|
|
return delete_ref(argv[0], NULL, REF_NODEREF);
|
|
}
|
|
|
|
switch (argc) {
|
|
case 1:
|
|
ret = check_symref(argv[0], quiet, shorten, 1);
|
|
break;
|
|
case 2:
|
|
if (!strcmp(argv[0], "HEAD") &&
|
|
prefixcmp(argv[1], "refs/"))
|
|
die("Refusing to point HEAD outside of refs/");
|
|
create_symref(argv[0], argv[1], msg);
|
|
break;
|
|
default:
|
|
usage_with_options(git_symbolic_ref_usage, options);
|
|
}
|
|
return ret;
|
|
}
|