-
Notifications
You must be signed in to change notification settings - Fork 142
[Outreachy] advice: revamp advise API #548
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -695,6 +695,7 @@ X = | |
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Emily Shaffer wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Eric Sunshine wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Emily Shaffer wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Emily Shaffer wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Jonathan Tan wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
|
||
PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS)) | ||
|
||
TEST_BUILTINS_OBJS += test-advise.o | ||
TEST_BUILTINS_OBJS += test-chmtime.o | ||
TEST_BUILTINS_OBJS += test-config.o | ||
TEST_BUILTINS_OBJS += test-ctype.o | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,7 +29,6 @@ int advice_ignored_hook = 1; | |
int advice_waiting_for_editor = 1; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Emily Shaffer wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Heba Waly wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Emily Shaffer wrote (reply to this):
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
|
||
int advice_graft_file_deprecated = 1; | ||
int advice_checkout_ambiguous_remote_branch_name = 1; | ||
int advice_nested_tag = 1; | ||
int advice_submodule_alternate_error_strategy_die = 1; | ||
|
||
static int advice_use_color = -1; | ||
|
@@ -80,7 +79,7 @@ static struct { | |
{ "sequencerInUse", &advice_sequencer_in_use }, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Junio C Hamano wrote (reply to this):
|
||
{ "implicitIdentity", &advice_implicit_identity }, | ||
{ "detachedHead", &advice_detached_head }, | ||
{ "setupStreamFailure", &advice_set_upstream_failure }, | ||
{ "setUpstreamFailure", &advice_set_upstream_failure }, | ||
{ "objectNameWarning", &advice_object_name_warning }, | ||
{ "amWorkDir", &advice_amworkdir }, | ||
{ "rmHints", &advice_rm_hints }, | ||
|
@@ -89,22 +88,64 @@ static struct { | |
{ "waitingForEditor", &advice_waiting_for_editor }, | ||
{ "graftFileDeprecated", &advice_graft_file_deprecated }, | ||
{ "checkoutAmbiguousRemoteBranchName", &advice_checkout_ambiguous_remote_branch_name }, | ||
{ "nestedTag", &advice_nested_tag }, | ||
{ "submoduleAlternateErrorStrategyDie", &advice_submodule_alternate_error_strategy_die }, | ||
|
||
/* make this an alias for backward compatibility */ | ||
{ "pushNonFastForward", &advice_push_update_rejected } | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On the Git mailing list, Emily Shaffer wrote (reply to this):
|
||
}; | ||
|
||
void advise(const char *advice, ...) | ||
static struct { | ||
const char *key; | ||
int enabled; | ||
} advice_setting[] = { | ||
[ADVICE_ADD_EMBEDDED_REPO] = { "addEmbeddedRepo", 1 }, | ||
[ADVICE_AM_WORK_DIR] = { "amWorkDir", 1 }, | ||
[ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] = { "checkoutAmbiguousRemoteBranchName", 1 }, | ||
[ADVICE_COMMIT_BEFORE_MERGE] = { "commitBeforeMerge", 1 }, | ||
[ADVICE_DETACHED_HEAD] = { "detachedHead", 1 }, | ||
[ADVICE_FETCH_SHOW_FORCED_UPDATES] = { "fetchShowForcedUpdates", 1 }, | ||
[ADVICE_GRAFT_FILE_DEPRECATED] = { "graftFileDeprecated", 1 }, | ||
[ADVICE_IGNORED_HOOK] = { "ignoredHook", 1 }, | ||
[ADVICE_IMPLICIT_IDENTITY] = { "implicitIdentity", 1 }, | ||
[ADVICE_NESTED_TAG] = { "nestedTag", 1 }, | ||
[ADVICE_OBJECT_NAME_WARNING] = { "objectNameWarning", 1 }, | ||
[ADVICE_PUSH_ALREADY_EXISTS] = { "pushAlreadyExists", 1 }, | ||
[ADVICE_PUSH_FETCH_FIRST] = { "pushFetchFirst", 1 }, | ||
[ADVICE_PUSH_NEEDS_FORCE] = { "pushNeedsForce", 1 }, | ||
|
||
/* make this an alias for backward compatibility */ | ||
[ADVICE_PUSH_UPDATE_REJECTED_ALIAS] = { "pushNonFastForward", 1 }, | ||
|
||
[ADVICE_PUSH_NON_FF_CURRENT] = { "pushNonFFCurrent", 1 }, | ||
[ADVICE_PUSH_NON_FF_MATCHING] = { "pushNonFFMatching", 1 }, | ||
[ADVICE_PUSH_UNQUALIFIED_REF_NAME] = { "pushUnqualifiedRefName", 1 }, | ||
[ADVICE_PUSH_UPDATE_REJECTED] = { "pushUpdateRejected", 1 }, | ||
[ADVICE_RESET_QUIET_WARNING] = { "resetQuiet", 1 }, | ||
[ADVICE_RESOLVE_CONFLICT] = { "resolveConflict", 1 }, | ||
[ADVICE_RM_HINTS] = { "rmHints", 1 }, | ||
[ADVICE_SEQUENCER_IN_USE] = { "sequencerInUse", 1 }, | ||
[ADVICE_SET_UPSTREAM_FAILURE] = { "setUpstreamFailure", 1 }, | ||
[ADVICE_STATUS_AHEAD_BEHIND_WARNING] = { "statusAheadBehindWarning", 1 }, | ||
[ADVICE_STATUS_HINTS] = { "statusHints", 1 }, | ||
[ADVICE_STATUS_U_OPTION] = { "statusUoption", 1 }, | ||
[ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE] = { "submoduleAlternateErrorStrategyDie", 1 }, | ||
[ADVICE_WAITING_FOR_EDITOR] = { "waitingForEditor", 1 }, | ||
}; | ||
|
||
static const char turn_off_instructions[] = | ||
N_("\n" | ||
"Disable this message with \"git config advice.%s false\""); | ||
|
||
static void vadvise(const char *advice, int display_instructions, | ||
const char *key, va_list params) | ||
{ | ||
struct strbuf buf = STRBUF_INIT; | ||
va_list params; | ||
const char *cp, *np; | ||
|
||
va_start(params, advice); | ||
strbuf_vaddf(&buf, advice, params); | ||
va_end(params); | ||
|
||
if (display_instructions) | ||
strbuf_addf(&buf, turn_off_instructions, key); | ||
|
||
for (cp = buf.buf; *cp; cp = np) { | ||
np = strchrnul(cp, '\n'); | ||
|
@@ -118,6 +159,37 @@ void advise(const char *advice, ...) | |
strbuf_release(&buf); | ||
} | ||
|
||
void advise(const char *advice, ...) | ||
{ | ||
va_list params; | ||
va_start(params, advice); | ||
vadvise(advice, 0, "", params); | ||
va_end(params); | ||
} | ||
|
||
int advice_enabled(enum advice_type type) | ||
{ | ||
switch(type) { | ||
case ADVICE_PUSH_UPDATE_REJECTED: | ||
return advice_setting[ADVICE_PUSH_UPDATE_REJECTED].enabled && | ||
advice_setting[ADVICE_PUSH_UPDATE_REJECTED_ALIAS].enabled; | ||
default: | ||
return advice_setting[type].enabled; | ||
} | ||
} | ||
|
||
void advise_if_enabled(enum advice_type type, const char *advice, ...) | ||
{ | ||
va_list params; | ||
|
||
if (!advice_enabled(type)) | ||
return; | ||
|
||
va_start(params, advice); | ||
vadvise(advice, 1, advice_setting[type].key, params); | ||
va_end(params); | ||
} | ||
|
||
int git_default_advice_config(const char *var, const char *value) | ||
{ | ||
const char *k, *slot_name; | ||
|
@@ -144,6 +216,13 @@ int git_default_advice_config(const char *var, const char *value) | |
if (strcasecmp(k, advice_config[i].name)) | ||
continue; | ||
*advice_config[i].preference = git_config_bool(var, value); | ||
break; | ||
} | ||
|
||
for (i = 0; i < ARRAY_SIZE(advice_setting); i++) { | ||
if (strcasecmp(k, advice_setting[i].key)) | ||
continue; | ||
advice_setting[i].enabled = git_config_bool(var, value); | ||
return 0; | ||
} | ||
|
||
|
@@ -154,8 +233,8 @@ void list_config_advices(struct string_list *list, const char *prefix) | |
{ | ||
int i; | ||
|
||
for (i = 0; i < ARRAY_SIZE(advice_config); i++) | ||
list_config_item(list, prefix, advice_config[i].name); | ||
for (i = 0; i < ARRAY_SIZE(advice_setting); i++) | ||
list_config_item(list, prefix, advice_setting[i].key); | ||
} | ||
|
||
int error_resolve_conflict(const char *me) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#include "test-tool.h" | ||
#include "cache.h" | ||
#include "advice.h" | ||
#include "config.h" | ||
|
||
int cmd__advise_if_enabled(int argc, const char **argv) | ||
{ | ||
if (!argv[1]) | ||
die("usage: %s <advice>", argv[0]); | ||
|
||
setup_git_directory(); | ||
git_config(git_default_config, NULL); | ||
|
||
/* | ||
Any advice type can be used for testing, but NESTED_TAG was selected | ||
here and in t0018 where this command is being executed. | ||
*/ | ||
advise_if_enabled(ADVICE_NESTED_TAG, argv[1]); | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#!/bin/sh | ||
|
||
test_description='Test advise_if_enabled functionality' | ||
|
||
. ./test-lib.sh | ||
|
||
test_expect_success 'advice should be printed when config variable is unset' ' | ||
cat >expect <<-\EOF && | ||
hint: This is a piece of advice | ||
hint: Disable this message with "git config advice.nestedTag false" | ||
EOF | ||
test-tool advise "This is a piece of advice" 2>actual && | ||
test_i18ncmp expect actual | ||
' | ||
|
||
test_expect_success 'advice should be printed when config variable is set to true' ' | ||
cat >expect <<-\EOF && | ||
hint: This is a piece of advice | ||
hint: Disable this message with "git config advice.nestedTag false" | ||
EOF | ||
test_config advice.nestedTag true && | ||
test-tool advise "This is a piece of advice" 2>actual && | ||
test_i18ncmp expect actual | ||
' | ||
|
||
test_expect_success 'advice should not be printed when config variable is set to false' ' | ||
test_config advice.nestedTag false && | ||
test-tool advise "This is a piece of advice" 2>actual && | ||
test_must_be_empty actual | ||
' | ||
|
||
test_done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, Junio C Hamano wrote (reply to this):
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, Heba Waly wrote (reply to this):