Merge branch 'sp/doc-smart-http'
authorJunio C Hamano <gitster@pobox.com>
Fri, 30 Aug 2013 17:10:51 +0000 (10:10 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 30 Aug 2013 17:10:52 +0000 (10:10 -0700)
* sp/doc-smart-http:
Document the HTTP transport protocols

15 files changed:
Documentation/CodingGuidelines
Documentation/RelNotes/1.8.4.txt
Documentation/SubmittingPatches
Documentation/git-merge-file.txt
Documentation/git-rev-parse.txt
Documentation/git-whatchanged.txt
Documentation/git.txt
Documentation/gitcore-tutorial.txt
GIT-VERSION-GEN
builtin/rev-parse.c
config.c
contrib/examples/git-log.sh [new file with mode: 0755]
contrib/examples/git-whatchanged.sh [new file with mode: 0755]
fetch-pack.c
t/t5500-fetch-pack.sh
index 559d5f9ebf6fefe57b403327ed3e06942d0b822b..e5ca3b75d3778308ee1b7b20e3a86475244f7b96 100644 (file)
@@ -242,6 +242,14 @@ Writing Documentation:
  processed into HTML and manpages (e.g. git.html and git.1 in the
  same directory).
 
+ The documentation liberally mixes US and UK English (en_US/UK)
+ norms for spelling and grammar, which is somewhat unfortunate.
+ In an ideal world, it would have been better if it consistently
+ used only one and not the other, and we would have picked en_US
+ (if you wish to correct the English of some of the existing
+ documentation, please see the documentation-related advice in the
+ Documentation/SubmittingPatches file).
+
  Every user-visible change should be reflected in the documentation.
  The same general rule as for code applies -- imitate the existing
  conventions.  A few commented examples follow to provide reference
index f7bff4d635baac766e8fbe33cafbd077aa4f4c1f..02f681b71051a9c964511d8f317b024f4bf1c74e 100644 (file)
@@ -267,7 +267,7 @@ Performance, Internal Implementation, etc.
    been susceptible to lossage of refs under right conditions, which
    has been tightened up.
 
- * We read loose and packed rerferences in two steps, but after
+ * We read loose and packed references in two steps, but after
    deciding to read a loose ref but before actually opening it to read
    it, another process racing with us can unlink it, which would cause
    us to barf.  The codepath has been updated to retry when such a
@@ -379,7 +379,7 @@ details).
 
  * "git apply" parsed patches that add new files, generated by
    programs other than Git, incorrectly.  This is an old breakage in
-   v1.7.11 and will need to be merged down to the maintanance tracks.
+   v1.7.11 and will need to be merged down to the maintenance tracks.
 
  * Older cURL wanted piece of memory we call it with to be stable, but
    we updated the auth material after handing it to a call.
index d0a4733e456777d97555ffd475799b468dc8b9de..705557689d7fa46f88f936bb8c42471ffbfb052b 100644 (file)
@@ -65,7 +65,20 @@ feature does not trigger when it shouldn't.  Also make sure that the
 test suite passes after your commit.  Do not forget to update the
 documentation to describe the updated behaviour.
 
-Oh, another thing.  I am picky about whitespaces.  Make sure your
+Speaking of the documentation, it is currently a liberal mixture of US
+and UK English norms for spelling and grammar, which is somewhat
+unfortunate.  A huge patch that touches the files all over the place
+only to correct the inconsistency is not welcome, though.  Potential
+clashes with other changes that can result from such a patch are not
+worth it.  We prefer to gradually reconcile the inconsistencies in
+favor of US English, with small and easily digestible patches, as a
+side effect of doing some other real work in the vicinity (e.g.
+rewriting a paragraph for clarity, while turning en_UK spelling to
+en_US).  Obvious typographical fixes are much more welcomed ("teh ->
+"the"), preferably submitted as independent patches separate from
+other documentation changes.
+
+Oh, another thing.  We are picky about whitespaces.  Make sure your
 changes do not trigger errors with the sample pre-commit hook shipped
 in templates/hooks--pre-commit.  To help ensure this does not happen,
 run git diff --check on your changes before you commit.
