|
|
|
@ -32,6 +32,8 @@ static const char * const git_tag_usage[] = {
@@ -32,6 +32,8 @@ static const char * const git_tag_usage[] = {
|
|
|
|
|
#define SORT_MASK 0x7fff |
|
|
|
|
#define REVERSE_SORT 0x8000 |
|
|
|
|
|
|
|
|
|
static int tag_sort; |
|
|
|
|
|
|
|
|
|
struct tag_filter { |
|
|
|
|
const char **patterns; |
|
|
|
|
int lines; |
|
|
|
@ -346,9 +348,51 @@ static const char tag_template_nocleanup[] =
@@ -346,9 +348,51 @@ static const char tag_template_nocleanup[] =
|
|
|
|
|
"Lines starting with '%c' will be kept; you may remove them" |
|
|
|
|
" yourself if you want to.\n"); |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* Parse a sort string, and return 0 if parsed successfully. Will return |
|
|
|
|
* non-zero when the sort string does not parse into a known type. If var is |
|
|
|
|
* given, the error message becomes a warning and includes information about |
|
|
|
|
* the configuration value. |
|
|
|
|
*/ |
|
|
|
|
static int parse_sort_string(const char *var, const char *arg, int *sort) |
|
|
|
|
{ |
|
|
|
|
int type = 0, flags = 0; |
|
|
|
|
|
|
|
|
|
if (skip_prefix(arg, "-", &arg)) |
|
|
|
|
flags |= REVERSE_SORT; |
|
|
|
|
|
|
|
|
|
if (skip_prefix(arg, "version:", &arg) || skip_prefix(arg, "v:", &arg)) |
|
|
|
|
type = VERCMP_SORT; |
|
|
|
|
else |
|
|
|
|
type = STRCMP_SORT; |
|
|
|
|
|
|
|
|
|
if (strcmp(arg, "refname")) { |
|
|
|
|
if (!var) |
|
|
|
|
return error(_("unsupported sort specification '%s'"), arg); |
|
|
|
|
else { |
|
|
|
|
warning(_("unsupported sort specification '%s' in variable '%s'"), |
|
|
|
|
var, arg); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
*sort = (type | flags); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int git_tag_config(const char *var, const char *value, void *cb) |
|
|
|
|
{ |
|
|
|
|
int status = git_gpg_config(var, value, cb); |
|
|
|
|
int status; |
|
|
|
|
|
|
|
|
|
if (!strcmp(var, "tag.sort")) { |
|
|
|
|
if (!value) |
|
|
|
|
return config_error_nonbool(var); |
|
|
|
|
parse_sort_string(var, value, &tag_sort); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
status = git_gpg_config(var, value, cb); |
|
|
|
|
if (status) |
|
|
|
|
return status; |
|
|
|
|
if (starts_with(var, "column.")) |
|
|
|
@ -522,20 +566,8 @@ static int parse_opt_points_at(const struct option *opt __attribute__((unused)),
@@ -522,20 +566,8 @@ static int parse_opt_points_at(const struct option *opt __attribute__((unused)),
|
|
|
|
|
static int parse_opt_sort(const struct option *opt, const char *arg, int unset) |
|
|
|
|
{ |
|
|
|
|
int *sort = opt->value; |
|
|
|
|
int flags = 0; |
|
|
|
|
|
|
|
|
|
if (skip_prefix(arg, "-", &arg)) |
|
|
|
|
flags |= REVERSE_SORT; |
|
|
|
|
|
|
|
|
|
if (skip_prefix(arg, "version:", &arg) || skip_prefix(arg, "v:", &arg)) |
|
|
|
|
*sort = VERCMP_SORT; |
|
|
|
|
else |
|
|
|
|
*sort = STRCMP_SORT; |
|
|
|
|
|
|
|
|
|
if (strcmp(arg, "refname")) |
|
|
|
|
die(_("unsupported sort specification %s"), arg); |
|
|
|
|
*sort |= flags; |
|
|
|
|
return 0; |
|
|
|
|
return parse_sort_string(NULL, arg, sort); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int cmd_tag(int argc, const char **argv, const char *prefix) |
|
|
|
@ -548,7 +580,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
@@ -548,7 +580,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|
|
|
|
struct create_tag_options opt; |
|
|
|
|
char *cleanup_arg = NULL; |
|
|
|
|
int annotate = 0, force = 0, lines = -1; |
|
|
|
|
int cmdmode = 0, sort = 0; |
|
|
|
|
int cmdmode = 0; |
|
|
|
|
const char *msgfile = NULL, *keyid = NULL; |
|
|
|
|
struct msg_arg msg = { 0, STRBUF_INIT }; |
|
|
|
|
struct commit_list *with_commit = NULL; |
|
|
|
@ -574,7 +606,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
@@ -574,7 +606,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|
|
|
|
OPT__FORCE(&force, N_("replace the tag if exists")), |
|
|
|
|
OPT_COLUMN(0, "column", &colopts, N_("show tag list in columns")), |
|
|
|
|
{ |
|
|
|
|
OPTION_CALLBACK, 0, "sort", &sort, N_("type"), N_("sort tags"), |
|
|
|
|
OPTION_CALLBACK, 0, "sort", &tag_sort, N_("type"), N_("sort tags"), |
|
|
|
|
PARSE_OPT_NONEG, parse_opt_sort |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
@ -630,9 +662,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
@@ -630,9 +662,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|
|
|
|
copts.padding = 2; |
|
|
|
|
run_column_filter(colopts, &copts); |
|
|
|
|
} |
|
|
|
|
if (lines != -1 && sort) |
|
|
|
|
if (lines != -1 && tag_sort) |
|
|
|
|
die(_("--sort and -n are incompatible")); |
|
|
|
|
ret = list_tags(argv, lines == -1 ? 0 : lines, with_commit, sort); |
|
|
|
|
ret = list_tags(argv, lines == -1 ? 0 : lines, with_commit, tag_sort); |
|
|
|
|
if (column_active(colopts)) |
|
|
|
|
stop_column_filter(); |
|
|
|
|
return ret; |
|
|
|
|