aboutsummaryrefslogtreecommitdiffstats
path: root/help.c
diff options
context:
space:
mode:
Diffstat (limited to 'help.c')
-rw-r--r--help.c64
1 files changed, 49 insertions, 15 deletions
diff --git a/help.c b/help.c
index 5483ea8fd2..89cd47e3b8 100644
--- a/help.c
+++ b/help.c
@@ -2,12 +2,14 @@
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
+#include "git-zlib.h"
#include "config.h"
#include "builtin.h"
#include "exec-cmd.h"
#include "run-command.h"
#include "levenshtein.h"
#include "gettext.h"
+#include "hash.h"
#include "help.h"
#include "command-list.h"
#include "string-list.h"
@@ -212,7 +214,7 @@ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)
else if (cmp == 0) {
ei++;
free(cmds->names[ci++]);
- } else if (cmp > 0)
+ } else
ei++;
}
@@ -552,10 +554,34 @@ struct help_unknown_cmd_config {
struct cmdnames aliases;
};
+#define AUTOCORRECT_SHOW (-4)
#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1)
+static int parse_autocorrect(const char *value)
+{
+ switch (git_parse_maybe_bool_text(value)) {
+ case 1:
+ return AUTOCORRECT_IMMEDIATELY;
+ case 0:
+ return AUTOCORRECT_SHOW;
+ default: /* other random text */
+ break;
+ }
+
+ if (!strcmp(value, "prompt"))
+ return AUTOCORRECT_PROMPT;
+ if (!strcmp(value, "never"))
+ return AUTOCORRECT_NEVER;
+ if (!strcmp(value, "immediate"))
+ return AUTOCORRECT_IMMEDIATELY;
+ if (!strcmp(value, "show"))
+ return AUTOCORRECT_SHOW;
+
+ return 0;
+}
+
static int git_unknown_cmd_config(const char *var, const char *value,
const struct config_context *ctx,
void *cb)
@@ -564,20 +590,17 @@ static int git_unknown_cmd_config(const char *var, const char *value,
const char *p;
if (!strcmp(var, "help.autocorrect")) {
- if (!value)
- return config_error_nonbool(var);
- if (!strcmp(value, "never")) {
- cfg->autocorrect = AUTOCORRECT_NEVER;
- } else if (!strcmp(value, "immediate")) {
- cfg->autocorrect = AUTOCORRECT_IMMEDIATELY;
- } else if (!strcmp(value, "prompt")) {
- cfg->autocorrect = AUTOCORRECT_PROMPT;
- } else {
- int v = git_config_int(var, value, ctx->kvi);
- cfg->autocorrect = (v < 0)
- ? AUTOCORRECT_IMMEDIATELY : v;
+ int v = parse_autocorrect(value);
+
+ if (!v) {
+ v = git_config_int(var, value, ctx->kvi);
+ if (v < 0 || v == 1)
+ v = AUTOCORRECT_IMMEDIATELY;
}
+
+ cfg->autocorrect = v;
}
+
/* Also use aliases for command lookup */
if (skip_prefix(var, "alias.", &p))
add_cmdname(&cfg->aliases, p, strlen(p));
@@ -695,7 +718,8 @@ char *help_unknown_cmd(const char *cmd)
n++)
; /* still counting */
}
- if (cfg.autocorrect && n == 1 && SIMILAR_ENOUGH(best_similarity)) {
+ if (cfg.autocorrect && cfg.autocorrect != AUTOCORRECT_SHOW && n == 1 &&
+ SIMILAR_ENOUGH(best_similarity)) {
char *assumed = xstrdup(main_cmds.names[0]->name);
fprintf_ln(stderr,
@@ -775,9 +799,19 @@ void get_version_info(struct strbuf *buf, int show_build_options)
#if defined OPENSSL_VERSION_TEXT
strbuf_addf(buf, "OpenSSL: %s\n", OPENSSL_VERSION_TEXT);
#endif
-#if defined ZLIB_VERSION
+#if defined ZLIBNG_VERSION
+ strbuf_addf(buf, "zlib-ng: %s\n", ZLIBNG_VERSION);
+#elif defined ZLIB_VERSION
strbuf_addf(buf, "zlib: %s\n", ZLIB_VERSION);
#endif
+ strbuf_addf(buf, "SHA-1: %s\n", SHA1_BACKEND);
+#if defined SHA1_UNSAFE_BACKEND
+ strbuf_addf(buf, "non-collision-detecting-SHA-1: %s\n",
+ SHA1_UNSAFE_BACKEND);
+#endif
+ strbuf_addf(buf, "SHA-256: %s\n", SHA256_BACKEND);
+ strbuf_addf(buf, "default-ref-format: %s\n",
+ ref_storage_format_to_name(REF_STORAGE_FORMAT_DEFAULT));
}
}