index d7db2a3737fbdb032747bc6dd2740be1a56dfced..d2fc12ec77b85a5c9457cbfa160e5c05c1a32f43 100644 (file)
@@ -11,7 +11,7 @@ SYNOPSIS
 [verse]
 'git merge-file' [-L <current-name> [-L <base-name> [-L <other-name>]]]
        [--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>]
-       <current-file> <base-file> <other-file>
+       [--[no-]diff3] <current-file> <base-file> <other-file>
 
 
 DESCRIPTION
@@ -66,6 +66,9 @@ OPTIONS
 -q::
        Quiet; do not warn about conflicts.
 
+--diff3::
+       Show conflicts in "diff3" style.
+
 --ours::
 --theirs::
 --union::
index 2b126c0a77f9901eea1ba5ac37a2fb2d66c4d21f..d068a653778d6713d6ab370379dadf0d6f754856 100644 (file)
@@ -24,9 +24,23 @@ distinguish between them.
 
 OPTIONS
 -------
+
+Operation Modes
+~~~~~~~~~~~~~~~
+
+Each of these options must appear first on the command line.
+
 --parseopt::
        Use 'git rev-parse' in option parsing mode (see PARSEOPT section below).
 
+--sq-quote::
+       Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE
+       section below). In contrast to the `--sq` option below, this
+       mode does only quoting. Nothing else is done to command input.
+
+Options for --parseopt
+~~~~~~~~~~~~~~~~~~~~~~
+
 --keep-dashdash::
        Only meaningful in `--parseopt` mode. Tells the option parser to echo
        out the first `--` met instead of skipping it.
@@ -36,10 +50,8 @@ OPTIONS
        the first non-option argument.  This can be used to parse sub-commands
        that take options themselves.
 
---sq-quote::
-       Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE
-       section below). In contrast to the `--sq` option below, this
-       mode does only quoting. Nothing else is done to command input.
+Options for Filtering
+~~~~~~~~~~~~~~~~~~~~~
 
 --revs-only::
        Do not output flags and parameters not meant for
@@ -55,6 +67,9 @@ OPTIONS
 --no-flags::
        Do not output flag parameters.
 
+Options for Output
+~~~~~~~~~~~~~~~~~~
+
 --default <arg>::
        If there is no parameter given by the user, use `<arg>`
        instead.
@@ -110,6 +125,17 @@ can be used.
        strip '{caret}' prefix from the object names that already have
        one.
 
+--abbrev-ref[=(strict|loose)]::
+       A non-ambiguous short name of the objects name.
+       The option core.warnAmbiguousRefs is used to select the strict
+       abbreviation mode.
+
+--short::
+--short=number::
+       Instead of outputting the full SHA-1 values of object names try to
+       abbreviate them to a shorter unique name. When no length is specified
+       7 is used. The minimum length is 4.
+
 --symbolic::
        Usually the object names are output in SHA-1 form (with
        possible '{caret}' prefix); this option makes them output in a
@@ -123,16 +149,8 @@ can be used.
        unfortunately named tag "master"), and show them as full
        refnames (e.g. "refs/heads/master").
 
---abbrev-ref[=(strict|loose)]::
-       A non-ambiguous short name of the objects name.
-       The option core.warnAmbiguousRefs is used to select the strict
-       abbreviation mode.
-
---disambiguate=<prefix>::
-       Show every object whose name begins with the given prefix.
-       The <prefix> must be at least 4 hexadecimal digits long to
-       avoid listing each and every object in the repository by
-       mistake.
+Options for Objects
+~~~~~~~~~~~~~~~~~~~
 
 --all::
        Show all refs found in `refs/`.
