"Fossies" - the Fresh Open Source Software Archive

Member "git-2.23.0.windows.1/Documentation/howto/new-command.txt" (16 Aug 2019, 4472 Bytes) of package /windows/misc/git-2.23.0.windows.1.zip:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 From: Eric S. Raymond <esr@thyrsus.com>
    2 Abstract: This is how-to documentation for people who want to add extension
    3  commands to Git.  It should be read alongside api-builtin.txt.
    4 Content-type: text/asciidoc
    5 
    6 How to integrate new subcommands
    7 ================================
    8 
    9 This is how-to documentation for people who want to add extension
   10 commands to Git.  It should be read alongside api-builtin.txt.
   11 
   12 Runtime environment
   13 -------------------
   14 
   15 Git subcommands are standalone executables that live in the Git exec
   16 path, normally /usr/lib/git-core.  The git executable itself is a
   17 thin wrapper that knows where the subcommands live, and runs them by
   18 passing command-line arguments to them.
   19 
   20 (If "git foo" is not found in the Git exec path, the wrapper
   21 will look in the rest of your $PATH for it.  Thus, it's possible
   22 to write local Git extensions that don't live in system space.)
   23 
   24 Implementation languages
   25 ------------------------
   26 
   27 Most subcommands are written in C or shell.  A few are written in
   28 Perl.
   29 
   30 While we strongly encourage coding in portable C for portability,
   31 these specific scripting languages are also acceptable.  We won't
   32 accept more without a very strong technical case, as we don't want
   33 to broaden the Git suite's required dependencies.  Import utilities,
   34 surgical tools, remote helpers and other code at the edges of the
   35 Git suite are more lenient and we allow Python (and even Tcl/tk),
   36 but they should not be used for core functions.
   37 
   38 This may change in the future.  Especially Python is not allowed in
   39 core because we need better Python integration in the Git Windows
   40 installer before we can be confident people in that environment
   41 won't experience an unacceptably large loss of capability.
   42 
   43 C commands are normally written as single modules, named after the
   44 command, that link a collection of functions called libgit.  Thus,
   45 your command 'git-foo' would normally be implemented as a single
   46 "git-foo.c" (or "builtin/foo.c" if it is to be linked to the main
   47 binary); this organization makes it easy for people reading the code
   48 to find things.
   49 
   50 See the CodingGuidelines document for other guidance on what we consider
   51 good practice in C and shell, and api-builtin.txt for the support
   52 functions available to built-in commands written in C.
   53 
   54 What every extension command needs
   55 ----------------------------------
   56 
   57 You must have a man page, written in asciidoc (this is what Git help
   58 followed by your subcommand name will display).  Be aware that there is
   59 a local asciidoc configuration and macros which you should use.  It's
   60 often helpful to start by cloning an existing page and replacing the
   61 text content.
   62 
   63 You must have a test, written to report in TAP (Test Anything Protocol).
   64 Tests are executables (usually shell scripts) that live in the 't'
   65 subdirectory of the tree.  Each test name begins with 't' and a sequence
   66 number that controls where in the test sequence it will be executed;
   67 conventionally the rest of the name stem is that of the command
   68 being tested.
   69 
   70 Read the file t/README to learn more about the conventions to be used
   71 in writing tests, and the test support library.
   72 
   73 Integrating a command
   74 ---------------------
   75 
   76 Here are the things you need to do when you want to merge a new
   77 subcommand into the Git tree.
   78 
   79 1. Don't forget to sign off your patch!
   80 
   81 2. Append your command name to one of the variables BUILTIN_OBJS,
   82 EXTRA_PROGRAMS, SCRIPT_SH, SCRIPT_PERL or SCRIPT_PYTHON.
   83 
   84 3. Drop its test in the t directory.
   85 
   86 4. If your command is implemented in an interpreted language with a
   87 p-code intermediate form, make sure .gitignore in the main directory
   88 includes a pattern entry that ignores such files.  Python .pyc and
   89 .pyo files will already be covered.
   90 
   91 5. If your command has any dependency on a particular version of
   92 your language, document it in the INSTALL file.
   93 
   94 6. There is a file command-list.txt in the distribution main directory
   95 that categorizes commands by type, so they can be listed in appropriate
   96 subsections in the documentation's summary command list.  Add an entry
   97 for yours.  To understand the categories, look at command-list.txt
   98 in the main directory.  If the new command is part of the typical Git
   99 workflow and you believe it common enough to be mentioned in 'git help',
  100 map this command to a common group in the column [common].
  101 
  102 7. Give the maintainer one paragraph to include in the RelNotes file
  103 to describe the new feature; a good place to do so is in the cover
  104 letter [PATCH 0/n].
  105 
  106 That's all there is to it.