提交 4fdeefe5 编写于 作者: J Junio C Hamano

Merge branch 'jc/war-on-dashed-git' into seen

The first step to remove on-disk binaries for built-in subcommands
by soliciting objections.

* jc/war-on-dashed-git:
  git: catch an attempt to run "git-foo"
......@@ -39,6 +39,9 @@
# mainporcelain commands are completable so you don't need this
# attribute.
#
# "onpath" attribute is used to mark that the command MUST appear
# on $PATH (typically in /usr/bin) due to protocol requirement.
#
# As part of the Git man page list, the man(5/7) guides are also
# specified here, which can only have "guide" attribute and nothing
# else.
......@@ -145,7 +148,7 @@ git-quiltimport foreignscminterface
git-range-diff mainporcelain
git-read-tree plumbingmanipulators
git-rebase mainporcelain history
git-receive-pack synchelpers
git-receive-pack synchelpers onpath
git-reflog ancillarymanipulators complete
git-remote ancillarymanipulators complete
git-repack ancillarymanipulators complete
......@@ -160,7 +163,7 @@ git-rev-parse plumbinginterrogators
git-rm mainporcelain worktree
git-send-email foreignscminterface complete
git-send-pack synchingrepositories
git-shell synchelpers
git-shell synchelpers onpath
git-shortlog mainporcelain
git-show mainporcelain info
git-show-branch ancillaryinterrogators complete
......@@ -183,8 +186,8 @@ git-unpack-objects plumbingmanipulators
git-update-index plumbingmanipulators
git-update-ref plumbingmanipulators
git-update-server-info synchingrepositories
git-upload-archive synchelpers
git-upload-pack synchelpers
git-upload-archive synchelpers onpath
git-upload-pack synchelpers onpath
git-var plumbinginterrogators
git-verify-commit ancillaryinterrogators
git-verify-pack plumbinginterrogators
......
......@@ -872,6 +872,8 @@ int cmd_main(int argc, const char **argv)
* that one cannot handle it.
*/
if (skip_prefix(cmd, "git-", &cmd)) {
warn_on_dashed_git(argv[0]);
argv[0] = cmd;
handle_builtin(argc, argv);
die(_("cannot handle %s as a builtin"), cmd);
......
......@@ -722,3 +722,37 @@ NORETURN void help_unknown_ref(const char *ref, const char *cmd,
string_list_clear(&suggested_refs, 0);
exit(1);
}
static struct cmdname_help *find_cmdname_help(const char *name)
{
int i;
for (i = 0; i < ARRAY_SIZE(command_list); i++) {
if (!strcmp(command_list[i].name, name))
return &command_list[i];
}
return NULL;
}
void warn_on_dashed_git(const char *cmd)
{
struct cmdname_help *cmdname;
static const char *still_in_use_var = "GIT_I_STILL_USE_DASHED_GIT";
static const char *still_in_use_msg =
N_("Use of '%s' in the dashed-form is nominated for removal.\n"
"If you still use it, export '%s=true'\n"
"and send an e-mail to <git@vger.kernel.org>\n"
"to let us know and stop our removal plan. Thanks.\n");
if (!cmd)
return; /* git-help is OK */
cmdname = find_cmdname_help(cmd);
if (cmdname && (cmdname->category & CAT_onpath))
return; /* git-upload-pack and friends are OK */
if (!git_env_bool(still_in_use_var, 0)) {
fprintf(stderr, _(still_in_use_msg), cmd, still_in_use_var);
exit(1);
}
}
......@@ -46,6 +46,9 @@ void get_version_info(struct strbuf *buf, int show_build_options);
*/
NORETURN void help_unknown_ref(const char *ref, const char *cmd, const char *error);
/* When the cmd_main() sees "git-foo", check if the user intended */
void warn_on_dashed_git(const char *);
static inline void list_config_item(struct string_list *list,
const char *prefix,
const char *str)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册