@@ -155,18 +173,20 @@ shown.  If the pattern does not contain a globbing character (`?`,
        character (`?`, `*`, or `[`), it is turned into a prefix
        match by appending `/*`.
 
---show-toplevel::
-       Show the absolute path of the top-level directory.
+--disambiguate=<prefix>::
+       Show every object whose name begins with the given prefix.
+       The <prefix> must be at least 4 hexadecimal digits long to
+       avoid listing each and every object in the repository by
+       mistake.
 
---show-prefix::
-       When the command is invoked from a subdirectory, show the
-       path of the current directory relative to the top-level
-       directory.
+Options for Files
+~~~~~~~~~~~~~~~~~
 
---show-cdup::
-       When the command is invoked from a subdirectory, show the
-       path of the top-level directory relative to the current
-       directory (typically a sequence of "../", or an empty string).
+--local-env-vars::
+       List the GIT_* environment variables that are local to the
+       repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR).
+       Only the names of the variables are listed, not their value,
+       even if they are set.
 
 --git-dir::
        Show `$GIT_DIR` if defined. Otherwise show the path to
@@ -188,17 +208,27 @@ print a message to stderr and exit with nonzero status.
 --is-bare-repository::
        When the repository is bare print "true", otherwise "false".
 
---local-env-vars::
-       List the GIT_* environment variables that are local to the
-       repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR).
-       Only the names of the variables are listed, not their value,
-       even if they are set.
+--resolve-git-dir <path>::
+       Check if <path> is a valid repository or a gitfile that
+       points at a valid repository, and print the location of the
+       repository.  If <path> is a gitfile then the resolved path
+       to the real repository is printed.
 
---short::
---short=number::
-       Instead of outputting the full SHA-1 values of object names try to
-       abbreviate them to a shorter unique name. When no length is specified
-       7 is used. The minimum length is 4.
+--show-cdup::
+       When the command is invoked from a subdirectory, show the
+       path of the top-level directory relative to the current
+       directory (typically a sequence of "../", or an empty string).
+
+--show-prefix::
+       When the command is invoked from a subdirectory, show the
+       path of the current directory relative to the top-level
+       directory.
+
+--show-toplevel::
+       Show the absolute path of the top-level directory.
+
+Other Options
+~~~~~~~~~~~~~
 
 --since=datestring::
 --after=datestring::
@@ -213,12 +243,6 @@ print a message to stderr and exit with nonzero status.
 <args>...::
        Flags and parameters to be parsed.
 
---resolve-git-dir <path>::
-       Check if <path> is a valid repository or a gitfile that
-       points at a valid repository, and print the location of the
-       repository.  If <path> is a gitfile then the resolved path
-       to the real repository is printed.
-
 
 include::revisions.txt[]
 
index c600b61e2b62013366476807c733837c0e854165..8b63ceb00e71a5e2f09cf7686b0978dcf71d1e03 100644 (file)
@@ -13,43 +13,17 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-Shows commit logs and diff output each commit introduces.  The
-command internally invokes 'git rev-list' piped to
-'git diff-tree', and takes command line options for both of
-these commands.
 
-This manual page describes only the most frequently used options.
+Shows commit logs and diff output each commit introduces.
 
+New users are encouraged to use linkgit:git-log[1] instead.  The
+`whatchanged` command is essentially the same as linkgit:git-log[1]
+but defaults to show the raw format diff output and to skip merges.
 
-OPTIONS
--------
--p::
-       Show textual diffs, instead of the Git internal diff
-       output format that is useful only to tell the changed
-       paths and their nature of changes.
+The command is kept primarily for historical reasons; fingers of
+many people who learned Git long before `git log` was invented by
+reading Linux kernel mailing list are trained to type it.
 
--<n>::
-       Limit output to <n> commits.
-
-<since>..<until>::
-       Limit output to between the two named commits (bottom
-       exclusive, top inclusive).
-
--r::
-       Show Git internal diff output, but for the whole tree,
-       not just the top level.
-
--m::
-       By default, differences for merge commits are not shown.
-       With this flag, show differences to that commit from all
-       of its parents.
-+
-However, it is not very useful in general, although it
-*is* useful on a file-by-file basis.
-
-include::pretty-options.txt[]
-
-include::pretty-formats.txt[]
 
 Examples
 --------
