path: root/help.c
AgeCommit message (Collapse)Author
2011-07-22Merge branch 'ms/help-unknown'Junio C Hamano
* ms/help-unknown: help_unknown_cmd: do not propose an "unknown" cmd
2011-07-08help_unknown_cmd: do not propose an "unknown" cmdMichael Schubert
When executing an external shell script like `git foo` with a bad shebang, e.g. "#!/usr/bin/not/existing", execvp returns 127 (ENOENT). Since help_unknown_cmd proposes the use of all external commands similar to the name of the "unknown" command, it suggests the just failed command again. Stop it and give some advice to the user. Helped-by: Jeff King <> Signed-off-by: Michael Schubert <> Signed-off-by: Junio C Hamano <>
2011-06-16help.c: Fix detection of custom merge strategy on cygwinRamsay Jones
Test fails on cygwin when git-merge fails with an "Could not find merge strategy 'theirs'" error, despite the test correctly preparing an (executable) git-merge-theirs script. The cause of the failure is the mis-detection of the executable status of the script, by the is_executable() function, while the load_command_list() function is searching the path for additional merge strategy programs. Note that the l/stat() "functions" on cygwin are somewhat schizophrenic (see commits adbc0b6, 7faee6b and 7974843), and their behaviour depends on the timing of various git setup and config function calls. In particular, until the "git_dir" has been set (have_git_dir() returns true), the real cygwin (POSIX emulating) l/stat() functions are called. Once "git_dir" has been set, the "native Win32 API" implementations of l/stat() may, or may not, be called depending on the setting of the core.filemode and core.ignorecygwinfstricks config variables. We also note that, since commit c869753, core.filemode is forced to false, even on NTFS, by git-init and git-clone. A user (or a test) can, of course, reset core.filemode to true explicitly if the filesystem supports it (and he doesn't use any problematic windows software). The test-suite currently runs all tests on cygwin with core.filemode set to false. Given the above, we see that the built-in merge strategies are correctly detected as executable, since they are checked for before "git_dir" is set, whereas all custom merge strategies are not, since they are checked for after "git_dir" is set. In order to fix the mis-detection problem, we change the code in is_executable() to re-use the conditional WIN32 code section, which actually looks at the content of the file to determine if the file is executable. On cygwin we also make the additional code conditional on the executable bit of the file mode returned by the initial stat() call. (only the real cygwin function would set the executable bit in the file mode.) Signed-off-by: Ramsay Jones <> Signed-off-by: Junio C Hamano <>
2010-12-05help: always suggest common-cmds if prefix of cmdErik Faye-Lund
If someone runs "git st", the command "git status" is not suggested because it's not one of the closest levenshtein-neighbour. Reserve the distance of 0 for common commands where the entered command is a prefixe, as these are often more likely to be what the user meant. This way, "git status" is the first suggestion, while a list of possible typos are still suggested as well. Signed-off-by: Erik Faye-Lund <> Signed-off-by: Junio C Hamano <>
2010-02-16Remove hyphen from "git-command" in two error messagesPete Harlan
Signed-off-by: Pete Harlan <> Signed-off-by: Junio C Hamano <>
2009-12-16help.autocorrect: do not run a command if the command given is junkJohannes Sixt
If a given command is not found, then help.c tries to guess which one the user could have meant. If help.autocorrect is 0 or unset, then a list of suggestions is given as long as the dissimilarity between the given command and the candidates is not excessively high. But if help.autocorrect was non-zero (i.e., a delay after which the command is run automatically), the latter restriction on dissimilarity was not obeyed. In my case, this happened: $ git ..daab02 WARNING: You called a Git command named '..daab02', which does not exist. Continuing under the assumption that you meant 'read-tree' in 4.0 seconds automatically... The patch reuses the similarity limit that is also applied when the list of suggested commands is printed. Signed-off-by: Johannes Sixt <> Signed-off-by: Junio C Hamano <>
2009-09-19Test for WIN32 instead of __MINGW32_Frank Li
The code which is conditional on MinGW32 is actually conditional on Windows. Use the WIN32 symbol, which is defined by the MINGW32 and MSVC environments, but not by Cygwin. Define SNPRINTF_SIZE_CORR=1 for MSVC too, as its vsnprintf function does not add NUL at the end of the buffer if the result fits the buffer size exactly. Signed-off-by: Frank Li <> Signed-off-by: Marius Storm-Olsen <> Acked-by: Johannes Sixt <> Signed-off-by: Junio C Hamano <>
2009-09-19Avoid declaration after statementFrank Li
MSVC does not understand this C99 style. Signed-off-by: Frank Li <> Signed-off-by: Marius Storm-Olsen <> Acked-by: Johannes Sixt <> Signed-off-by: Junio C Hamano <>
2009-08-12Merge branch 'maint-1.6.3' into maintJunio C Hamano
* maint-1.6.3: Change mentions of "git programs" to "git commands" Documentation: merge: one <remote> is required help.c: give correct structure's size to memset()
2009-08-12Change mentions of "git programs" to "git commands"Ori Avtalion
Most of the docs and printouts refer to "commands" when discussing what the end users call via the "git" top-level program. We should refer them as "git programs" when we discuss the fact that the commands are implemented as separate programs, but in other contexts, it is better to use the term "git commands" consistently. Signed-off-by: Ori Avtalion <> Signed-off-by: Nanako Shiraishi <> Signed-off-by: Junio C Hamano <>
2009-08-12help.c: give correct structure's size to memset()Johan Herland
These two structures are of the same type, but we'd better be consistent. Signed-off-by: Johan Herland <> Signed-off-by: Junio C Hamano <>
2009-07-23janitor: add DIV_ROUND_UP and use it.Pierre Habouzit
Signed-off-by: Pierre Habouzit <> Signed-off-by: Junio C Hamano <>
2008-09-12git wrapper: also use aliases to correct mistyped commandsPieter de Bie
Signed-off-by: Pieter de Bie <> Signed-off-by: Junio C Hamano <>
2008-09-08Merge branch 'ar/autospell'Junio C Hamano
* ar/autospell: Add help.autocorrect to enable/disable autocorrecting git wrapper: DWIM mistyped commands
2008-08-31Add help.autocorrect to enable/disable autocorrectingAlex Riesen
It is off(0) by default, to avoid scaring people unless they asked to. If set to a non-0 value, wait for that amount of deciseconds before running the corrected command. Suggested by Junio, so he has a chance to hit Ctrl-C. Signed-off-by: Alex Riesen <> Signed-off-by: Junio C Hamano <>
2008-08-31git wrapper: DWIM mistyped commandsJohannes Schindelin
This patch introduces a modified Damerau-Levenshtein algorithm into Git's code base, and uses it with the following penalties to show some similar commands when an unknown command was encountered: swap = 0, insertion = 1, substitution = 2, deletion = 4 A typical output would now look like this: $ git sm git: 'sm' is not a git-command. See 'git --help'. Did you mean one of these? am rm The cut-off is at similarity rating 6, which was empirically determined to give sensible results. As a convenience, if there is only one candidate, Git continues under the assumption that the user mistyped it. Example: $ git reabse WARNING: You called a Git program named 'reabse', which does not exist. Continuing under the assumption that you meant 'rebase' [...] Signed-off-by: Johannes Schindelin <> Signed-off-by: Alex Riesen <> Signed-off-by: Junio C Hamano <>
2008-08-29list_commands: only call git_exec_path if it is neededAlex Riesen
Even if it always needed Signed-off-by: Alex Riesen <> Signed-off-by: Junio C Hamano <>
2008-08-29Allow git help work without PATH setAlex Riesen
Just because we can Signed-off-by: Alex Riesen <> Signed-off-by: Junio C Hamano <>
2008-08-29Remove calculation of the longest command name from where it is not usedAlex Riesen
Just calculate it where it is needed - it is cheap and trivial, as all the lengths are already there (stored when creating the command lists). Signed-off-by: Alex Riesen <> Signed-off-by: Junio C Hamano <>
2008-08-03Builtin git-help.Miklos Vajna
This patch splits out git-help's functions to builtin-help.c and leaves only functions used by other builtins in help.c. First this removes git-help's functions from libgit which are not interesting for other builtins, second this makes 'git help help' work again. Signed-off-by: Miklos Vajna <> Signed-off-by: Junio C Hamano <>
2008-07-31builtin-help: always load_command_list() in cmd_help()Miklos Vajna
When cmd_help() is called, we always need the list of main and other commands, not just when the list of all commands is shown. Before this patch 'git help diff' invoked 'man gitdiff' because cmd_to_page() thought 'diff' is not a git command. Signed-off-by: Miklos Vajna <> Signed-off-by: Junio C Hamano <>
2008-07-30builtin-help: make some internal functions available to other builtinsMiklos Vajna
Make load_command_list() capable of filtering for a given prefix and loading into a pair of "struct cmdnames" supplied by the caller. Make the static add_cmdname(), exclude_cmds() and is_in_cmdlist() functions non-static. Make list_commands() accept a custom title, and work from a pair of "struct cmdnames" supplied by the caller. Signed-off-by: Miklos Vajna <> Signed-off-by: Junio C Hamano <>
2008-07-27Avoid chdir() in list_commands_in_dir()Johannes Schindelin
The function list_commands_in_dir() tried to be lazy and just chdir() to the directory which entries it listed, so that the check if the file is executable could be done on dir->d_name. However, there is no good reason to jump around wildly just to find all Git commands. Instead, have a strbuf and construct the full path dynamically. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2008-07-17Merge branch 'sb/dashless'Junio C Hamano
* sb/dashless: Make usage strings dash-less t/: Use "test_must_fail git" instead of "! git" t/ exit with small negagive int is ok with test_must_fail Conflicts: builtin-blame.c builtin-mailinfo.c builtin-mailsplit.c builtin-shortlog.c t/ t/
2008-07-13help (Windows): Display HTML in default browser using Windows' shell APISteffen Prohaska
The system's default browser for displaying HTML help pages is now used directly on Windows, instead of launching git-web--browser, which requires a Unix shell. Avoiding MSYS' bash when possible is good because it avoids potential path translation issues. In this case it is not too hard to avoid launching a shell, so let's avoid it. The Windows-specific code is implemented in compat/mingw.c to avoid platform-specific code in the main code base. On Windows, open_html is provided as a define. If open_html is not defined, git-web--browse is used. This approach avoids platform-specific ifdefs by using per-function ifdefs. The "ifndef open_html" together with the introductory comment should sufficiently warn developers, so that they hopefully will not break this mechanism. Signed-off-by: Steffen Prohaska <> Signed-off-by: Johannes Sixt <> Signed-off-by: Junio C Hamano <>
2008-07-13help.c: Add support for htmldir relative to git_exec_path()Steffen Prohaska
If htmldir (in the Makefile) is a relative path, this path will now be interpreted relative to git_exec_path. This can be used to create an installation that can be moved to a different directory without re-compiling. The Windows installer (msysgit) is an example for such a setup. Note that the Makefile maps htmldir to the define GIT_HTML_PATH. Signed-off-by: Steffen Prohaska <> Signed-off-by: Johannes Sixt <> Signed-off-by: Junio C Hamano <>
2008-07-13Make usage strings dash-lessStephan Beyer
When you misuse a git command, you are shown the usage string. But this is currently shown in the dashed form. So if you just copy what you see, it will not work, when the dashed form is no longer supported. This patch makes git commands show the dash-less version. For shell scripts that do not specify OPTIONS_SPEC, generates a dash-less usage string now. Signed-off-by: Stephan Beyer <> Signed-off-by: Junio C Hamano <>
2008-07-03Merge branch 'j6t/mingw'Junio C Hamano
* j6t/mingw: (38 commits) compat/pread.c: Add a forward declaration to fix a warning Windows: Fix ntohl() related warnings about printf formatting Windows: TMP and TEMP environment variables specify a temporary directory. Windows: Make 'git help -a' work. Windows: Work around an oddity when a pipe with no reader is written to. Windows: Make the pager work. When installing, be prepared that template_dir may be relative. Windows: Use a relative default template_dir and ETC_GITCONFIG Windows: Compute the fallback for exec_path from the program invocation. Turn builtin_exec_path into a function. Windows: Use a customized struct stat that also has the st_blocks member. Windows: Add a custom implementation for utime(). Windows: Add a new lstat and fstat implementation based on Win32 API. Windows: Implement a custom spawnve(). Windows: Implement wrappers for gethostbyname(), socket(), and connect(). Windows: Work around incompatible sort and find. Windows: Implement asynchronous functions as threads. Windows: Disambiguate DOS style paths from SSH URLs. Windows: A rudimentary poll() emulation. Windows: Implement start_command(). ...
2008-06-28help: check early if we have a command, if not try a documentation topicChristian Couder
Before this patch, something like "git help tutorial" did not work, people had to use "git help gittutorial" which is not very intuitive. This patch uses the "is_git_command" function to test early if the argument passed to "git help" is a git command, and if this is not the case then we prefix the argument with "git" instead of "git-". This way, things like "git help tutorial" or "git help glossary" will work fine. The little downside of this patch is that the "is_git_command" is a little bit slow. Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-06-26Windows: Make 'git help -a' work.Johannes Sixt
git help -a scans the PATH for git commands. On Windows it failed for two reasons: - The PATH separator is ';', not ':' on Windows. - stat() does not set the executable bit. We now open the file and guess whether it is executable. The result of the guess is good enough for the list of git commands, but it is of no use for a general stat() implementation because (1) it is a guess, (2) the user has no way to influence the outcome (via chmod or similar), and (3) it would reduce stat() performance by an unacceptable amount. Therefore, this strategy is a special-case local to help.c. Signed-off-by: Johannes Sixt <>
2008-06-06Print info about "git help COMMAND" on git's main usage pagesTeemu Likonen
Git's main usage pages did not show "git help" as a way to get more information on a specific subcommand. This patch adds an info line after the list of git commands currently printed by "git", "git help", "git --help" and "git help --all". Signed-off-by: Teemu Likonen <> Signed-off-by: Junio C Hamano <>
2008-05-14Provide git_config with a callback-data parameterJohannes Schindelin
git_config() only had a function parameter, but no callback data parameter. This assumes that all callback functions only modify global variables. With this patch, every callback gets a void * parameter, and it is hoped that this will help the libification effort. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2008-04-26help: use "man.<tool>.cmd" as custom man viewer commandChristian Couder
Currently "git help -m GITCMD" is restricted to a set of man viewers defined at compile time. You can subvert the "man.<tool>.path" to force "git help -m" to use a different man, viewer, but if you have a man viewer whose invocation syntax does not match one of the current tools then you would have to write a wrapper script for it. This patch adds a git config variable "man.<tool>.cmd" which allows a more flexible man viewer choice. If you run "git help -m GITCMD" with the "man.viewer" config variable set to an unrecognized tool then it will query the "man.<tool>.cmd" config variable. If this variable exists, then the specified tool will be treated as a custom man viewer and it will be run in a shell with the man page name of the GITCMD added as extra parameter. Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-04-26help: use man viewer path from "man.<tool>.path" config varChristian Couder
This patch implements reading values from "man.<tool>.path" configuration variables, and using these values as pathes to the man viewer <tool>s when lauching them. This makes it possible to use different version of the tools than the one on the current PATH, or maybe a custom script. In this patch we also try to launch "konqueror" using "kfmclient" even if a path to a konqueror binary is given in "man.konqueror.path". The "man_viewer_list" becomes a simple string list to simplify things for the following patches. Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-04-02help: Add a missing OPT_END().Christian Couder
Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-03-13help: warn if specified 'man.viewer' is unsupported, instead of erroring outChristian Couder
When a document viewer that is unknown to the current version of git is specified in the .git/config file, instead of erroring out the process entirely, just issue a warning. It might be that the user usually is using a newer git that supports it (and the configuration is written for that version) but is temporarily using an older git that does not know the viewer. Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-03-12help: implement multi-valued "man.viewer" config optionChristian Couder
This allows multiple viewer candidates to be listed in the configuration file, like this: [man] viewer = woman viewer = konqueror viewer = man The candidates are tried in the order listed in the configuration file, and the first suitable one (e.g. konqueror cannot be used outside windowed environment) is used. Signed-off-by: Christian Couder <> Tested-by: Xavier Maillard <> Signed-off-by: Junio C Hamano <>
2008-03-12help: add "man.viewer" config var to use "woman" or "konqueror"Christian Couder
This patch makes it possible to view man pages using other tools than the "man" program. It also implements support for emacs' "woman" and konqueror with the man KIO slave to view man pages. Note that "emacsclient" is used with option "-e" to launch "woman" on emacs and this works only on versions >= 22. Signed-off-by: Christian Couder <> Tested-by: Xavier Maillard <> Signed-off-by: Junio C Hamano <>
2008-02-25help: respect aliasesJeff King
If we have an alias "foo" defined, then the help text for "foo" (via "git help foo" or "git foo --help") now shows the definition of the alias. Before showing an alias definition, we make sure that there is no git command which would override the alias (so that even though you may have a "log" alias, even though it will not work, we don't want to it supersede "git help log"). Signed-off-by: Jeff King <> Signed-off-by: Junio C Hamano <>
2008-02-25help: use parseoptJeff King
This patch converts cmd_help to use parseopt, along with a few style cleanups, including: - enum constants are now ALL_CAPS - parse_help_format returns an enum value rather than setting a global as a side effect Signed-off-by: Jeff King <> Signed-off-by: Junio C Hamano <>
2008-02-18help.c: use 'git_config_string' to get 'help_default_format'.Christian Couder
Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-02-17Merge branch 'cc/browser'Junio C Hamano
* cc/browser: Documentation: add 'git-web--browse.txt' and simplify other docs. git-web--browse: fix misplaced quote in init_browser_path() web--browse: Add a few quotes in 'init_browser_path'. Documentation: instaweb: add 'git-web--browse' information. Adjust .gitignore for 5884f1(Rename ''...) git-web--browse: do not start the browser with nohup instaweb: use 'git-web--browse' to launch browser. Rename '' to ''. help--browse: add '--config' option to check a config option for a browser. help: make 'git-help--browse' usable outside 'git-help'. Conflicts:
2008-02-11help.c: guard config parser from value=NULLJunio C Hamano
help.format configuration expects a string value Signed-off-by: Junio C Hamano <>
2008-02-05Rename '' to ''.Christian Couder
Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-02-05help--browse: add '--config' option to check a config option for a browser.Christian Couder
The value of this new command line option will be used as a key to check the configuration for an help browser. This should remove the last bit in 'git-help--browse' that was specific to 'git-help', so that other git command can use 'git-help--browse'. Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2008-02-05help: make 'git-help--browse' usable outside 'git-help'.Christian Couder
"git-help--browse" helper is to launch a browser of the user's choice to view the HTML version of git documentation for a given command. It used to take the name of a command, convert it to the path of the documentation by prefixing the directory name and appending the ".html" suffix, and start the browser on the path. This updates the division of labor between the caller in help.c and git-help--browser helper. The helper is now responsible for launching a browser of the user's choice on given URLs, and it is the caller's responsibility to tell it the paths to documentation files. This is in preparation to reuse the logic to choose user's preferred browser in instaweb. The helper had a provision for running it without any command name, in which case it showed the toplevel "git(7)" documentation, but the caller in help.c never makes such a call. The helper now exits with a usage message when no path is given. Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2007-12-16rename git-browse--help to git-help--browseJeff King
The convention for helper scripts has been git-$TOOL--$HELPER. Since this is a "browse" helper for the "help" tool, git-help--browse is a more sensible name. Signed-off-by: Jeff King <> Signed-off-by: Junio C Hamano <>
2007-12-15Rename git-browse-help helper to git-browse--helpJunio C Hamano
Signed-off-by: Junio C Hamano <>
2007-12-15git-help: add "help.format" config variable.Christian Couder
This config variable makes it possible to choose the default format used to display help. This format will be used only if no option like -a|--all|-i|--info|-m|--man|-w|--web is passed to "git-help". The following values are possible for this variable: - "man" --> "man" program is used - "info" --> "info" program is used - "web" --> "git-browse-help" is used By default we still show help using "man". This patch also adds -m|--man command line option to use "man" to allow overriding the "help.format" configuration variable. Note that this patch also revert some recent changes in "git-browse-help" because they prevented to look for config variables in the global configuration file. Signed-off-by: Christian Couder <> Signed-off-by: Junio C Hamano <>
2007-12-10git-help -i: show info documentation from matching version of gitJunio C Hamano
Signed-off-by: Junio C Hamano <>