{"thread":{"id":"21124","subject":"[PATCH] Add the utterly important 'mispel' command","startedAt":"2009-10-03T22:41:55Z","lastAt":"2009-10-04T13:41:30Z","messageCount":4,"participants":["Johannes Schindelin","Jeff King"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"124196","messageId":"alpine.DEB.1.00.0910040040180.4985@pacific.mpi-cbg.de","threadId":"21124","inReplyTo":null,"subject":"[PATCH] Add the utterly important 'mispel' command","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2009-10-03T22:41:55Z","receivedAt":"2009-10-03T22:41:55Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nIf you do not remember how to mispel a command, you need some help.\n\nProvide it.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: A Large Angry SCM <gitzilla@gmail.com>\nSigned-off-by: Sebastian Schuberth <sschuberth@gmail.com>\nSigned-off-by: Christian Halstrick <christian.halstrick@sap.com>\nSigned-off-by: Heiko Voigt <hvoigt@hvoigt.net>\nSigned-off-by: Sverre Rabbelier <srabbelier@gmail.com>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\nAcked-By: <paisleyklm@gmail.com>\n---\n\n\tPlease apply.\n\n Makefile         |    1 +\n builtin-mispel.c |   11 +++++++++++\n builtin.h        |    2 ++\n git.c            |    1 +\n help.c           |   31 +++++++++++++++++++++++++++++++\n 5 files changed, 46 insertions(+), 0 deletions(-)\n create mode 100644 builtin-mispel.c\n\ndiff --git a/Makefile b/Makefile\nindex 690ac55..0b48b3b 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -610,6 +610,7 @@ BUILTIN_OBJS += builtin-merge-file.o\n BUILTIN_OBJS += builtin-merge-ours.o\n BUILTIN_OBJS += builtin-merge-recursive.o\n BUILTIN_OBJS += builtin-mktree.o\n+BUILTIN_OBJS += builtin-mispel.o\n BUILTIN_OBJS += builtin-mv.o\n BUILTIN_OBJS += builtin-name-rev.o\n BUILTIN_OBJS += builtin-pack-objects.o\ndiff --git a/builtin-mispel.c b/builtin-mispel.c\nnew file mode 100644\nindex 0000000..e685f91\n--- /dev/null\n+++ b/builtin-mispel.c\n@@ -0,0 +1,11 @@\n+#include \"cache.h\"\n+#include \"builtin.h\"\n+\n+int cmd_mispel(int argc, const char **argv, const char *prefix)\n+{\n+\tif (argc < 2)\n+\t\tdie (\"What command do you want to mispel?\");\n+\terror(\"You probably meant %s\", help_mispeld_comd(argv[1]));\n+\treturn 0;\n+\n+}\ndiff --git a/builtin.h b/builtin.h\nindex 20427d2..2973d90 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -12,6 +12,7 @@ extern const char git_more_info_string[];\n \n extern void list_common_cmds_help(void);\n extern const char *help_unknown_cmd(const char *cmd);\n+const char *help_mispeld_comd(const char *cmd);\n extern void prune_packed_objects(int);\n extern int read_line_with_nul(char *buf, int size, FILE *file);\n extern int fmt_merge_msg(int merge_summary, struct strbuf *in,\n@@ -73,6 +74,7 @@ extern int cmd_merge_ours(int argc, const char **argv, const char *prefix);\n extern int cmd_merge_file(int argc, const char **argv, const char *prefix);\n extern int cmd_merge_recursive(int argc, const char **argv, const char *prefix);\n extern int cmd_mktree(int argc, const char **argv, const char *prefix);\n+extern int cmd_mispel(int argc, const char **argv, const char *prefix);\n extern int cmd_mv(int argc, const char **argv, const char *prefix);\n extern int cmd_name_rev(int argc, const char **argv, const char *prefix);\n extern int cmd_pack_objects(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex 807d875..2caca54 100644\n--- a/git.c\n+++ b/git.c\n@@ -327,6 +327,7 @@ static void handle_internal_command(int argc, const char **argv)\n \t\t{ \"merge-recursive\", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"merge-subtree\", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"mktree\", cmd_mktree, RUN_SETUP },\n+\t\t{ \"mispel\", cmd_mispel },\n \t\t{ \"mv\", cmd_mv, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"name-rev\", cmd_name_rev, RUN_SETUP },\n \t\t{ \"pack-objects\", cmd_pack_objects, RUN_SETUP },\ndiff --git a/help.c b/help.c\nindex 6c46d8b..97f0f22 100644\n--- a/help.c\n+++ b/help.c\n@@ -296,6 +296,37 @@ static void add_cmd_list(struct cmdnames *cmds, struct cmdnames *old)\n \told->names = NULL;\n }\n \n+const char *help_mispeld_comd(const char *cmd)\n+{\n+\tstruct cmdnames main_cmds, other_cmds;\n+\tint i;\n+\n+\tmemset(&main_cmds, 0, sizeof(main_cmds));\n+\tmemset(&other_cmds, 0, sizeof(main_cmds));\n+\tgit_config(git_unknown_cmd_config, NULL);\n+\n+\tload_command_list(\"git-\", &main_cmds, &other_cmds);\n+\n+\tadd_cmd_list(&main_cmds, &aliases);\n+\tadd_cmd_list(&main_cmds, &other_cmds);\n+\tqsort(main_cmds.names, main_cmds.cnt,\n+\t      sizeof(main_cmds.names), cmdname_compare);\n+\tuniq(&main_cmds);\n+\n+\t/* This reuses cmdname->len for similarity index */\n+\tfor (i = 0; i < main_cmds.cnt; ++i)\n+\t\tmain_cmds.names[i]->len =\n+\t\t\tlevenshtein(cmd, main_cmds.names[i]->name, 0, 2, 1, 4);\n+\n+\tqsort(main_cmds.names, main_cmds.cnt,\n+\t      sizeof(*main_cmds.names), levenshtein_compare);\n+\n+\tif (main_cmds.cnt< 2)\n+\t\tdie (\"Uh oh. Your system reports no Git commands at all.\");\n+\n+\treturn main_cmds.names[1]->name;\n+}\n+\n const char *help_unknown_cmd(const char *cmd)\n {\n \tint i, n, best_similarity = 0;\n-- \n1.6.4.msysgit.0.1.g2dcf.dirty\n"},{"id":"124199","messageId":"20091004065239.GA7890@coredump.intra.peff.net","threadId":"21124","inReplyTo":"alpine.DEB.1.00.0910040040180.4985@pacific.mpi-cbg.de","subject":"Re: [PATCH] Add the utterly important 'mispel' command","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2009-10-04T06:52:39Z","receivedAt":"2009-10-04T06:52:39Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Sun, Oct 04, 2009 at 12:41:55AM +0200, Johannes Schindelin wrote:\n\n> --- a/builtin.h\n> +++ b/builtin.h\n> @@ -12,6 +12,7 @@ extern const char git_more_info_string[];\n>  \n>  extern void list_common_cmds_help(void);\n>  extern const char *help_unknown_cmd(const char *cmd);\n> +const char *help_mispeld_comd(const char *cmd);\n>  extern void prune_packed_objects(int);\n>  extern int read_line_with_nul(char *buf, int size, FILE *file);\n>  extern int fmt_merge_msg(int merge_summary, struct strbuf *in,\n\nHmph. This hunk doesn't apply to Shawn's master, and your blob sha1 is\nnot in my repository for a 3-way merge. ;P\n\nAlso, I think there is a bug:\n\n  $ git mispel show-branc\n  error: You probably meant show-index\n\nOr is it intentional for it to throw the user off track?\n\nLet this be a lesson, kids: don't drink and code.\n\n-Peff\n"},{"id":"299129","messageId":"alpine.DEB.1.00.0910041250420.4985@pacific.mpi-cbg.de","threadId":"21124","inReplyTo":"20091004065239.GA7890@coredump.intra.peff.net","subject":"Re: [PATCH] Add the utterly important 'mispel' command","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2009-10-04T10:52:09Z","receivedAt":"2009-10-04T10:52:09Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 4 Oct 2009, Jeff King wrote:\n\n> On Sun, Oct 04, 2009 at 12:41:55AM +0200, Johannes Schindelin wrote:\n> \n> > --- a/builtin.h\n> > +++ b/builtin.h\n> > @@ -12,6 +12,7 @@ extern const char git_more_info_string[];\n> >  \n> >  extern void list_common_cmds_help(void);\n> >  extern const char *help_unknown_cmd(const char *cmd);\n> > +const char *help_mispeld_comd(const char *cmd);\n> >  extern void prune_packed_objects(int);\n> >  extern int read_line_with_nul(char *buf, int size, FILE *file);\n> >  extern int fmt_merge_msg(int merge_summary, struct strbuf *in,\n> \n> Hmph. This hunk doesn't apply to Shawn's master, and your blob sha1 is\n> not in my repository for a 3-way merge. ;P\n\nHmm.  It might be based on 4msysgit.git's 'devel' branch.\n\n> Also, I think there is a bug:\n> \n>   $ git mispel show-branc\n>   error: You probably meant show-index\n> \n> Or is it intentional for it to throw the user off track?\n> \n> Let this be a lesson, kids: don't drink and code.\n\nWell, the command is called \"mispel\", not \"autocorrect\".  So I think you \nmisunderstood the purpose of the patch.\n\nLet this be a lesson, kids: don't review GitTogether patches before you \nhad a drink.\n\nCiao,\nDscho\n\n"},{"id":"298988","messageId":"20091004134130.GB14209@sigill.intra.peff.net","threadId":"21124","inReplyTo":"alpine.DEB.1.00.0910041250420.4985@pacific.mpi-cbg.de","subject":"Re: [PATCH] Add the utterly important 'mispel' command","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2009-10-04T13:41:30Z","receivedAt":"2009-10-04T13:41:30Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Sun, Oct 04, 2009 at 12:52:09PM +0200, Johannes Schindelin wrote:\n\n> Well, the command is called \"mispel\", not \"autocorrect\".  So I think you \n> misunderstood the purpose of the patch.\n\nOK, well, then I can rail against the quality of your commit message. ;)\n\n> Let this be a lesson, kids: don't review GitTogether patches before you \n> had a drink.\n\nHeh.\n\n-Peff\n"}]}