index 3bdd56e8f41bbe1fa695c5ef03a7c6d253e7af62..83edf308b1f7b9779bfc409ab518a812eb231275 100644 (file)
@@ -43,6 +43,11 @@ unreleased) version of Git, that is available from 'master'
 branch of the `git.git` repository.
 Documentation for older releases are available here:
 
+* link:v1.8.4/git.html[documentation for release 1.8.4]
+
+* release notes for
+  link:RelNotes/1.8.4.txt[1.8.4].
+
 * link:v1.8.3.4/git.html[documentation for release 1.8.3.4]
 
 * release notes for
@@ -818,7 +823,7 @@ for further details.
 'GIT_FLUSH'::
        If this environment variable is set to "1", then commands such
        as 'git blame' (in incremental mode), 'git rev-list', 'git log',
-       'git check-attr', 'git check-ignore', and 'git whatchanged' will
+       'git check-attr' and 'git check-ignore' will
        force a flush of the output stream after each record have been
        flushed. If this
        variable is set to "0", the output of these commands will be done
index f538a870c72dec8a022c23d5023cf5252e9925cf..058a3529809e41dfaf29dc510c2cb626dedb5402 100644 (file)
@@ -534,42 +534,9 @@ all, but just show the actual commit message.
 
 In fact, together with the 'git rev-list' program (which generates a
 list of revisions), 'git diff-tree' ends up being a veritable fount of
-changes. A trivial (but very useful) script called 'git whatchanged' is
-included with Git which does exactly this, and shows a log of recent
-activities.
-
-To see the whole history of our pitiful little git-tutorial project, you
-can do
-
-----------------
-$ git log
-----------------
-
-which shows just the log messages, or if we want to see the log together
-with the associated patches use the more complex (and much more
-powerful)
-
-----------------
-$ git whatchanged -p
-----------------
-
-and you will see exactly what has changed in the repository over its
-short history.
-
-[NOTE]
-When using the above two commands, the initial commit will be shown.
-If this is a problem because it is huge, you can hide it by setting
-the log.showroot configuration variable to false. Having this, you
-can still show it for each command just adding the `--root` option,
-which is a flag for 'git diff-tree' accepted by both commands.
-
-With that, you should now be having some inkling of what Git does, and
-can explore on your own.
-
-[NOTE]
-Most likely, you are not directly using the core
-Git Plumbing commands, but using Porcelain such as 'git add', `git-rm'
-and `git-commit'.
+changes.  You can emulate `git log`, `git log -p`, etc. with a trivial
+script that pipes the output of `git rev-list` to `git diff-tree --stdin`,
+which was exactly how early versions of `git log` were implemented.
 
 
 Tagging a version
index 572dfeb6e0a3e5cb8fee52053004f7f23ad3b424..06026eaed7b4eadca91f1e8cd221cfda86a8fd87 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v1.8.4-rc4
+DEF_VER=v1.8.4
 
 LF='
 '
index de894c75773c78afb2c0f1ea4ea5aff8ec7de6bc..c9aa28fd75c6e4f995906c584ec185617ec76856 100644 (file)
@@ -486,21 +486,6 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
        if (argc > 1 && !strcmp("--sq-quote", argv[1]))
                return cmd_sq_quote(argc - 2, argv + 2);
 
-       if (argc == 2 && !strcmp("--local-env-vars", argv[1])) {
-               int i;
-               for (i = 0; local_repo_env[i]; i++)
-                       printf("%s\n", local_repo_env[i]);
-               return 0;
-       }
-
-       if (argc > 2 && !strcmp(argv[1], "--resolve-git-dir")) {
-               const char *gitdir = resolve_gitdir(argv[2]);
-               if (!gitdir)
-                       die("not a gitdir '%s'", argv[2]);
-               puts(gitdir);
-               return 0;
-       }
-
        if (argc > 1 && !strcmp("-h", argv[1]))
                usage(builtin_rev_parse_usage);
 
@@ -661,6 +646,12 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
                                for_each_remote_ref(show_reference, NULL);
                                continue;
                        }
+                       if (!strcmp(arg, "--local-env-vars")) {
+                               int i;
+                               for (i = 0; local_repo_env[i]; i++)
+                                       printf("%s\n", local_repo_env[i]);
+                               continue;
+                       }
                        if (!strcmp(arg, "--show-toplevel")) {
                                const char *work_tree = get_git_work_tree();
                                if (work_tree)
@@ -711,6 +702,13 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
                                printf("%s%s.git\n", cwd, len && cwd[len-1] != '/' ? "/" : "");
                                continue;
                        }
+                       if (!strcmp(arg, "--resolve-git-dir")) {
+                               const char *gitdir = resolve_gitdir(argv[i+1]);
+                               if (!gitdir)
+                                       die("not a gitdir '%s'", argv[i+1]);
+                               puts(gitdir);
+                               continue;
+                       }
                        if (!strcmp(arg, "--is-inside-git-dir")) {
                                printf("%s\n", is_inside_git_dir() ? "true"
                                                : "false");
index e13a7b65e7615da7d788fddd001716a17baef5db..9f9bf0cc9a1405e938fddbedc44468782ad61021 100644 (file)
--- a/config.c
+++ b/config.c
@@ -27,9 +27,9 @@ struct config_source {
        struct strbuf value;
        struct strbuf var;
 
-       int (*fgetc)(struct config_source *c);
-       int (*ungetc)(int c, struct config_source *conf);
-       long (*ftell)(struct config_source *c);
+       int (*do_fgetc)(struct config_source *c);
+       int (*do_ungetc)(int c, struct config_source *conf);
+       long (*do_ftell)(struct config_source *c);
 };
 
 static struct config_source *cf;
@@ -217,13 +217,13 @@ int git_config_from_parameters(config_fn_t fn, void *data)
 
 static int get_next_char(void)
 {
-       int c = cf->fgetc(cf);
+       int c = cf->do_fgetc(cf);
 
        if (c == '\r') {
                /* DOS like systems */
-               c = cf->fgetc(cf);
+               c = cf->do_fgetc(cf);
                if (c != '\n') {
-                       cf->ungetc(c, cf);
+                       cf->do_ungetc(c, cf);
                        c = '\r';
                }
        }
@@ -992,9 +992,9 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)
                top.u.file = f;
                top.name = filename;
                top.die_on_error = 1;
-               top.fgetc = config_file_fgetc;
-               top.ungetc = config_file_ungetc;
-               top.ftell = config_file_ftell;
+               top.do_fgetc = config_file_fgetc;
+               top.do_ungetc = config_file_ungetc;
+               top.do_ftell = config_file_ftell;
 
                ret = do_config_from(&top, fn, data);
 
@@ -1013,9 +1013,9 @@ int git_config_from_buf(config_fn_t fn, const char *name, const char *buf,
        top.u.buf.pos = 0;
        top.name = name;
        top.die_on_error = 0;
-       top.fgetc = config_buf_fgetc;
-       top.ungetc = config_buf_ungetc;
-       top.ftell = config_buf_ftell;
+       top.do_fgetc = config_buf_fgetc;
+       top.do_ungetc = config_buf_ungetc;
+       top.do_ftell = config_buf_ftell;
 
        return do_config_from(&top, fn, data);
 }
@@ -1196,7 +1196,7 @@ static int store_aux(const char *key, const char *value, void *cb)
                                return 1;
                        }
 
-                       store.offset[store.seen] = cf->ftell(cf);
+                       store.offset[store.seen] = cf->do_ftell(cf);
                        store.seen++;
                }
                break;
@@ -1223,19 +1223,19 @@ static int store_aux(const char *key, const char *value, void *cb)
                 * Do not increment matches: this is no match, but we
                 * just made sure we are in the desired section.
                 */
-               store.offset[store.seen] = cf->ftell(cf);
+               store.offset[store.seen] = cf->do_ftell(cf);
                /* fallthru */
        case SECTION_END_SEEN:
        case START:
                if (matches(key, value)) {
-                       store.offset[store.seen] = cf->ftell(cf);
+                       store.offset[store.seen] = cf->do_ftell(cf);
                        store.state = KEY_SEEN;
                        store.seen++;
                } else {
                        if (strrchr(key, '.') - key == store.baselen &&
                              !strncmp(key, store.key, store.baselen)) {
                                        store.state = SECTION_SEEN;
-                                       store.offset[store.seen] = cf->ftell(cf);
+                                       store.offset[store.seen] = cf->do_ftell(cf);
                        }
                }
        }
diff --git a/contrib/examples/git-log.sh b/contrib/examples/git-log.sh
new file mode 100755 (executable)
index 0000000..c2ea71c
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# Copyright (c) 2005 Linus Torvalds
+#
+
+USAGE='[--max-count=<n>] [<since>..<limit>] [--pretty=<format>] [git-rev-list options]'
+SUBDIRECTORY_OK='Yes'
+. git-sh-setup
+
+revs=$(git-rev-parse --revs-only --no-flags --default HEAD "$@") || exit
+[ "$revs" ] || {
+       die "No HEAD ref"
+}
+git-rev-list --pretty $(git-rev-parse --default HEAD "$@") |
+LESS=-S ${PAGER:-less}
diff --git a/contrib/examples/git-whatchanged.sh b/contrib/examples/git-whatchanged.sh
new file mode 100755 (executable)
index 0000000..1fb9feb
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+USAGE='[-p] [--max-count=<n>] [<since>..<limit>] [--pretty=<format>] [-m] [git-diff-tree options] [git-rev-list options]'
+SUBDIRECTORY_OK='Yes'
+. git-sh-setup
+
+diff_tree_flags=$(git-rev-parse --sq --no-revs --flags "$@") || exit
+case "$0" in
+*whatchanged)
+       count=
+       test -z "$diff_tree_flags" &&
+               diff_tree_flags=$(git-repo-config --get whatchanged.difftree)
+       diff_tree_default_flags='-c -M --abbrev' ;;
+*show)
+       count=-n1
+       test -z "$diff_tree_flags" &&
+               diff_tree_flags=$(git-repo-config --get show.difftree)
+       diff_tree_default_flags='--cc --always' ;;
+esac
+test -z "$diff_tree_flags" &&
+       diff_tree_flags="$diff_tree_default_flags"
+
+rev_list_args=$(git-rev-parse --sq --default HEAD --revs-only "$@") &&
+diff_tree_args=$(git-rev-parse --sq --no-revs --no-flags "$@") &&
+
+eval "git-rev-list $count $rev_list_args" |
+eval "git-diff-tree --stdin --pretty -r $diff_tree_flags $diff_tree_args" |
+LESS="$LESS -S" ${PAGER:-less}
index 6684348c0ec9ea742eb98666b56a0bfcef316560..f5d99c11813b1ae2eee0bb7dfd94eab60c721b64 100644 (file)
@@ -897,6 +897,8 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
                packet_flush(fd[1]);
        if (args->depth > 0)
                setup_alternate_shallow();
+       else
+               alternate_shallow_file = NULL;
        if (get_pack(args, fd, pack_lockfile))
                die("git fetch-pack: fetch failed.");
 
@@ -987,7 +989,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args,
        }
        ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought, pack_lockfile);
 
-       if (alternate_shallow_file) {
+       if (args->depth > 0 && alternate_shallow_file) {
                if (*alternate_shallow_file == '\0') { /* --unshallow */
                        unlink_or_warn(git_path("shallow"));
                        rollback_lock_file(&shallow_lock);
index fd2598e60190fe04381652c7dfe997e01b4ea0c5..a80584ea0eaba854ff21318e3c9646f72325bee7 100755 (executable)
@@ -505,4 +505,20 @@ test_expect_success 'test --all, --depth, and explicit tag' '
        ) >out-adt 2>error-adt
 '
 
+test_expect_success 'shallow fetch with tags does not break the repository' '
+       mkdir repo1 &&
+       (
+               cd repo1 &&
+               git init &&
+               test_commit 1 &&
+               test_commit 2 &&
+               test_commit 3 &&
+               mkdir repo2 &&
+               cd repo2 &&
+               git init &&
+               git fetch --depth=2 ../.git master:branch &&
+               git fsck
+       )
+'
+
 test_done