Merge branch 'master' of git://github.com/git-l10n/git-po
authorJiang Xin <worldhello.net@gmail.com>
Tue, 4 Sep 2018 00:49:54 +0000 (08:49 +0800)
committerJiang Xin <worldhello.net@gmail.com>
Tue, 4 Sep 2018 00:49:54 +0000 (08:49 +0800)
* 'master' of git://github.com/git-l10n/git-po:
l10n: ru.po: update Russian translation
l10n: git.pot: v2.19.0 round 1 (382 new, 30 removed)
l10n: de.po: translate 108 new messages
l10n: zh_CN: review for git 2.18.0
l10n: sv.po: Update Swedish translation(3608t0f0u)

116 files changed:
Documentation/RelNotes/2.19.0.txt
Documentation/config.txt
Documentation/diff-config.txt
Documentation/git-branch.txt
Documentation/git-worktree.txt
GIT-VERSION-GEN
Makefile
blame.c
branch.c
builtin/branch.c
builtin/checkout-index.c
builtin/pack-objects.c
builtin/pull.c
builtin/push.c
builtin/range-diff.c
builtin/remote.c
builtin/send-pack.c
builtin/submodule--helper.c
builtin/worktree.c
cache.h
ci/run-build-and-tests.sh
commit.c
config.c
generate-cmdlist.sh
http.c
pack-objects.c
pack-objects.h
sequencer.c
t/README
t/helper/test-tool.h
t/lib-rebase.sh
t/t0000-basic.sh
t/t0001-init.sh
t/t0003-attributes.sh
t/t0020-crlf.sh
t/t0030-stripspace.sh
t/t0040-parse-options.sh
t/t0061-run-command.sh
t/t0090-cache-tree.sh
t/t0203-gettext-setlocale-sanity.sh
t/t1300-config.sh
t/t1410-reflog.sh
t/t1411-reflog-show.sh
t/t1450-fsck.sh
t/t1501-work-tree.sh
t/t1510-repo-setup.sh
t/t1600-index.sh
t/t1700-split-index.sh
t/t2013-checkout-submodule.sh
t/t2025-worktree-add.sh
t/t2200-add-update.sh
t/t2203-add-intent.sh
t/t2204-add-ignored.sh
t/t3001-ls-files-others-exclude.sh
t/t3004-ls-files-basic.sh
t/t3035-merge-sparse.sh
t/t3200-branch.sh
t/t3210-pack-refs.sh
t/t3301-notes.sh
t/t3308-notes-merge.sh
t/t3310-notes-merge-manual-resolve.sh
t/t3404-rebase-interactive.sh
t/t3420-rebase-autostash.sh
t/t3600-rm.sh
t/t3903-stash.sh
t/t4011-diff-symlink.sh
t/t4015-diff-whitespace.sh
t/t4019-diff-wserror.sh
t/t4027-diff-submodule.sh
t/t4041-diff-submodule-option.sh
t/t4047-diff-dirstat.sh
t/t4051-diff-function-context.sh
t/t4060-diff-submodule-option-diff-format.sh
t/t4116-apply-reverse.sh
t/t4124-apply-ws-rule.sh
t/t4132-apply-removal.sh
t/t4150-am.sh
t/t4201-shortlog.sh
t/t4203-mailmap.sh
t/t4211-line-log.sh
t/t4212-log-corrupt.sh
t/t4300-merge-tree.sh
t/t5304-prune.sh
t/t5314-pack-cycle-detection.sh
t/t5401-update-hooks.sh
t/t5500-fetch-pack.sh
t/t5509-fetch-push-namespaces.sh
t/t5523-push-upstream.sh
t/t5526-fetch-submodules.sh
t/t5541-http-push-smart.sh
t/t5570-git-daemon.sh
t/t6018-rev-list-glob.sh
t/t6112-rev-list-filters-objects.sh
t/t6120-describe.sh
t/t6130-pathspec-noglob.sh
t/t6200-fmt-merge-msg.sh
t/t7001-mv.sh
t/t7004-tag.sh
t/t7008-grep-binary.sh
t/t7064-wtstatus-pv2.sh
t/t7201-co.sh
t/t7400-submodule-basic.sh
t/t7401-submodule-summary.sh
t/t7501-commit.sh
t/t7600-merge.sh
t/t7610-mergetool.sh
t/t7810-grep.sh
t/t7811-grep-open.sh
t/t8010-cat-file-filters.sh
t/t9011-svn-da.sh
t/t9131-git-svn-empty-symlink.sh
t/t9135-git-svn-moved-branch-empty-file.sh
t/t9200-git-cvsexportcommit.sh
t/t9802-git-p4-filetype.sh
t/t9903-bash-prompt.sh
tree-diff.c
index bcbfbc2041b7150d0e20f1f37fff8de1a8f243f7..6a331587e4ab61cf8a436dd0f3bb57f8d46a87bd 100644 (file)
@@ -83,6 +83,13 @@ UI, Workflows & Features
  * The sideband code learned to optionally paint selected keywords at
    the beginning of incoming lines on the receiving end.
 
+ * "git branch --list" learned to take the default sort order from the
+   'branch.sort' configuration variable, just like "git tag --list"
+   pays attention to 'tag.sort'.
+
+ * "git worktree" command learned "--quiet" option to make it less
+   verbose.
+
 
 Performance, Internal Implementation, Development Support etc.
 
@@ -251,6 +258,14 @@ Performance, Internal Implementation, Development Support etc.
    getting them coalesced into fewer packfiles, hurting performance.
    "git repack" now learned to repack them.
 
+ * Partially revert the support for multiple hash functions to regain
+   hash comparison performance; we'd think of a way to do this better
+   in the next cycle.
+
+ * "git help --config" (which is used in command line completion)
+   missed the configuration variables not described in the main
+   config.txt file but are described in another file that is included
+   by it, which has been corrected.
 
 Fixes since v2.18
 -----------------
@@ -300,7 +315,6 @@ Fixes since v2.18
    indicates whether/where a submodule repository has its associated
    working tree across various state transitions, which has been
    corrected.
-   (merge 984cd77ddb sb/submodule-core-worktree later to maint).
 
  * Bugfix for "rebase -i" corner case regression.
    (merge a9279c6785 pw/rebase-i-keep-reword-after-conflict later to maint).
@@ -533,6 +547,15 @@ Fixes since v2.18
    has been corrected.
    (merge 3e7dd99208 nd/cherry-pick-quit-fix later to maint).
 
+ * In a recent update in 2.18 era, "git pack-objects" started
+   producing a larger than necessary packfiles by missing
+   opportunities to use large deltas.  This has been corrected.
+
+ * The meaning of the possible values the "core.checkStat"
+   configuration variable can take were not adequately documented,
+   which has been fixed.
+   (merge 9bf5d4c4e2 nd/config-core-checkstat-doc later to maint).
+
  * Code cleanup, docfix, build fix, etc.
    (merge aee9be2ebe sg/update-ref-stdin-cleanup later to maint).
    (merge 037714252f jc/clean-after-sanity-tests later to maint).
@@ -565,3 +588,13 @@ Fixes since v2.18
    (merge 10c600172c sg/t5310-empty-input-fix later to maint).
    (merge 5641eb9465 jh/partial-clone-doc later to maint).
    (merge 2711b1ad5e ab/submodule-relative-url-tests later to maint).
+   (merge ce528de023 ab/unconditional-free-and-null later to maint).
+   (merge bbc072f5d8 rs/opt-updates later to maint).
+   (merge 69d846f053 jk/use-compat-util-in-test-tool later to maint).
+   (merge 1820703045 js/larger-timestamps later to maint).
+   (merge c8b35b95e1 sg/t4051-fix later to maint).
+   (merge 30612cb670 sg/t0020-conversion-fix later to maint).
+   (merge 15da753709 sg/t7501-thinkofix later to maint).
+   (merge 79b04f9b60 sg/t3903-missing-fix later to maint).
+   (merge 2745817028 sg/t3420-autostash-fix later to maint).
+   (merge 7afb0d6777 sg/test-rebase-editor-fix later to maint).
index 1c42364988ac1890007b617f50653061c1cc2350..eb66a119753726b0260acd456f5728351dc05ba3 100644 (file)
@@ -462,10 +462,20 @@ core.untrackedCache::
        See linkgit:git-update-index[1]. `keep` by default.
 
 core.checkStat::
-       Determines which stat fields to match between the index
-       and work tree. The user can set this to 'default' or
-       'minimal'. Default (or explicitly 'default'), is to check
-       all fields, including the sub-second part of mtime and ctime.
+       When missing or is set to `default`, many fields in the stat
+       structure are checked to detect if a file has been modified
+       since Git looked at it.  When this configuration variable is
+       set to `minimal`, sub-second part of mtime and ctime, the
+       uid and gid of the owner of the file, the inode number (and
+       the device number, if Git was compiled to use it), are
+       excluded from the check among these fields, leaving only the
+       whole-second part of mtime (and ctime, if `core.trustCtime`
+       is set) and the filesize to be checked.
++
+There are implementations of Git that do not leave usable values in
+some fields (e.g. JGit); by excluding these fields from the
+comparison, the `minimal` mode may help interoperability when the
+same repository is used by these other systems at the same time.
 
 core.quotePath::
        Commands that output paths (e.g. 'ls-files', 'diff'), will
@@ -917,12 +927,10 @@ core.notesRef::
 This setting defaults to "refs/notes/commits", and it can be overridden by
 the `GIT_NOTES_REF` environment variable.  See linkgit:git-notes[1].
 
-gc.commitGraph::
-       If true, then gc will rewrite the commit-graph file when
-       linkgit:git-gc[1] is run. When using linkgit:git-gc[1]
-       '--auto' the commit-graph will be updated if housekeeping is
-       required. Default is false. See linkgit:git-commit-graph[1]
-       for details.
+core.commitGraph::
+       If true, then git will read the commit-graph file (if it exists)
+       to parse the graph structure of commits. Defaults to false. See
+       linkgit:git-commit-graph[1] for more information.
 
 core.useReplaceRefs::
        If set to `false`, behave as if the `--no-replace-objects`
@@ -1044,6 +1052,12 @@ branch.autoSetupRebase::
        branch to track another branch.
        This option defaults to never.
 
+branch.sort::
+       This variable controls the sort ordering of branches when displayed by
+       linkgit:git-branch[1]. Without the "--sort=<value>" option provided, the
+       value of this variable will be used as the default.
+       See linkgit:git-for-each-ref[1] field names for valid values.
+
 branch.<name>.remote::
        When on branch <name>, it tells 'git fetch' and 'git push'
        which remote to fetch from/push to.  The remote to push to
@@ -1203,18 +1217,6 @@ This does not affect linkgit:git-format-patch[1] or the
 'git-diff-{asterisk}' plumbing commands.  Can be overridden on the
 command line with the `--color[=<when>]` option.
 
-diff.colorMoved::
-       If set to either a valid `<mode>` or a true value, moved lines
-       in a diff are colored differently, for details of valid modes
-       see '--color-moved' in linkgit:git-diff[1]. If simply set to
-       true the default color mode will be used. When set to false,
-       moved lines are not colored.
-
-diff.colorMovedWS::
-       When moved lines are colored using e.g. the `diff.colorMoved` setting,
-       this option controls the `<mode>` how spaces are treated
-       for details of valid modes see '--color-moved-ws' in linkgit:git-diff[1].
-
 color.diff.<slot>::
        Use customized color for diff colorization.  `<slot>` specifies
        which part of the patch to use the specified color, and is one
@@ -1763,6 +1765,13 @@ this configuration variable is ignored, all packs except the base pack
 will be repacked. After this the number of packs should go below
 gc.autoPackLimit and gc.bigPackThreshold should be respected again.
 
+gc.writeCommitGraph::
+       If true, then gc will rewrite the commit-graph file when
+       linkgit:git-gc[1] is run. When using linkgit:git-gc[1]
+       '--auto' the commit-graph will be updated if housekeeping is
+       required. Default is false. See linkgit:git-commit-graph[1]
+       for details.
+
 gc.logExpiry::
        If the file gc.log exists, then `git gc --auto` won't run
        unless that file is more than 'gc.logExpiry' old.  Default is
index 77caa66c2f768b6e43322c4662f45b4191a163c0..85bca83c304c6d95422482b9bc7b8d983bfdc85e 100644 (file)
@@ -208,3 +208,15 @@ diff.wsErrorHighlight::
        whitespace errors are colored with `color.diff.whitespace`.
        The command line option `--ws-error-highlight=<kind>`
        overrides this setting.
+
+diff.colorMoved::
+       If set to either a valid `<mode>` or a true value, moved lines
+       in a diff are colored differently, for details of valid modes
+       see '--color-moved' in linkgit:git-diff[1]. If simply set to
+       true the default color mode will be used. When set to false,
+       moved lines are not colored.
+
+diff.colorMovedWS::
+       When moved lines are colored using e.g. the `diff.colorMoved` setting,
+       this option controls the `<mode>` how spaces are treated
+       for details of valid modes see '--color-moved-ws' in linkgit:git-diff[1].
index 1072ca0eb61e45f5049fedfd24a7512ff81ee957..9767b2b483dbe634db1a700e4b3529593f8189ec 100644 (file)
@@ -268,10 +268,11 @@ start-point is either a local or remote-tracking branch.
        order of the value. You may use the --sort=<key> option
        multiple times, in which case the last key becomes the primary
        key. The keys supported are the same as those in `git
-       for-each-ref`. Sort order defaults to sorting based on the
+       for-each-ref`. Sort order defaults to the value configured for the
+       `branch.sort` variable if exists, or to sorting based on the
        full refname (including `refs/...` prefix). This lists
        detached HEAD (if present) first, then local branches and
-       finally remote-tracking branches.
+       finally remote-tracking branches. See linkgit:git-config[1].
 
 
 --points-at <object>::
index 9c26be40f4412b5f0a9c478236b9d3c38fcb14ec..29a5b7e252a378b2f992bdeeb6c26cfe6f01f6b4 100644 (file)
@@ -173,6 +173,10 @@ This can also be set up as the default behaviour by using the
        This format will remain stable across Git versions and regardless of user
        configuration.  See below for details.
 
+-q::
+--quiet::
+       With 'add', suppress feedback messages.
+
 -v::
 --verbose::
        With `prune`, report all removals.
index 81f43978f2069c3494d6a4d6f9f6653c77fe6490..cad3b59a93f42242a87c22ad376137296c770bdb 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.19.0-rc0
+DEF_VER=v2.19.0-rc1
 
 LF='
 '
index d03df31c2a61b29caa60928eb3b3f131562152d3..5a969f5830a4105d3e3e6236eaa51e19880cc873 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2047,7 +2047,7 @@ $(BUILT_INS): git$X
 
 command-list.h: generate-cmdlist.sh command-list.txt
 
-command-list.h: $(wildcard Documentation/git*.txt) Documentation/config.txt
+command-list.h: $(wildcard Documentation/git*.txt) Documentation/*config.txt
        $(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh command-list.txt >$@+ && mv $@+ $@
 
 SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
diff --git a/blame.c b/blame.c
index 08c0c6cf73c349a2b7ad6fe129443852318a5044..aca06f4b1227a4930a2dbb13b87068a618a76f97 100644 (file)
--- a/blame.c
+++ b/blame.c
@@ -337,9 +337,7 @@ static void fill_origin_blob(struct diff_options *opt,
 
 static void drop_origin_blob(struct blame_origin *o)
 {
-       if (o->file.ptr) {
-               FREE_AND_NULL(o->file.ptr);
-       }
+       FREE_AND_NULL(o->file.ptr);
 }
 
 /*
index ecd710d7308c9d2be85cd3bcde4fd9d38dec0edc..776f55fc66fb7d782f30b05ca9bdff4a55028f49 100644 (file)
--- a/branch.c
+++ b/branch.c
@@ -25,9 +25,7 @@ static int find_tracked_branch(struct remote *remote, void *priv)
                        tracking->remote = remote->name;
                } else {
                        free(tracking->spec.src);
-                       if (tracking->src) {
-                               FREE_AND_NULL(tracking->src);
-                       }
+                       FREE_AND_NULL(tracking->src);
                }
                tracking->spec.src = NULL;
        }
index 4fc55c3508c2fff3e92e6235ed35ba582caf4b15..bbd006aab4b4798b7e86530fe3562c753e879bc1 100644 (file)
@@ -74,6 +74,14 @@ define_list_config_array(color_branch_slots);
 static int git_branch_config(const char *var, const char *value, void *cb)
 {
        const char *slot_name;
+       struct ref_sorting **sorting_tail = (struct ref_sorting **)cb;
+
+       if (!strcmp(var, "branch.sort")) {
+               if (!value)
+                       return config_error_nonbool(var);
+               parse_ref_sorting(sorting_tail, value);
+               return 0;
+       }
 
        if (starts_with(var, "column."))
                return git_column_config(var, value, "branch", &colopts);
@@ -653,7 +661,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
        if (argc == 2 && !strcmp(argv[1], "-h"))
                usage_with_options(builtin_branch_usage, options);
 
-       git_config(git_branch_config, NULL);
+       git_config(git_branch_config, sorting_tail);
 
        track = git_branch_track;
 
index d92db62fbdf15c14ff3d85b767a069b22aa3897d..88b86c8d9f5a0ea9c49b42e891082203b80a977f 100644 (file)
@@ -172,7 +172,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
                        N_("write the content to temporary files")),
                OPT_STRING(0, "prefix", &state.base_dir, N_("string"),
                        N_("when creating files, prepend <string>")),
-               { OPTION_CALLBACK, 0, "stage", NULL, "1-3|all",
+               { OPTION_CALLBACK, 0, "stage", NULL, "(1|2|3|all)",
                        N_("copy out the files from named stage"),
                        PARSE_OPT_NONEG, option_parse_stage },
                OPT_END()
index 0d80dee2ba1ad82fd21622f73dac86b6010da4b6..d1144a8f7ef79f7efa5bf64141a9133cfeee66d1 100644 (file)
@@ -2041,10 +2041,6 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
        delta_buf = create_delta(src->index, trg->data, trg_size, &delta_size, max_size);
        if (!delta_buf)
                return 0;
-       if (delta_size >= (1U << OE_DELTA_SIZE_BITS)) {
-               free(delta_buf);
-               return 0;
-       }
 
        if (DELTA(trg_entry)) {
                /* Prefer only shallower same-sized deltas. */
@@ -2303,6 +2299,7 @@ static void init_threaded_search(void)
        pthread_mutex_init(&cache_mutex, NULL);
        pthread_mutex_init(&progress_mutex, NULL);
        pthread_cond_init(&progress_cond, NULL);
+       pthread_mutex_init(&to_pack.lock, NULL);
        old_try_to_free_routine = set_try_to_free_routine(try_to_free_from_threads);
 }
 
index 53bc5facfdabd05934a351091f2040744b2575ca..681c127a07071c98641972227a28dbe7f77eaf70 100644 (file)
@@ -135,7 +135,7 @@ static struct option pull_options[] = {
        /* Options passed to git-merge or git-rebase */
        OPT_GROUP(N_("Options related to merging")),
        { OPTION_CALLBACK, 'r', "rebase", &opt_rebase,
-         "false|true|merges|preserve|interactive",
+         "(false|true|merges|preserve|interactive)",
          N_("incorporate changes by rebasing rather than merging"),
          PARSE_OPT_OPTARG, parse_opt_rebase },
        OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL,
index ef4c188895beab317a66523b23a9f1c87e634405..d09a42062c36d930b8147d6b0a4bcfedf34a2321 100644 (file)
@@ -561,7 +561,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
                  0, CAS_OPT_NAME, &cas, N_("<refname>:<expect>"),
                  N_("require old value of ref to be at this value"),
                  PARSE_OPT_OPTARG | PARSE_OPT_LITERAL_ARGHELP, parseopt_push_cas_option },
-               { OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules, "check|on-demand|no",
+               { OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules, "(check|on-demand|no)",
                        N_("control recursive pushing of submodules"),
                        PARSE_OPT_OPTARG, option_parse_recurse_submodules },
                OPT_BOOL_F( 0 , "thin", &thin, N_("use thin pack"), PARSE_OPT_NOCOMPLETE),
@@ -576,7 +576,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
                OPT_BIT(0, "follow-tags", &flags, N_("push missing but relevant tags"),
                        TRANSPORT_PUSH_FOLLOW_TAGS),
                { OPTION_CALLBACK,
-                 0, "signed", &push_cert, "yes|no|if-asked", N_("GPG sign the push"),
+                 0, "signed", &push_cert, "(yes|no|if-asked)", N_("GPG sign the push"),
                  PARSE_OPT_OPTARG, option_parse_push_signed },
                OPT_BIT(0, "atomic", &flags, N_("request atomic transaction on remote side"), TRANSPORT_PUSH_ATOMIC),
                OPT_STRING_LIST('o', "push-option", &push_options_cmdline, N_("server-specific"), N_("option to transmit")),
index f52d45d9d614445e3473c810e9305c986a4dfdf8..0aa9bed41f35bf99784acd4abab52df415c5fb00 100644 (file)
@@ -25,7 +25,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
                OPT_INTEGER(0, "creation-factor", &creation_factor,
                            N_("Percentage by which creation is weighted")),
                OPT_BOOL(0, "no-dual-color", &simple_color,
-                           N_("color both diff and diff-between-diffs")),
+                           N_("use simple diff colors")),
                OPT_END()
        };
        int i, j, res = 0;
index 07bd51f8eb348036e7e1446d513e46e2877ec6a9..7876db1c20d317e28e4a84880197c6a690bf9ef6 100644 (file)
@@ -168,7 +168,7 @@ static int add(int argc, const char **argv)
                OPT_STRING_LIST('t', "track", &track, N_("branch"),
                                N_("branch(es) to track")),
                OPT_STRING('m', "master", &master, N_("branch"), N_("master branch")),
-               { OPTION_CALLBACK, 0, "mirror", &mirror, N_("push|fetch"),
+               { OPTION_CALLBACK, 0, "mirror", &mirror, "(push|fetch)",
                        N_("set up remote as a mirror to push to or fetch from"),
                        PARSE_OPT_OPTARG | PARSE_OPT_COMP_ARG, parse_mirror_opt },
                OPT_END()
index 724b4848508d67b3693edf458033e7e29a92b3d3..8e3c7490f70df79497ee064ab13c0164de11fe9e 100644 (file)
@@ -166,7 +166,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
                OPT_BOOL(0, "mirror", &send_mirror, N_("mirror all refs")),
                OPT_BOOL('f', "force", &force_update, N_("force updates")),
                { OPTION_CALLBACK,
-                 0, "signed", &push_cert, "yes|no|if-asked", N_("GPG sign the push"),
+                 0, "signed", &push_cert, "(yes|no|if-asked)", N_("GPG sign the push"),
                  PARSE_OPT_OPTARG, option_parse_push_signed },
                OPT_STRING_LIST(0, "push-option", &push_options,
                                N_("server-specific"),
index 2bcc70fdfe2608ccbbab02b6f593dd81781ada41..b56028ba9d9717407c959e0cf0c6597f49779ab1 100644 (file)
@@ -542,7 +542,7 @@ static void runcommand_in_submodule_cb(const struct cache_entry *list_item,
                argv_array_pushv(&cpr.args, info->argv);
 
                if (run_command(&cpr))
-                       die(_("run_command returned non-zero status while"
+                       die(_("run_command returned non-zero status while "
                                "recursing in the nested submodules of %s\n."),
                                displaypath);
        }
index a763dbdccb490ab6707c247d618203ffd37d4052..41e7714396dc3334bcb29f2454d210d63a649243 100644 (file)
@@ -27,6 +27,7 @@ static const char * const worktree_usage[] = {
 struct add_opts {
        int force;
        int detach;
+       int quiet;
        int checkout;
        int keep_locked;
 };
@@ -303,9 +304,13 @@ static int add_worktree(const char *path, const char *refname,
        if (!is_branch)
                argv_array_pushl(&cp.args, "update-ref", "HEAD",
                                 oid_to_hex(&commit->object.oid), NULL);
-       else
+       else {
                argv_array_pushl(&cp.args, "symbolic-ref", "HEAD",
                                 symref.buf, NULL);
+               if (opts->quiet)
+                       argv_array_push(&cp.args, "--quiet");
+       }
+
        cp.env = child_env.argv;
        ret = run_command(&cp);
        if (ret)
@@ -315,6 +320,8 @@ static int add_worktree(const char *path, const char *refname,
                cp.argv = NULL;
                argv_array_clear(&cp.args);
                argv_array_pushl(&cp.args, "reset", "--hard", NULL);
+               if (opts->quiet)
+                       argv_array_push(&cp.args, "--quiet");
                cp.env = child_env.argv;
                ret = run_command(&cp);
                if (ret)
@@ -437,6 +444,7 @@ static int add(int ac, const char **av, const char *prefix)
                OPT_BOOL(0, "detach", &opts.detach, N_("detach HEAD at named commit")),
                OPT_BOOL(0, "checkout", &opts.checkout, N_("populate the new working tree")),
                OPT_BOOL(0, "lock", &opts.keep_locked, N_("keep the new working tree locked")),
+               OPT__QUIET(&opts.quiet, N_("suppress progress reporting")),
                OPT_PASSTHRU(0, "track", &opt_track, NULL,
                             N_("set up tracking mode (see git-branch(1))"),
                             PARSE_OPT_NOARG | PARSE_OPT_OPTARG),
@@ -491,8 +499,8 @@ static int add(int ac, const char **av, const char *prefix)
                        }
                }
        }
-
-       print_preparing_worktree_line(opts.detach, branch, new_branch, !!new_branch_force);
+       if (!opts.quiet)
+               print_preparing_worktree_line(opts.detach, branch, new_branch, !!new_branch_force);
 
        if (new_branch) {
                struct child_process cp = CHILD_PROCESS_INIT;
@@ -500,6 +508,8 @@ static int add(int ac, const char **av, const char *prefix)
                argv_array_push(&cp.args, "branch");
                if (new_branch_force)
                        argv_array_push(&cp.args, "--force");
+               if (opts.quiet)
+                       argv_array_push(&cp.args, "--quiet");
                argv_array_push(&cp.args, new_branch);
                argv_array_push(&cp.args, branch);
                if (opt_track)
diff --git a/cache.h b/cache.h
index b1fd3d58ab20b6fd4460c6475c0eb0390c3ab9ac..4d014541ab7bc7692919c871a5306543bbf361c5 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1023,6 +1023,16 @@ extern const struct object_id null_oid;
 
 static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
 {
+       /*
+        * This is a temporary optimization hack. By asserting the size here,
+        * we let the compiler know that it's always going to be 20, which lets
+        * it turn this fixed-size memcmp into a few inline instructions.
+        *
+        * This will need to be extended or ripped out when we learn about
+        * hashes of different sizes.
+        */
+       if (the_hash_algo->rawsz != 20)
+               BUG("hash size not yet supported by hashcmp");
        return memcmp(sha1, sha2, the_hash_algo->rawsz);
 }
 
index 4b04c75b7f81a749c0d48674b8e2042abe5769eb..2a5bff4a1ca3de1dfca6cecb9d2016173f4fdea5 100755 (executable)
@@ -14,6 +14,7 @@ then
        export GIT_TEST_SPLIT_INDEX=yes
        export GIT_TEST_FULL_IN_PACK_ARRAY=true
        export GIT_TEST_OE_SIZE=10
+       export GIT_TEST_OE_DELTA_SIZE=5
        make --quiet test
 fi
 
index 30d1af2b20660de99bed06486c11d1aef3763849..1a6e632185346f518ed389f2d479c807a5f49927 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -656,7 +656,7 @@ struct commit *pop_commit(struct commit_list **stack)
 define_commit_slab(indegree_slab, int);
 
 /* record author-date for each commit object */
-define_commit_slab(author_date_slab, unsigned long);
+define_commit_slab(author_date_slab, timestamp_t);
 
 static void record_author_date(struct author_date_slab *author_date,
                               struct commit *commit)
index 9a0b10d4bc23fc0381ea61b492c1199e91ae5861..3461993f0af665d64b48d16915fc2cd017634377 100644 (file)
--- a/config.c
+++ b/config.c
@@ -124,7 +124,7 @@ static const char include_depth_advice[] = N_(
 "      %s\n"
 "from\n"
 "      %s\n"
-"Do you have circular includes?");
+"This might be due to circular includes.");
 static int handle_path_include(const char *path, struct config_include_data *inc)
 {
        int ret = 0;
index c4124acbe7802369ff64c12b48a513437c929a20..fa1e5475e87c746ec0d74f5b1606264d9a3a76dc 100755 (executable)
@@ -80,7 +80,7 @@ print_config_list () {
        cat <<EOF
 static const char *config_name_list[] = {
 EOF
-       grep '^[a-zA-Z].*\..*::$' Documentation/config.txt |
+       grep -h '^[a-zA-Z].*\..*::$' Documentation/*config.txt |
        sed '/deprecated/d; s/::$//; s/,  */\n/g' |
        sort |
        while read line
diff --git a/http.c b/http.c
index b4bfbceaeb7e58e79cac17f8768a7e36cff3405e..4162860ee316365091ac3978a83d2311682b8079 100644 (file)
--- a/http.c
+++ b/http.c
@@ -2418,9 +2418,7 @@ void release_http_object_request(struct http_object_request *freq)
                close(freq->localfile);
                freq->localfile = -1;
        }
-       if (freq->url != NULL) {
-               FREE_AND_NULL(freq->url);
-       }
+       FREE_AND_NULL(freq->url);
        if (freq->slot != NULL) {
                freq->slot->callback_func = NULL;
                freq->slot->callback_data = NULL;
index 92708522e76b4565882177f899612d72a3f6d75a..6ef87e5683aacdf738c86679712078988c0899fd 100644 (file)
@@ -146,6 +146,8 @@ void prepare_packing_data(struct packing_data *pdata)
 
        pdata->oe_size_limit = git_env_ulong("GIT_TEST_OE_SIZE",
                                             1U << OE_SIZE_BITS);
+       pdata->oe_delta_size_limit = git_env_ulong("GIT_TEST_OE_DELTA_SIZE",
+                                                  1UL << OE_DELTA_SIZE_BITS);
 }
 
 struct object_entry *packlist_alloc(struct packing_data *pdata,
@@ -160,6 +162,8 @@ struct object_entry *packlist_alloc(struct packing_data *pdata,
 
                if (!pdata->in_pack_by_idx)
                        REALLOC_ARRAY(pdata->in_pack, pdata->nr_alloc);
+               if (pdata->delta_size)
+                       REALLOC_ARRAY(pdata->delta_size, pdata->nr_alloc);
        }
 
        new_entry = pdata->objects + pdata->nr_objects++;
index 08c6b57d49791556f323ebf8654e98689a19593c..62806ccc39ea31b425089f4f38121d81a02fe5dd 100644 (file)
@@ -2,6 +2,7 @@
 #define PACK_OBJECTS_H
 
 #include "object-store.h"
+#include "thread-utils.h"
 #include "pack.h"
 
 #define DEFAULT_DELTA_CACHE_SIZE (256 * 1024 * 1024)
@@ -15,7 +16,7 @@
  * above this limit. Don't lower it too much.
  */
 #define OE_SIZE_BITS           31
-#define OE_DELTA_SIZE_BITS     20
+#define OE_DELTA_SIZE_BITS     23
 
 /*
  * State flags for depth-first search used for analyzing delta cycles.
@@ -95,11 +96,12 @@ struct object_entry {
                                     */
        unsigned delta_size_:OE_DELTA_SIZE_BITS; /* delta data size (uncompressed) */
        unsigned delta_size_valid:1;
+       unsigned char in_pack_header_size;
        unsigned in_pack_idx:OE_IN_PACK_BITS;   /* already in pack */
        unsigned z_delta_size:OE_Z_DELTA_BITS;
        unsigned type_valid:1;
-       unsigned type_:TYPE_BITS;
        unsigned no_try_delta:1;
+       unsigned type_:TYPE_BITS;
        unsigned in_pack_type:TYPE_BITS; /* could be delta */
        unsigned preferred_base:1; /*
                                    * we do not pack this, but is available
@@ -109,17 +111,16 @@ struct object_entry {
        unsigned tagged:1; /* near the very tip of refs */
        unsigned filled:1; /* assigned write-order */
        unsigned dfs_state:OE_DFS_STATE_BITS;
-       unsigned char in_pack_header_size;
        unsigned depth:OE_DEPTH_BITS;
 
        /*
         * pahole results on 64-bit linux (gcc and clang)
         *
-        *   size: 80, bit_padding: 20 bits, holes: 8 bits
+        *   size: 80, bit_padding: 9 bits
         *
         * and on 32-bit (gcc)
         *
-        *   size: 76, bit_padding: 20 bits, holes: 8 bits
+        *   size: 76, bit_padding: 9 bits
         */
 };
 
@@ -131,6 +132,7 @@ struct packing_data {
        uint32_t index_size;
 
        unsigned int *in_pack_pos;
+       unsigned long *delta_size;
 
        /*
         * Only one of these can be non-NULL and they have different
@@ -141,10 +143,29 @@ struct packing_data {
        struct packed_git **in_pack_by_idx;
        struct packed_git **in_pack;
 
+#ifndef NO_PTHREADS
+       pthread_mutex_t lock;
+#endif
+
        uintmax_t oe_size_limit;
+       uintmax_t oe_delta_size_limit;
 };
 
 void prepare_packing_data(struct packing_data *pdata);
+
+static inline void packing_data_lock(struct packing_data *pdata)
+{
+#ifndef NO_PTHREADS
+       pthread_mutex_lock(&pdata->lock);
+#endif
+}
+static inline void packing_data_unlock(struct packing_data *pdata)
+{
+#ifndef NO_PTHREADS
+       pthread_mutex_unlock(&pdata->lock);
+#endif
+}
+
 struct object_entry *packlist_alloc(struct packing_data *pdata,
                                    const unsigned char *sha1,
                                    uint32_t index_pos);
@@ -333,18 +354,34 @@ static inline unsigned long oe_delta_size(struct packing_data *pack,
 {
        if (e->delta_size_valid)
                return e->delta_size_;
-       return oe_size(pack, e);
+
+       /*
+        * pack->detla_size[] can't be NULL because oe_set_delta_size()
+        * must have been called when a new delta is saved with
+        * oe_set_delta().
+        * If oe_delta() returns NULL (i.e. default state, which means
+        * delta_size_valid is also false), then the caller must never
+        * call oe_delta_size().
+        */
+       return pack->delta_size[e - pack->objects];
 }
 
 static inline void oe_set_delta_size(struct packing_data *pack,
                                     struct object_entry *e,
                                     unsigned long size)
 {
-       e->delta_size_ = size;
-       e->delta_size_valid = e->delta_size_ == size;
-       if (!e->delta_size_valid && size != oe_size(pack, e))
-               BUG("this can only happen in check_object() "
-                   "where delta size is the same as entry size");
+       if (size < pack->oe_delta_size_limit) {
+               e->delta_size_ = size;
+               e->delta_size_valid = 1;
+       } else {
+               packing_data_lock(pack);
+               if (!pack->delta_size)
+                       ALLOC_ARRAY(pack->delta_size, pack->nr_alloc);
+               packing_data_unlock(pack);
+
+               pack->delta_size[e - pack->objects] = size;
+               e->delta_size_valid = 0;
+       }
 }
 
 #endif
index 65d371c7461c1f8098e0334532ae7804c30f66d6..84bf598c3e2be8d378a72174239a076cf1eeaf8a 100644 (file)
@@ -720,7 +720,7 @@ static const char *read_author_ident(struct strbuf *buf)
        /* dequote values and construct ident line in-place */
        for (in = buf->buf; i < 3 && in - buf->buf < buf->len; i++) {
                if (!skip_prefix(in, keys[i], (const char **)&in)) {
-                       warning(_("could not parse '%s' (looking for '%s'"),
+                       warning(_("could not parse '%s' (looking for '%s')"),
                                rebase_path_author_script(), keys[i]);
                        return NULL;
                }
index 8373a27fea38b1ec111e80d203bf61f1143b7861..9028b47d923ca027a146da82060dae395d3f7999 100644 (file)
--- a/t/README
+++ b/t/README
@@ -315,6 +315,10 @@ packs on demand. This normally only happens when the object size is
 over 2GB. This variable forces the code path on any object larger than
 <n> bytes.
 
+GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncomon pack-objects code
+path where deltas larger than this limit require extra memory
+allocation for bookkeeping.
+
 Naming Tests
 ------------
 
index e926c416ea48bc25412097944d454ebd922e624a..e954e8c5222f77e882f577198091adde95cf2532 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __TEST_TOOL_H__
 #define __TEST_TOOL_H__
 
+#include "git-compat-util.h"
+
 int cmd__chmtime(int argc, const char **argv);
 int cmd__config(int argc, const char **argv);
 int cmd__ctype(int argc, const char **argv);
index 25a77ee5cb04088297b7d9fd93d04d76e1494875..2ca9fb69d62083494869fff6420eec39834b2eb4 100644 (file)
@@ -14,8 +14,8 @@
 #       specified line.
 #
 #   "<cmd> <lineno>" -- add a line with the specified command
-#       ("squash", "fixup", "edit", "reword" or "drop") and the SHA1 taken
-#       from the specified line.
+#       ("pick", "squash", "fixup", "edit", "reword" or "drop") and the
+#       SHA1 taken from the specified line.
 #
 #   "exec_cmd_with_args" -- add an "exec cmd with args" line.
 #
@@ -47,7 +47,7 @@ set_fake_editor () {
        action=pick
        for line in $FAKE_LINES; do
                case $line in
-               squash|fixup|edit|reword|drop)
+               pick|squash|fixup|edit|reword|drop)
                        action="$line";;
                exec*)
                        echo "$line" | sed 's/_/ /g' >> "$1";;
index 34859fe4a59fdbb48273f4b9e4f16e878b421349..850f651e4e434084bbc8995fcfb3bb001d83875c 100755 (executable)
@@ -116,7 +116,7 @@ check_sub_test_lib_test () {
        name="$1" # stdin is the expected output from the test
        (
                cd "$name" &&
-               ! test -s err &&
+               test_must_be_empty err &&
                sed -e 's/^> //' -e 's/Z$//' >expect &&
                test_cmp expect out
        )
index ca85aae51ed1c528d1b93e7fea5f53ecb8095851..182da069f1743b8a06b65396599f94530080e67f 100755 (executable)
@@ -167,9 +167,8 @@ test_expect_success 'reinit' '
        ) &&
        test_i18ngrep "Initialized empty" again/out1 &&
        test_i18ngrep "Reinitialized existing" again/out2 &&
-       >again/empty &&
-       test_i18ncmp again/empty again/err1 &&
-       test_i18ncmp again/empty again/err2
+       test_must_be_empty again/err1 &&
+       test_must_be_empty again/err2
 '
 
 test_expect_success 'init with --template' '
index 5c37c2e1f8c3e96ae72dea1c7a5eef556fb18d00..22499bce5f50637e574961f744b567b974a4d3d0 100755 (executable)
@@ -208,9 +208,8 @@ test_expect_success 'attribute test: --all option' '
 '
 
 test_expect_success 'attribute test: --cached option' '
-       : >empty &&
        git check-attr --cached --stdin --all <stdin-all | sort >actual &&
-       test_cmp empty actual &&
+       test_must_be_empty actual &&
        git add .gitattributes a/.gitattributes a/b/.gitattributes &&
        git check-attr --cached --stdin --all <stdin-all | sort >actual &&
        test_cmp specified-all actual
index 5f056982a53b62810192fc8bbb5dbb6d784fb1a2..854da0ae16f8c437c239a0a4e16f1549d87521a2 100755 (executable)
@@ -160,7 +160,7 @@ test_expect_success 'checkout with autocrlf=input' '
        git config core.autocrlf input &&
        git read-tree --reset -u HEAD &&
        test_must_fail has_cr one &&
-       test_must_fail has_cr two &&
+       test_must_fail has_cr dir/two &&
        git update-index -- one dir/two &&
        test "$one" = $(git hash-object --stdin <one) &&
        test "$two" = $(git hash-object --stdin <dir/two) &&
index b77948c618ecdd3ac654500ae2143863eccf4f9f..5ce47e8af51d63c7bd294e6f7582f10e4891566d 100755 (executable)
@@ -320,22 +320,20 @@ test_expect_success \
 
 test_expect_success \
     'spaces with newline at end should be replaced with empty string' '
-    printf "" >expect &&
-
     echo | git stripspace >actual &&
-    test_cmp expect actual &&
+    test_must_be_empty actual &&
 
     echo "$sss" | git stripspace >actual &&
-    test_cmp expect actual &&
+    test_must_be_empty actual &&
 
     echo "$sss$sss" | git stripspace >actual &&
-    test_cmp expect actual &&
+    test_must_be_empty actual &&
 
     echo "$sss$sss$sss" | git stripspace >actual &&
-    test_cmp expect actual &&
+    test_must_be_empty actual &&
 
     echo "$sss$sss$sss$sss" | git stripspace >actual &&
-    test_cmp expect actual
+    test_must_be_empty actual
 '
 
 test_expect_success \
@@ -349,19 +347,17 @@ test_expect_success \
 
 test_expect_success \
     'spaces without newline at end should be replaced with empty string' '
-    printf "" >expect &&
-
     printf "" | git stripspace >actual &&
-    test_cmp expect actual &&
+    test_must_be_empty actual &&
 
     printf "$sss$sss" | git stripspace >actual &&
-    test_cmp expect actual &&
+    test_must_be_empty actual &&
 
     printf "$sss$sss$sss" | git stripspace >actual &&
-    test_cmp expect actual &&
+    test_must_be_empty actual &&
 
     printf "$sss$sss$sss$sss" | git stripspace >actual &&
-    test_cmp expect actual
+    test_must_be_empty actual
 '
 
 test_expect_success \
index 04d474c84fd69121c686f5ca5adc40ce081f0e9d..5b0560fa20e3459a3fa62753ebfafaa2afa276e1 100755 (executable)
@@ -286,11 +286,9 @@ test_expect_success 'OPT_CALLBACK() and OPT_BIT() work' '
        test_cmp expect output
 '
 
->expect
-
 test_expect_success 'OPT_CALLBACK() and callback errors work' '
        test_must_fail test-parse-options --no-length >output 2>output.err &&
-       test_i18ncmp expect output &&
+       test_must_be_empty output &&
        test_must_be_empty output.err
 '
 
index c887ed5b45e824d281343196c8781cbb6e85abed..3e131c5325e363fa6188456e3f5f3f47f762801e 100755 (executable)
@@ -11,7 +11,6 @@ cat >hello-script <<-EOF
        #!$SHELL_PATH
        cat hello-script
 EOF
->empty
 
 test_expect_success 'start_command reports ENOENT' '
        test-tool run-command start-command-ENOENT ./does-not-exist
@@ -23,7 +22,7 @@ test_expect_success 'run_command can run a command' '
        test-tool run-command run-command ./hello.sh >actual 2>err &&
 
        test_cmp hello-script actual &&
-       test_cmp empty err
+       test_must_be_empty err
 '
 
 test_expect_success !MINGW 'run_command can run a script without a #! line' '
@@ -34,7 +33,7 @@ test_expect_success !MINGW 'run_command can run a script without a #! line' '
        test-tool run-command run-command ./hello >actual 2>err &&
 
        test_cmp hello-script actual &&
-       test_cmp empty err
+       test_must_be_empty err
 '
 
 test_expect_success 'run_command does not try to execute a directory' '
@@ -47,7 +46,7 @@ test_expect_success 'run_command does not try to execute a directory' '
        PATH=$PWD/bin1:$PWD/bin2:$PATH \
                test-tool run-command run-command greet >actual 2>err &&
        test_cmp bin2/greet actual &&
-       test_cmp empty err
+       test_must_be_empty err
 '
 
 test_expect_success POSIXPERM 'run_command passes over non-executable file' '
@@ -64,7 +63,7 @@ test_expect_success POSIXPERM 'run_command passes over non-executable file' '
        PATH=$PWD/bin1:$PWD/bin2:$PATH \
                test-tool run-command run-command greet >actual 2>err &&
        test_cmp bin2/greet actual &&
-       test_cmp empty err
+       test_must_be_empty err
 '
 
 test_expect_success POSIXPERM 'run_command reports EACCES' '
index 28ea93f509c0a9a932897e45316be9f188ad4259..7de40141ca84dc53657d81c0254870b387339f79 100755 (executable)
@@ -239,7 +239,7 @@ test_expect_success 'no phantom error when switching trees' '
        >newdir/one &&
        git add newdir/one &&
        git checkout 2>errors &&
-       ! test -s errors
+       test_must_be_empty errors
 '
 
 test_expect_success 'switching trees does not invalidate shared index' '
index 71b0d74b4ddef584e3f8af711df6b5c5678034c5..0ce1f22eff66285ee0da9b1830de961555fbad2b 100755 (executable)
@@ -11,7 +11,7 @@ test_expect_success 'git show a ISO-8859-1 commit under C locale' '
        . "$TEST_DIRECTORY"/t3901/8859-1.txt &&
        test_commit "iso-c-commit" iso-under-c &&
        git show >out 2>err &&
-       ! test -s err &&
+       test_must_be_empty err &&
        grep -q "iso-c-commit" out
 '
 
@@ -19,7 +19,7 @@ test_expect_success GETTEXT_LOCALE 'git show a ISO-8859-1 commit under a UTF-8 l
        . "$TEST_DIRECTORY"/t3901/8859-1.txt &&
        test_commit "iso-utf8-commit" iso-under-utf8 &&
        LANGUAGE=is LC_ALL="$is_IS_locale" git show >out 2>err &&
-       ! test -s err &&
+       test_must_be_empty err &&
        grep -q "iso-utf8-commit" out
 '
 
index 4976e2fcd3fc8be5b39ff44f662dfc71c6cabdc9..cdf1fed5d1c33e659b5d2c9bfb64423b13f05e94 100755 (executable)
@@ -346,12 +346,9 @@ test_expect_success 'working --list' '
        git config --list > output &&
        test_cmp expect output
 '
-cat > expect << EOF
-EOF
-
 test_expect_success '--list without repo produces empty output' '
        git --git-dir=nonexistent config --list >output &&
-       test_cmp expect output
+       test_must_be_empty output
 '
 
 cat > expect << EOF
index 8293131001ee0e816406df858dc47bc2fb9be3ce..388b0611d8e4590f36d9aa44f11d4945a2ae7408 100755 (executable)
@@ -290,9 +290,8 @@ test_expect_success 'stale dirs do not cause d/f conflicts (reflogs off)' '
        # same as before, but we only create a reflog for "one" if
        # it already exists, which it does not
        git -c core.logallrefupdates=false branch one master &&
-       : >expect &&
        git log -g --format="%gd %gs" one >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 # Triggering the bug detected by this test requires a newline to fall
index 4d62ceef9c15cc981bada757bcf7cfa43f2dd9a5..985daf1def366fd1aa928bd2ddeeca454c4702ca 100755 (executable)
@@ -136,13 +136,12 @@ test_expect_success '--date magic does not override explicit @{0} syntax' '
        test_cmp expect actual
 '
 
-: >expect
 test_expect_success 'empty reflog file' '
        git branch empty &&
        git reflog expire --expire=all refs/heads/empty &&
 
        git log -g empty >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 # This guards against the alternative of showing the diffs vs. the
index 7b7602ddb453de7104ae3c64a08c96e74b465aa4..0f2dd26f74b4b2c19474ad563e7c34701838cb46 100755 (executable)
@@ -16,8 +16,7 @@ test_expect_success setup '
        git checkout HEAD^0 &&
        test_commit B fileB two &&
        git tag -d A B &&
-       git reflog expire --expire=now --all &&
-       >empty
+       git reflog expire --expire=now --all
 '
 
 test_expect_success 'loose objects borrowed from alternate are not missing' '
@@ -29,12 +28,12 @@ test_expect_success 'loose objects borrowed from alternate are not missing' '
                test_commit C fileC one &&
                git fsck --no-dangling >../actual 2>&1
        ) &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'HEAD is part of refs, valid objects appear valid' '
        git fsck >actual 2>&1 &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 # Corruption tests follow.  Make sure to remove all traces of the
@@ -346,12 +345,12 @@ test_expect_success 'tag with NUL in header' '
 
 test_expect_success 'cleaned up' '
        git fsck >actual 2>&1 &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'rev-list --verify-objects' '
        git rev-list --verify-objects --all >/dev/null 2>out &&
-       test_cmp empty out
+       test_must_be_empty out
 '
 
 test_expect_success 'rev-list --verify-objects with bad sha1' '
index afcdfafe45521872b0e2f1648da782c61d0cc1d5..3498d3d55e9e18d19c9a9accaa1637f338c1c4bc 100755 (executable)
@@ -41,7 +41,7 @@ test_expect_success 'setup: helper for testing rev-parse' '
                        # rev-parse --show-prefix should output
                        # a single newline when at the top of the work tree,
                        # but we test for that separately.
-                       test -z "$4" && ! test -s actual.prefix ||
+                       test -z "$4" && test_must_be_empty actual.prefix ||
                        test_cmp expected.prefix actual.prefix
                fi
        }
index 972bd9c7859f52ac043b0a45500590fe182d4b6a..9974457f5615c9c9204ebfaff6d42c621836fdec 100755 (executable)
@@ -234,14 +234,14 @@ test_expect_success '#0: nonbare repo, no explicit configuration' '
        try_repo 0 unset unset unset "" unset \
                .git "$here/0" "$here/0" "(null)" \
                .git "$here/0" "$here/0" sub/ 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#1: GIT_WORK_TREE without explicit GIT_DIR is accepted' '
        try_repo 1 "$here" unset unset "" unset \
                "$here/1/.git" "$here" "$here" 1/ \
                "$here/1/.git" "$here" "$here" 1/sub/ 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#2: worktree defaults to cwd with explicit GIT_DIR' '
@@ -268,7 +268,7 @@ test_expect_success '#4: core.worktree without GIT_DIR set is accepted' '
        try_case 4 unset unset \
                .git "$here/4/sub" "$here/4" "(null)" \
                "$here/4/.git" "$here/4/sub" "$here/4/sub" "(null)" 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#5: core.worktree + GIT_WORK_TREE is accepted' '
@@ -279,7 +279,7 @@ test_expect_success '#5: core.worktree + GIT_WORK_TREE is accepted' '
        try_repo 5a .. unset "$here/5a" "" unset \
                "$here/5a/.git" "$here" "$here" 5a/ \
                "$here/5a/.git" "$here/5a" "$here/5a" sub/ &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#6: setting GIT_DIR brings core.worktree to life' '
@@ -376,7 +376,7 @@ test_expect_success '#9: GIT_WORK_TREE accepted with gitfile' '
        try_repo 9 wt unset unset gitfile unset \
                "$here/9.git" "$here/9/wt" "$here/9" "(null)" \
                "$here/9.git" "$here/9/sub/wt" "$here/9/sub" "(null)" 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#10: GIT_DIR can point to gitfile' '
@@ -402,7 +402,7 @@ test_expect_success '#12: core.worktree with gitfile is accepted' '
        try_repo 12 unset unset "$here/12" gitfile unset \
                "$here/12.git" "$here/12" "$here/12" "(null)" \
                "$here/12.git" "$here/12" "$here/12" sub/ 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#13: core.worktree+GIT_WORK_TREE accepted (with gitfile)' '
@@ -410,7 +410,7 @@ test_expect_success '#13: core.worktree+GIT_WORK_TREE accepted (with gitfile)' '
        try_repo 13 non-existent-too unset non-existent gitfile unset \
                "$here/13.git" "$here/13/non-existent-too" "$here/13" "(null)" \
                "$here/13.git" "$here/13/sub/non-existent-too" "$here/13/sub" "(null)" 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 # case #14.
@@ -565,7 +565,7 @@ test_expect_success '#17: GIT_WORK_TREE without explicit GIT_DIR is accepted (ba
        try_repo 17c "$here/17c" unset unset "" true \
                .git "$here/17c" "$here/17c" "(null)" \
                "$here/17c/.git" "$here/17c" "$here/17c" sub/ 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#18: bare .git named by GIT_DIR has no worktree' '
@@ -594,7 +594,7 @@ test_expect_success '#20a: core.worktree without GIT_DIR accepted (inside .git)'
                "$here/20a/.git" "$here/20a" "$here/20a" .git/wt/ &&
        try_case 20a/.git/wt/sub unset unset \
                "$here/20a/.git" "$here/20a" "$here/20a" .git/wt/sub/ &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#20b/c: core.worktree and core.bare conflict' '
@@ -626,7 +626,7 @@ test_expect_success '#21: setup, core.worktree warns before overriding core.bare
                export GIT_WORK_TREE &&
                git status >/dev/null
        ) 2>message &&
-       ! test -s message
+       test_must_be_empty message
 
 '
 run_wt_tests 21
@@ -742,7 +742,7 @@ test_expect_success '#25: GIT_WORK_TREE accepted if GIT_DIR unset (bare gitfile
        try_repo 25 "$here/25" unset unset gitfile true \
                "$here/25.git" "$here/25" "$here/25" "(null)"  \
                "$here/25.git" "$here/25" "$here/25" "sub/" 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 
 test_expect_success '#26: bare repo has no worktree (GIT_DIR -> gitfile case)' '
@@ -780,7 +780,7 @@ test_expect_success '#29: setup' '
                export GIT_WORK_TREE &&
                git status
        ) 2>message &&
-       ! test -s message
+       test_must_be_empty message
 '
 run_wt_tests 29 gitfile
 
index c4422312f4e482e38172b1ac8b87e29d8708af2e..42962ed7d46f6dafa09c7b276942c32da130e300 100755 (executable)
@@ -41,8 +41,7 @@ test_expect_success 'no warning with bogus GIT_INDEX_VERSION and existing index'
                GIT_INDEX_VERSION=1 &&
                export GIT_INDEX_VERSION &&
                git add a 2>actual.err &&
-               >expect.err &&
-               test_i18ncmp expect.err actual.err
+               test_must_be_empty actual.err
        )
 '
 
index 39133bcbc85239183c3d73596f76f0486aeefcfe..b3b4d83eafc4a031618a3a89fd8ca50353f1a844 100755 (executable)
@@ -143,9 +143,7 @@ test_expect_success 'remove file not in base index' '
 test_expect_success 'remove file in base index' '
        git update-index --force-remove one &&
        git ls-files --stage >ls-files.actual &&
-       cat >ls-files.expect <<-EOF &&
-       EOF
-       test_cmp ls-files.expect ls-files.actual &&
+       test_must_be_empty ls-files.actual &&
 
        test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
        cat >expect <<-EOF &&
index 6ef15738e44ed8ad82960c042b3212fce266ec93..8f86b5f4b298f8297d68030f6ff1e51eb0311bf1 100755 (executable)
@@ -44,7 +44,7 @@ test_expect_success '"checkout <submodule>" honors diff.ignoreSubmodules' '
        git config diff.ignoreSubmodules dirty &&
        echo x> submodule/untracked &&
        git checkout HEAD >actual 2>&1 &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .gitmodules' '
@@ -52,7 +52,7 @@ test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .gitm
        git config -f .gitmodules submodule.submodule.path submodule &&
        git config -f .gitmodules submodule.submodule.ignore untracked &&
        git checkout HEAD >actual 2>&1 &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .git/config' '
@@ -60,7 +60,7 @@ test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .git/
        git config submodule.submodule.path submodule &&
        git config submodule.submodule.ignore all &&
        git checkout HEAD >actual 2>&1 &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1
index 166942c1bd2943b778b7df66e21d2e84861ef958..07d292317cdfcbca784a19c6c8f130d09c98fe98 100755 (executable)
@@ -252,6 +252,11 @@ test_expect_success 'add -B' '
        test_cmp_rev master^ poodle
 '
 
+test_expect_success 'add --quiet' '
+       git worktree add --quiet another-worktree master 2>actual &&
+       test_must_be_empty actual
+'
+
 test_expect_success 'local clone from linked checkout' '
        git clone --local here here-clone &&
        ( cd here-clone && git fsck )
index 314c73c5a708fda8f39e7a86bf3db0329191d7a7..f764b7e3f53e95e11acd4c2bdaafb737979d45e2 100755 (executable)
@@ -88,9 +88,8 @@ test_expect_success 'non-qualified update in subdir updates from the root' '
                echo even more >>sub2 &&
                git add -u
        ) &&
-       : >expect &&
        git diff-files --name-only >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'replace a file with a symlink' '
index e7a400b4c77a822a49365e4049fbe68b059d23ee..68e54d5c4420092e481ae1324d419f5e5ec0c8ab 100755 (executable)
@@ -195,8 +195,7 @@ test_expect_success 'rename detection finds the right names' '
                test_cmp expected.4 actual.4 &&
 
                git diff --cached --stat >actual.5 &&
-               : >expected.5 &&
-               test_cmp expected.5 actual.5
+               test_must_be_empty actual.5
 
        )
 '
@@ -241,8 +240,7 @@ test_expect_success 'diff-files/diff-cached shows ita as new/not-new files' '
        echo " create mode 100644 new-ita" >expected &&
        test_cmp expected actual &&
        git diff --cached --summary >actual2 &&
-       : >expected2 &&
-       test_cmp expected2 actual2
+       test_must_be_empty actual2
 '
 
 
index 8340ac2f073446963f7f5dab39ac87771264da54..2e07365bbb055d27f558c78d26f657e314397398 100755 (executable)
@@ -31,7 +31,7 @@ do
                rm -f .git/index &&
                test_must_fail git add "$i" 2>err &&
                git ls-files "$i" >out &&
-               ! test -s out
+               test_must_be_empty out
        '
 
        test_expect_success "complaints for ignored $i output" '
@@ -42,7 +42,7 @@ do
                rm -f .git/index &&
                test_must_fail git add "$i" file 2>err &&
                git ls-files "$i" >out &&
-               ! test -s out
+               test_must_be_empty out
        '
        test_expect_success "complaints for ignored $i with unignored file output" '
                test_i18ngrep -e "Use -f if" err
@@ -57,7 +57,7 @@ do
                        cd dir &&
                        test_must_fail git add "$i" 2>err &&
                        git ls-files "$i" >out &&
-                       ! test -s out
+                       test_must_be_empty out
                )
        '
 
@@ -77,7 +77,7 @@ do
                        cd sub &&
                        test_must_fail git add "$i" 2>err &&
                        git ls-files "$i" >out &&
-                       ! test -s out
+                       test_must_be_empty out
                )
        '
 
index 3b47647ed56aa88b35227ef295e6a3432e5ab8f1..1ec7cb57c7a81ff9258143e7c8d4a81dc96ff8dc 100755 (executable)
@@ -277,9 +277,8 @@ test_expect_success 'hide empty ignored sub-directory with --no-empty-directory'
 '
 
 test_expect_success 'pattern matches prefix completely' '
-       : >expect &&
        git ls-files -i -o --exclude "/three/a.3[abc]" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'ls-files with "**" patterns' '
@@ -295,9 +294,8 @@ EOF
 
 
 test_expect_success 'ls-files with "**" patterns and no slashes' '
-       : >expect &&
        git ls-files -o -i --exclude "one**a.1" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_done
index 9c7adbdbe1cd7bf03e9b8f10a75f0acb4f37a5b2..9fd5a1f188aae0507c335de65a742977c6976d69 100755 (executable)
@@ -8,16 +8,14 @@ command-line arguments.
 
 . ./test-lib.sh
 
->empty
-
 test_expect_success 'ls-files in empty repository' '
        git ls-files >actual &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'ls-files with nonexistent path' '
        git ls-files doesnotexist >actual &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'ls-files with nonsense option' '
index 0c0b433bd3dddc4211fb4b31d3e8fab31ee5e430..c4b4a94324a2e6c60ade51db7f7a9c1922920395 100755 (executable)
@@ -17,7 +17,6 @@ test_commit_this () {
 }
 
 test_expect_success 'setup' '
-       : >empty &&
        test_file checked-out init &&
        test_file modify_delete modify_delete_init &&
        test_commit_this init &&
@@ -38,7 +37,7 @@ test_expect_success 'reset --hard works after the conflict' '
 
 test_expect_success 'is reset properly' '
        git status --porcelain -- modify_delete >out &&
-       test_cmp empty out &&
+       test_must_be_empty out &&
        test_path_is_missing modify_delete
 '
 
@@ -52,7 +51,7 @@ test_expect_success 'Merge abort works after the conflict' '
 
 test_expect_success 'is aborted properly' '
        git status --porcelain -- modify_delete >out &&
-       test_cmp empty out &&
+       test_must_be_empty out &&
        test_path_is_missing modify_delete
 '
 
index dbca665da41908e7e3014564dc8ddb901030715b..93f21ab078080d00100cd63f6b5ee5cdfd636d29 100755 (executable)
@@ -1305,4 +1305,50 @@ test_expect_success 'tracking with unexpected .fetch refspec' '
        )
 '
 
+test_expect_success 'configured committerdate sort' '
+       git init sort &&
+       (
+               cd sort &&
+               git config branch.sort committerdate &&
+               test_commit initial &&
+               git checkout -b a &&
+               test_commit a &&
+               git checkout -b c &&
+               test_commit c &&
+               git checkout -b b &&
+               test_commit b &&
+               git branch >actual &&
+               cat >expect <<-\EOF &&
+                 master
+                 a
+                 c
+               * b
+               EOF
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'option override configured sort' '
+       (
+               cd sort &&
+               git config branch.sort committerdate &&
+               git branch --sort=refname >actual &&
+               cat >expect <<-\EOF &&
+                 a
+               * b
+                 c
+                 master
+               EOF
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'invalid sort parameter in configuration' '
+       (
+               cd sort &&
+               git config branch.sort "v:notvalid" &&
+               test_must_fail git branch
+       )
+'
+
 test_done
index 7333d7d5459179ab306d29fc04e7d088d75412af..9ea5fa4fd246374d6c49dfc35c12cfdbd84957c2 100755 (executable)
@@ -127,7 +127,7 @@ test_expect_success 'explicit pack-refs with dangling packed reference' '
        git reflog expire --expire=all --all &&
        git prune --expire=all &&
        git pack-refs --all 2>result &&
-       test_cmp /dev/null result
+       test_must_be_empty result
 '
 
 test_expect_success 'delete ref with dangling packed version' '
@@ -139,7 +139,7 @@ test_expect_success 'delete ref with dangling packed version' '
        git reflog expire --expire=all --all &&
        git prune --expire=all &&
        git branch -d lamb 2>result &&
-       test_cmp /dev/null result
+       test_must_be_empty result
 '
 
 test_expect_success 'delete ref while another dangling packed ref' '
@@ -150,7 +150,7 @@ test_expect_success 'delete ref while another dangling packed ref' '
        git reflog expire --expire=all --all &&
        git prune --expire=all &&
        git branch -d lamb 2>result &&
-       test_cmp /dev/null result
+       test_must_be_empty result
 '
 
 test_expect_success 'pack ref directly below refs/' '
index ac62dc0e8fdc4602fb006919f0c0b62a015964bd..84bbf88cf9d0cf8e2887abc6ef3a4c597ba4aa3a 100755 (executable)
@@ -481,10 +481,8 @@ test_expect_success 'list specific note with "git notes list <object>"' '
 '
 
 test_expect_success 'listing non-existing notes fails' '
-       cat >expect <<-EOF &&
-       EOF
        test_must_fail git notes list HEAD >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'append to existing note with "git notes append"' '
index ab946a5153c041de92bde52aed4d47c2a0d80b21..d60588ec8f0038e43d6327537240512afc832c4c 100755 (executable)
@@ -183,7 +183,7 @@ test_expect_success 'merge empty notes ref (z => y)' '
        git notes add -m "foo" &&
        git notes remove &&
        git notes >output_notes_z &&
-       test_cmp /dev/null output_notes_z &&
+       test_must_be_empty output_notes_z &&
        # Do the merge (z => y)
        git config core.notesRef refs/notes/y &&
        git notes merge z &&
index 68436eed82101cdfcc7f93fea0681083b546cf2a..2dea846e259dbb8cd163b82f6e551c9823cbd180 100755 (executable)
@@ -337,7 +337,7 @@ EOF
        git notes merge --commit &&
        # No .git/NOTES_MERGE_* files left
        test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
-       test_cmp /dev/null output &&
+       test_must_be_empty output &&
        # Merge commit has pre-merge y and pre-merge z as parents
        test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" &&
        test "$(git rev-parse refs/notes/m^2)" = "$(cat pre_merge_z)" &&
@@ -399,7 +399,7 @@ test_expect_success 'abort notes merge' '
        git notes merge --abort &&
        # No .git/NOTES_MERGE_* files left
        test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
-       test_cmp /dev/null output &&
+       test_must_be_empty output &&
        # m has not moved (still == y)
        test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)" &&
        # Verify that other notes refs has not changed (w, x, y and z)
@@ -466,7 +466,7 @@ EOF
        git notes merge --commit &&
        # No .git/NOTES_MERGE_* files left
        test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
-       test_cmp /dev/null output &&
+       test_must_be_empty output &&
        # Merge commit has pre-merge y and pre-merge z as parents
        test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" &&
        test "$(git rev-parse refs/notes/m^2)" = "$(cat pre_merge_z)" &&
@@ -555,7 +555,7 @@ test_expect_success 'resolve situation by aborting the notes merge' '
        git notes merge --abort &&
        # No .git/NOTES_MERGE_* files left
        test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
-       test_cmp /dev/null output &&
+       test_must_be_empty output &&
        # m has not moved (still == w)
        test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)" &&
        # Verify that other notes refs has not changed (w, x, y and z)
index 4c7b1ea3563274c7c3551e417c819b70200e90e9..259c27233dff0e47e2e0d7ddd48ac8dc6742925b 100755 (executable)
@@ -796,16 +796,15 @@ test_expect_success 'always cherry-pick with --no-ff' '
        git tag original-no-ff-branch &&
        set_fake_editor &&
        git rebase -i --no-ff A &&
-       touch empty &&
        for p in 0 1 2
        do
                test ! $(git rev-parse HEAD~$p) = $(git rev-parse original-no-ff-branch~$p) &&
                git diff HEAD~$p original-no-ff-branch~$p > out &&
-               test_cmp empty out
+               test_must_be_empty out
        done &&
        test $(git rev-parse HEAD~3) = $(git rev-parse original-no-ff-branch~3) &&
        git diff HEAD~3 original-no-ff-branch~3 > out &&
-       test_cmp empty out
+       test_must_be_empty out
 '
 
 test_expect_success 'set up commits with funny messages' '
index e24370066012fcb441aa0c59ff9c0c34e1d37e9c..0c4eefec760efaa238c1718ac7353e14a6e95344 100755 (executable)
@@ -202,7 +202,7 @@ testrebase () {
                echo dirty >>file3 &&
                test_must_fail git rebase$type related-onto-branch &&
                test_path_is_file $dotest/autostash &&
-               ! grep dirty file3 &&
+               test_path_is_missing file3 &&
                rm -rf $dotest &&
                git reset --hard &&
                git checkout feature-branch
@@ -216,7 +216,7 @@ testrebase () {
                echo dirty >>file3 &&
                test_must_fail git rebase$type related-onto-branch &&
                test_path_is_file $dotest/autostash &&
-               ! grep dirty file3 &&
+               test_path_is_missing file3 &&
                echo "conflicting-plus-goodbye" >file2 &&
                git add file2 &&
                git rebase --continue &&
@@ -233,7 +233,7 @@ testrebase () {
                echo dirty >>file3 &&
                test_must_fail git rebase$type related-onto-branch &&
                test_path_is_file $dotest/autostash &&
-               ! grep dirty file3 &&
+               test_path_is_missing file3 &&
                git rebase --skip &&
                test_path_is_missing $dotest/autostash &&
                grep dirty file3 &&
@@ -248,7 +248,7 @@ testrebase () {
                echo dirty >>file3 &&
                test_must_fail git rebase$type related-onto-branch &&
                test_path_is_file $dotest/autostash &&
-               ! grep dirty file3 &&
+               test_path_is_missing file3 &&
                git rebase --abort &&
                test_path_is_missing $dotest/autostash &&
                grep dirty file3 &&
index 5829dfd12cfdcbfe3061b7dcc7a91cd9799f4687..04e5d42bd3b82a7bf683659f6fdd8e20813df770 100755 (executable)
@@ -380,7 +380,7 @@ test_expect_success 'rm does not complain when no .gitmodules file is found' '
        git submodule update &&
        git rm .gitmodules &&
        git rm submod >actual 2>actual.err &&
-       ! test -s actual.err &&
+       test_must_be_empty actual.err &&
        ! test -d submod &&
        ! test -f submod/.git &&
        git status -s -uno >actual &&
@@ -398,7 +398,7 @@ test_expect_success 'rm will error out on a modified .gitmodules file unless sta
        git diff-files --quiet -- submod &&
        git add .gitmodules &&
        git rm submod >actual 2>actual.err &&
-       ! test -s actual.err &&
+       test_must_be_empty actual.err &&
        ! test -d submod &&
        ! test -f submod/.git &&
        git status -s -uno >actual &&
@@ -692,7 +692,7 @@ test_expect_success 'checking out a commit after submodule removal needs manual
        test_cmp expected actual &&
        rm -rf submod &&
        git status -s -uno --ignore-submodules=none >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'rm of d/f when d has become a non-directory' '
index 1f871d3cca9aba4dcb32b5197b9b3d296fc5c1fa..6450bc669860f0f3e7d809514fc073013ffbf0b8 100755 (executable)
@@ -724,7 +724,7 @@ test_expect_success 'store updates stash ref and reflog' '
        git add bazzy &&
        STASH_ID=$(git stash create) &&
        git reset --hard &&
-       ! grep quux bazzy &&
+       test_path_is_missing bazzy &&
        git stash store -m quuxery $STASH_ID &&
        test $(git rev-parse stash) = $STASH_ID &&
        git reflog --format=%H stash| grep $STASH_ID &&
index 108c012a3a66d900cbbfcda04ac2dfe5ffeb6362..5ae19b987d65d081b78c10f5eefd8aaf930c97a8 100755 (executable)
@@ -126,7 +126,7 @@ test_expect_success SYMLINKS 'diff symlinks with non-existing targets' '
        ln -s take\ over brain &&
        test_must_fail git diff --no-index pinky brain >output 2>output.err &&
        grep narf output &&
-       ! test -s output.err
+       test_must_be_empty output.err
 '
 
 test_expect_success SYMLINKS 'setup symlinks with attributes' '
index 35fc8b5c2aa559a40000588f9a1e2b86215cb6ef..a9fb226c5ad566095163c5141a4ca591f2aeacb1 100755 (executable)
@@ -776,8 +776,6 @@ test_expect_success 'checkdiff allows new blank lines' '
        git diff --check
 '
 
-cat <<EOF >expect
-EOF
 test_expect_success 'whitespace-only changes not reported' '
        git reset --hard &&
        echo >x "hello world" &&
@@ -785,7 +783,7 @@ test_expect_success 'whitespace-only changes not reported' '
        git commit -m "hello 1" &&
        echo >x "hello  world" &&
        git diff -b >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 cat <<EOF >expect
index a5019759bc7593cf8affd8625f61bbd7ab1b9655..c6135c75488ff01797a98e43163e0b0c5e6be169 100755 (executable)
@@ -260,7 +260,7 @@ test_expect_success 'trailing empty lines (2)' '
 
        echo "F -whitespace" >.gitattributes &&
        git diff --check >output &&
-       ! test -s output
+       test_must_be_empty output
 
 '
 
index 6304130ad4737bfac1e2cf06fd8c600bb7b42f76..9aa8e2b39b45a6c2b5ec48a9d98b94831edb2caa 100755 (executable)
@@ -104,19 +104,19 @@ test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)'
        expect_from_to >expect.body $subprev $subprev-dirty &&
        test_cmp expect.body actual.body &&
        git diff --ignore-submodules HEAD >actual2 &&
-       ! test -s actual2 &&
+       test_must_be_empty actual2 &&
        git diff --ignore-submodules=untracked HEAD >actual3 &&
        sed -e "1,/^@@/d" actual3 >actual3.body &&
        expect_from_to >expect.body $subprev $subprev-dirty &&
        test_cmp expect.body actual3.body &&
        git diff --ignore-submodules=dirty HEAD >actual4 &&
-       ! test -s actual4
+       test_must_be_empty actual4
 '
 
 test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]' '
        git config diff.ignoreSubmodules dirty &&
        git diff HEAD >actual &&
-       ! test -s actual &&
+       test_must_be_empty actual &&
        git config --add -f .gitmodules submodule.subname.ignore none &&
        git config --add -f .gitmodules submodule.subname.path sub &&
        git diff HEAD >actual &&
@@ -126,7 +126,7 @@ test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)
        git config -f .gitmodules submodule.subname.ignore all &&
        git config -f .gitmodules submodule.subname.path sub &&
        git diff HEAD >actual2 &&
-       ! test -s actual2 &&
+       test_must_be_empty actual2 &&
        git config -f .gitmodules submodule.subname.ignore untracked &&
        git diff HEAD >actual3 &&
        sed -e "1,/^@@/d" actual3 >actual3.body &&
@@ -134,7 +134,7 @@ test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)
        test_cmp expect.body actual3.body &&
        git config -f .gitmodules submodule.subname.ignore dirty &&
        git diff HEAD >actual4 &&
-       ! test -s actual4 &&
+       test_must_be_empty actual4 &&
        git config submodule.subname.ignore none &&
        git config submodule.subname.path sub &&
        git diff HEAD >actual &&
@@ -172,24 +172,24 @@ test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)'
        expect_from_to >expect.body $subprev $subprev-dirty &&
        test_cmp expect.body actual.body &&
        git diff --ignore-submodules=all HEAD >actual2 &&
-       ! test -s actual2 &&
+       test_must_be_empty actual2 &&
        git diff --ignore-submodules=untracked HEAD >actual3 &&
-       ! test -s actual3 &&
+       test_must_be_empty actual3 &&
        git diff --ignore-submodules=dirty HEAD >actual4 &&
-       ! test -s actual4
+       test_must_be_empty actual4
 '
 
 test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]' '
        git config --add -f .gitmodules submodule.subname.ignore all &&
        git config --add -f .gitmodules submodule.subname.path sub &&
        git diff HEAD >actual2 &&
-       ! test -s actual2 &&
+       test_must_be_empty actual2 &&
        git config -f .gitmodules submodule.subname.ignore untracked &&
        git diff HEAD >actual3 &&
-       ! test -s actual3 &&
+       test_must_be_empty actual3 &&
        git config -f .gitmodules submodule.subname.ignore dirty &&
        git diff HEAD >actual4 &&
-       ! test -s actual4 &&
+       test_must_be_empty actual4 &&
        git config submodule.subname.ignore none &&
        git config submodule.subname.path sub &&
        git diff HEAD >actual &&
@@ -211,7 +211,7 @@ test_expect_success 'git diff between submodule commits' '
        expect_from_to >expect.body $subtip $subprev &&
        test_cmp expect.body actual.body &&
        git diff --ignore-submodules HEAD^..HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'git diff between submodule commits [.gitmodules]' '
@@ -227,7 +227,7 @@ test_expect_success 'git diff between submodule commits [.gitmodules]' '
        test_cmp expect.body actual.body &&
        git config -f .gitmodules submodule.subname.ignore all &&
        git diff HEAD^..HEAD >actual &&
-       ! test -s actual &&
+       test_must_be_empty actual &&
        git config submodule.subname.ignore dirty &&
        git config submodule.subname.path sub &&
        git diff  HEAD^..HEAD >actual &&
@@ -239,10 +239,9 @@ test_expect_success 'git diff between submodule commits [.gitmodules]' '
 '
 
 test_expect_success 'git diff (empty submodule dir)' '
-       : >empty &&
        rm -rf sub/* sub/.git &&
        git diff > actual.empty &&
-       test_cmp empty actual.empty
+       test_must_be_empty actual.empty
 '
 
 test_expect_success 'conflicted submodule setup' '
index 4e3499ef84c1bc3bb26857d70bf7f5ba78d5bf9a..619bf970983e481af1537eb539d66bdd6b12971f 100755 (executable)
@@ -257,9 +257,7 @@ test_expect_success 'typechanged submodule(blob->submodule)' '
 commit_file sm1 &&
 test_expect_success 'submodule is up to date' '
        git diff-index -p --submodule=log HEAD >actual &&
-       cat >expected <<-EOF &&
-       EOF
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked content' '
@@ -273,17 +271,17 @@ test_expect_success 'submodule contains untracked content' '
 
 test_expect_success 'submodule contains untracked content (untracked ignored)' '
        git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked content (dirty ignored)' '
        git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked content (all ignored)' '
        git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked and modifed content' '
@@ -308,13 +306,13 @@ test_expect_success 'submodule contains untracked and modifed content (untracked
 test_expect_success 'submodule contains untracked and modifed content (dirty ignored)' '
        echo new > sm1/foo6 &&
        git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked and modifed content (all ignored)' '
        echo new > sm1/foo6 &&
        git diff-index -p --ignore-submodules --submodule=log HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains modifed content' '
@@ -368,7 +366,7 @@ test_expect_success 'modified submodule contains untracked content (dirty ignore
 
 test_expect_success 'modified submodule contains untracked content (all ignored)' '
        git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'modified submodule contains untracked and modifed content' '
@@ -407,7 +405,7 @@ test_expect_success 'modified submodule contains untracked and modifed content (
 test_expect_success 'modified submodule contains untracked and modifed content (all ignored)' '
        echo modification >> sm1/foo6 &&
        git diff-index -p --ignore-submodules --submodule=log HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'modified submodule contains modifed content' '
index 447a8ffa3a111dcc6ddec8b6081097f4127d2e59..7fec2cb9cd783f5aeff27236c8e54ddb2241e1be 100755 (executable)
@@ -940,7 +940,7 @@ test_expect_success 'diff.dirstat=0,lines' '
 test_expect_success '--dirstat=future_param,lines,0 should fail loudly' '
        test_must_fail git diff --dirstat=future_param,lines,0 HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
        test_debug "cat actual_error" &&
-       test_cmp /dev/null actual_diff_dirstat &&
+       test_must_be_empty actual_diff_dirstat &&
        test_i18ngrep -q "future_param" actual_error &&
        test_i18ngrep -q "\--dirstat" actual_error
 '
@@ -948,7 +948,7 @@ test_expect_success '--dirstat=future_param,lines,0 should fail loudly' '
 test_expect_success '--dirstat=dummy1,cumulative,2dummy should report both unrecognized parameters' '
        test_must_fail git diff --dirstat=dummy1,cumulative,2dummy HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
        test_debug "cat actual_error" &&
-       test_cmp /dev/null actual_diff_dirstat &&
+       test_must_be_empty actual_diff_dirstat &&
        test_i18ngrep -q "dummy1" actual_error &&
        test_i18ngrep -q "2dummy" actual_error &&
        test_i18ngrep -q "\--dirstat" actual_error
index 2d76a971c43f6850a1f443eab3e91bf3762fe952..4838a1df8b4369dc5024cdd7929d851b76482805 100755 (executable)
@@ -174,7 +174,7 @@ test_expect_success ' context does not include other functions' '
 '
 
 test_expect_success ' context does not include preceding empty lines' '
-       test "$(first_context_line <long_common_tail.diff.diff)" != " "
+       test "$(first_context_line <long_common_tail.diff)" != " "
 '
 
 check_diff changed_hello_appended 'changed function plus appended function'
index 0eba4620f039aaa529afa2cf3fbcff2559857b9e..9dcb69df5c3684b02b09278ecd64b19f5473ef0b 100755 (executable)
@@ -392,9 +392,7 @@ test_expect_success 'typechanged submodule(blob->submodule)' '
 commit_file sm1 &&
 test_expect_success 'submodule is up to date' '
        git diff-index -p --submodule=diff HEAD >actual &&
-       cat >expected <<-EOF &&
-       EOF
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked content' '
@@ -408,17 +406,17 @@ test_expect_success 'submodule contains untracked content' '
 
 test_expect_success 'submodule contains untracked content (untracked ignored)' '
        git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked content (dirty ignored)' '
        git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked content (all ignored)' '
        git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked and modified content' '
@@ -458,13 +456,13 @@ test_expect_success 'submodule contains untracked and modified content (untracke
 test_expect_success 'submodule contains untracked and modified content (dirty ignored)' '
        echo new > sm1/foo6 &&
        git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains untracked and modified content (all ignored)' '
        echo new > sm1/foo6 &&
        git diff-index -p --ignore-submodules --submodule=diff HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'submodule contains modified content' '
@@ -549,7 +547,7 @@ test_expect_success 'modified submodule contains untracked content (dirty ignore
 
 test_expect_success 'modified submodule contains untracked content (all ignored)' '
        git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'modified submodule contains untracked and modified content' '
@@ -609,7 +607,7 @@ test_expect_success 'modified submodule contains untracked and modified content
 test_expect_success 'modified submodule contains untracked and modified content (all ignored)' '
        echo modification >> sm1/foo6 &&
        git diff-index -p --ignore-submodules --submodule=diff HEAD >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 # NOT OK
index ce8567f496438c18501f30632269ecbe7de15fd3..b99e65c086391276aeb809b8651507026509e19a 100755 (executable)
@@ -42,7 +42,7 @@ test_expect_success 'apply in reverse' '
        git reset --hard second &&
        git apply --reverse --binary --index patch &&
        git diff >diff &&
-       test_cmp /dev/null diff
+       test_must_be_empty diff
 
 '
 
index 4fc27c51f7322ccb49a58d369185e64278ea246b..7e32237a2ae9a21e370d501caa8adfe561c6bc6b 100755 (executable)
@@ -100,7 +100,7 @@ test_expect_success 'whitespace=warn, default rule' '
 test_expect_success 'whitespace=error-all, default rule' '
 
        test_must_fail apply_patch --whitespace=error-all &&
-       ! test -s target
+       test_must_be_empty target
 
 '
 
index a2bc1cd37d852a9cab79c946bf88ee9dc958b460..fec1d6fa51faec22da97eb62165c588e2ba9f655 100755 (executable)
@@ -49,8 +49,7 @@ test_expect_success setup '
        sed -e "s/TS0/$timeGMT/" -e "s/TS1/$epocGMT/" <d >removeGMT.patch &&
        sed -e "s/TS0/$timeWest/" -e "s/TS1/$epocWest2/" <d >removeWest2.patch &&
 
-       echo something >something &&
-       >empty
+       echo something >something
 '
 
 for patch in *.patch
@@ -81,7 +80,7 @@ do
                        git add file &&
                        git apply --index $patch &&
                        test -f file &&
-                       test_cmp empty file
+                       test_must_be_empty file
                        ;;
                remove*)
                        # must remove the file
index 01867a989885e1272e998df54375b74438a8059e..55b577d919b5d82dd8c8bc81a6a4bc657b190f41 100755 (executable)
@@ -652,7 +652,7 @@ test_expect_success 'am -3 -q is quiet' '
        git checkout -f lorem2 &&
        git reset base3way --hard &&
        git am -3 -q lorem-move.patch >output.out 2>&1 &&
-       ! test -s output.out
+       test_must_be_empty output.out
 '
 
 test_expect_success 'am pauses on conflict' '
@@ -875,7 +875,7 @@ test_expect_success 'am -q is quiet' '
        git checkout first &&
        test_tick &&
        git am -q <patch1 >output.out 2>&1 &&
-       ! test -s output.out
+       test_must_be_empty output.out
 '
 
 test_expect_success 'am empty-file does not infloop' '
index 58c27736762dde372408a4dacfb030f0e1a55b99..d3a7ce6bbb2ca926d200f099d25d26570a3c1ce6 100755 (executable)
@@ -192,7 +192,7 @@ test_expect_success 'shortlog with revision pseudo options' '
 
 test_expect_success 'shortlog with --output=<file>' '
        git shortlog --output=shortlog -1 master >output &&
-       test ! -s output &&
+       test_must_be_empty output &&
        test_line_count = 3 shortlog
 '
 
index 0dd8b65d7cdec2ada739d7e0b524fd3c66dd5ef4..43b1522ea21a9c531c64fdba3b6f3bcde680063a 100755 (executable)
@@ -461,11 +461,9 @@ test_expect_success 'Grep author with log.mailmap' '
        test_cmp expect actual
 '
 
->expect
-
 test_expect_success 'Only grep replaced author with --use-mailmap' '
        git log --use-mailmap --author "<cto@coompany.xx>" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 # git blame
index 436b13ad21d06351ef9f9a027689a7e23ca97ba5..ef1322148e1413e4b90f46b6bea4f2d9b0300189 100755 (executable)
@@ -101,7 +101,7 @@ test_expect_success '-L with --first-parent and a merge' '
 test_expect_success '-L with --output' '
        git checkout parallel-change &&
        git log --output=log -L :main:b.c >output &&
-       test ! -s output &&
+       test_must_be_empty output &&
        test_line_count = 70 log
 '
 
index 22aa8b7c0e08d680233ffbcfa9a16d0f57c340d1..03b952c90d2fca011038e38075344530b5d64477 100755 (executable)
@@ -26,22 +26,20 @@ test_expect_success 'git log with broken author email' '
                echo
                echo "    foo"
        } >expect.out &&
-       : >expect.err &&
 
        git log broken_email >actual.out 2>actual.err &&
 
        test_cmp expect.out actual.out &&
-       test_cmp expect.err actual.err
+       test_must_be_empty actual.err
 '
 
 test_expect_success 'git log --format with broken author email' '
        echo "A U Thor+author@example.com+Thu Apr 7 15:13:13 2005 -0700" >expect.out &&
-       : >expect.err &&
 
        git log --format="%an+%ae+%ad" broken_email >actual.out 2>actual.err &&
 
        test_cmp expect.out actual.out &&
-       test_cmp expect.err actual.err
+       test_must_be_empty actual.err
 '
 
 munge_author_date () {
index 9015e476541dafdd6a82efcd4ace6038461d8522..d87cc7d9efde9d728825ae84b4a329b720b6d821 100755 (executable)
@@ -25,25 +25,19 @@ EXPECTED
 '
 
 test_expect_success 'file add !A, B' '
-       cat >expected <<\EXPECTED &&
-EXPECTED
-
        git reset --hard initial &&
        test_commit "add-not-a-b" "ONE" "AAA" &&
        git merge-tree initial add-not-a-b initial >actual &&
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'file add A, B (same)' '
-       cat >expected <<\EXPECTED &&
-EXPECTED
-
        git reset --hard initial &&
        test_commit "add-a-b-same-A" "ONE" "AAA" &&
        git reset --hard initial &&
        test_commit "add-a-b-same-B" "ONE" "AAA" &&
        git merge-tree initial add-a-b-same-A add-a-b-same-B >actual &&
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'file add A, B (different)' '
@@ -68,13 +62,10 @@ EXPECTED
 '
 
 test_expect_success 'file change A, !B' '
-       cat >expected <<\EXPECTED &&
-EXPECTED
-
        git reset --hard initial &&
        test_commit "change-a-not-b" "initial-file" "BBB" &&
        git merge-tree initial change-a-not-b initial >actual &&
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'file change !A, B' '
@@ -94,15 +85,12 @@ EXPECTED
 '
 
 test_expect_success 'file change A, B (same)' '
-       cat >expected <<\EXPECTED &&
-EXPECTED
-
        git reset --hard initial &&
        test_commit "change-a-b-same-A" "initial-file" "AAA" &&
        git reset --hard initial &&
        test_commit "change-a-b-same-B" "initial-file" "AAA" &&
        git merge-tree initial change-a-b-same-A change-a-b-same-B >actual &&
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'file change A, B (different)' '
@@ -175,16 +163,13 @@ AAA" &&
 '
 
 test_expect_success 'file remove A, !B' '
-       cat >expected <<\EXPECTED &&
-EXPECTED
-
        git reset --hard initial &&
        test_commit "rm-a-not-b-base" "ONE" "AAA" &&
        git rm ONE &&
        git commit -m "rm-a-not-b" &&
        git tag "rm-a-not-b" &&
        git merge-tree rm-a-not-b-base rm-a-not-b rm-a-not-b-base >actual &&
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'file remove !A, B' '
@@ -206,16 +191,13 @@ EXPECTED
 '
 
 test_expect_success 'file remove A, B (same)' '
-       cat >expected <<\EXPECTED &&
-EXPECTED
-
        git reset --hard initial &&
        test_commit "rm-a-b-base" "ONE" "AAA" &&
        git rm ONE &&
        git commit -m "rm-a-b" &&
        git tag "rm-a-b" &&
        git merge-tree rm-a-b-base rm-a-b rm-a-b >actual &&
-       test_cmp expected actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'file change A, remove B' '
@@ -260,13 +242,11 @@ EXPECTED
 '
 
 test_expect_success 'tree add A, B (same)' '
-       cat >expect <<-\EOF &&
-       EOF
        git reset --hard initial &&
        mkdir sub &&
        test_commit "add sub/file" "sub/file" "file" add-tree-A &&
        git merge-tree initial add-tree-A add-tree-A >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'tree add A, B (different)' '
index f20f03c1039256f0bc674e3969176a2c592919dd..270da21ac3e2931a42683392536500c4bb1fb5c3 100755 (executable)
@@ -112,8 +112,7 @@ test_expect_success 'prune: do not prune detached HEAD with no reflog' '
        # (should be removed and disabled by previous test)
        test_path_is_missing .git/logs &&
        git prune -n >prune_actual &&
-       : >prune_expected &&
-       test_cmp prune_actual prune_expected
+       test_must_be_empty prune_actual
 
 '
 
index f31995d3d28d9fcd590c91aed7686aef87e332af..e525466de09856fe2c99345d34b7776f451b1c2a 100755 (executable)
@@ -98,9 +98,8 @@ test_expect_success 'repack' '
        # We first want to check that we do not have any internal errors,
        # and also that we do not hit the last-ditch cycle-breaking code
        # in write_object(), which will issue a warning to stderr.
-       >expect &&
        git repack -ad 2>stderr &&
-       test_cmp expect stderr &&
+       test_must_be_empty stderr &&
 
        # And then double-check that the resulting pack is usable (i.e.,
        # we did not fail to notice any cycles). We know we are accessing
index b5f886a0e264eed3d3ab54176b01912bbb8badb6..956d69f5b1773d3d697e4bb2ca9d50786c42b74f 100755 (executable)
@@ -104,17 +104,17 @@ test_expect_success 'post-update hook arguments' '
 '
 
 test_expect_success 'all hook stdin is /dev/null' '
-       ! test -s victim.git/update.stdin &&
-       ! test -s victim.git/post-update.stdin
+       test_must_be_empty victim.git/update.stdin &&
+       test_must_be_empty victim.git/post-update.stdin
 '
 
 test_expect_success 'all *-receive hook args are empty' '
-       ! test -s victim.git/pre-receive.args &&
-       ! test -s victim.git/post-receive.args
+       test_must_be_empty victim.git/pre-receive.args &&
+       test_must_be_empty victim.git/post-receive.args
 '
 
 test_expect_success 'send-pack produced no output' '
-       ! test -s send.out
+       test_must_be_empty send.out
 '
 
 cat <<EOF >expect
index 8f945235e3a94156de4dadaff5e944751f056372..1b5a4a6d380f37b0e616e5ca6c5fd5b732e6383d 100755 (executable)
@@ -161,7 +161,7 @@ test_expect_success 'clone shallow object count' '
 test_expect_success 'clone shallow object count (part 2)' '
        sed -e "/^in-pack:/d" -e "/^packs:/d" -e "/^size-pack:/d" \
            -e "/: 0$/d" count.shallow > count_output &&
-       ! test -s count_output
+       test_must_be_empty count_output
 '
 
 test_expect_success 'fsck in shallow repo' '
index 75c570adcae4f474c15775ec8504521fc806e2a9..c88df78c0bffaae8f09fc2db79427d85a6f8ff48 100755 (executable)
@@ -44,7 +44,7 @@ test_expect_success 'pushing into a repository using a ref namespace' '
                test_cmp expected actual &&
                # Try a namespace with no content
                git ls-remote "ext::git --namespace=garbage %s ../pushee" >actual &&
-               test_cmp /dev/null actual &&
+               test_must_be_empty actual &&
                git ls-remote pushee-unnamespaced >actual &&
                sed -e "s|refs/|refs/namespaces/namespace/refs/|" expected >expected.unnamespaced &&
                test_cmp expected.unnamespaced actual
index d6981ba304b0b1f2da22d8ec14d4b472b54f3415..c0df81a014c360c277f38831a37cb6f9c4e9bad7 100755 (executable)
@@ -113,7 +113,7 @@ test_expect_success TTY 'quiet push' '
        ensure_fresh_upstream &&
 
        test_terminal git push --quiet --no-progress upstream master 2>&1 | tee output &&
-       test_cmp /dev/null output
+       test_must_be_empty output
 '
 
 test_done
index 0f730d7781568861564b44d534bad728095ac71d..6c2f9b2ba266ad910769745e72285a840b33238b 100755 (executable)
@@ -98,8 +98,8 @@ test_expect_success "fetch alone only fetches superproject" '
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "fetch --no-recurse-submodules only fetches superproject" '
@@ -107,8 +107,8 @@ test_expect_success "fetch --no-recurse-submodules only fetches superproject" '
                cd downstream &&
                git fetch --no-recurse-submodules >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses into submodules" '
@@ -127,8 +127,8 @@ test_expect_success "--no-recurse-submodules overrides .gitmodules config" '
                cd downstream &&
                git fetch --no-recurse-submodules >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "using fetchRecurseSubmodules=false in .git/config overrides setting in .gitmodules" '
@@ -137,8 +137,8 @@ test_expect_success "using fetchRecurseSubmodules=false in .git/config overrides
                git config submodule.submodule.fetchRecurseSubmodules false &&
                git fetch >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setting from .git/config" '
@@ -157,8 +157,8 @@ test_expect_success "--quiet propagates to submodules" '
                cd downstream &&
                git fetch --recurse-submodules --quiet >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "--quiet propagates to parallel submodules" '
@@ -166,8 +166,8 @@ test_expect_success "--quiet propagates to parallel submodules" '
                cd downstream &&
                git fetch --recurse-submodules -j 2 --quiet  >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "--dry-run propagates to submodules" '
@@ -221,8 +221,8 @@ test_expect_success "--no-recurse-submodules overrides config setting" '
                git config fetch.recurseSubmodules true &&
                git fetch --no-recurse-submodules >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "Recursion doesn't happen when no new commits are fetched in the superproject" '
@@ -235,8 +235,8 @@ test_expect_success "Recursion doesn't happen when no new commits are fetched in
                git config --unset fetch.recurseSubmodules &&
                git fetch >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "Recursion stops when no new submodule commits are fetched" '
@@ -268,7 +268,7 @@ test_expect_success "Recursion doesn't happen when new superproject commits don'
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
+       test_must_be_empty actual.out &&
        test_i18ncmp expect.err.file actual.err
 '
 
@@ -357,8 +357,8 @@ test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no ne
                git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err &&
                git config --unset fetch.recurseSubmodules
        ) &&
-       ! test -s actual.out &&
-       ! test -s actual.err
+       test_must_be_empty actual.out &&
+       test_must_be_empty actual.err
 '
 
 test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necessary (and ignores config)" '
@@ -402,7 +402,7 @@ test_expect_success "'--recurse-submodules=on-demand' stops when no new submodul
                cd downstream &&
                git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
+       test_must_be_empty actual.out &&
        test_i18ncmp expect.err.file actual.err
 '
 
@@ -477,7 +477,7 @@ test_expect_success "don't fetch submodule when newly recorded commits are alrea
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
        ) &&
-       ! test -s actual.out &&
+       test_must_be_empty actual.out &&
        test_i18ncmp expect.err actual.err &&
        (
                cd submodule &&
@@ -495,7 +495,6 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
        git add submodule &&
        git rm .gitmodules &&
        git commit -m "new submodule without .gitmodules" &&
-       printf "" >expect.out &&
        head2=$(git rev-parse --short HEAD) &&
        echo "From $pwd/." >expect.err.2 &&
        echo "   $head1..$head2  master     -> origin/master" >>expect.err.2 &&
@@ -514,7 +513,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
                git config --unset fetch.recurseSubmodules &&
                git reset --hard
        ) &&
-       test_i18ncmp expect.out actual.out &&
+       test_must_be_empty actual.out &&
        test_i18ncmp expect.err.2 actual.err &&
        git checkout HEAD^ -- .gitmodules &&
        git add .gitmodules &&
index a0fc4005e059723dbafb26606548a074554bc961..5475afc052934677c4f87adf4f29da507b4c6844 100755 (executable)
@@ -210,7 +210,7 @@ test_expect_success TTY 'push --quiet silences status and progress' '
        cd "$ROOT_PATH"/test_repo_clone &&
        test_commit quiet &&
        test_terminal git push --quiet >output 2>&1 &&
-       test_cmp /dev/null output
+       test_must_be_empty output
 '
 
 test_expect_success TTY 'push --no-progress silences progress but not status' '
index a571f22bfdd52293d0fcce16d30870119f72e88f..7466aad111fe4ef11b97d05a9616f8530993c288 100755 (executable)
@@ -51,7 +51,7 @@ test_expect_success 'no-op fetch -v stderr is as expected' '
 
 test_expect_success 'no-op fetch without "-v" is quiet' '
        (cd clone && git fetch 2>../stderr) &&
-       ! test -s stderr
+       test_must_be_empty stderr
 '
 
 test_expect_success 'remote detects correct HEAD' '
index 02936c2f24aeaa3961bc11c623b7fd25d3280c43..0bf10d0686982418682ff03e3a42ef3a16e2cfb4 100755 (executable)
@@ -256,7 +256,7 @@ test_expect_success 'rev-list accumulates multiple --exclude' '
 '
 
 test_expect_failure 'rev-list should succeed with empty output on empty stdin' '
-       git rev-list --stdin <expect >actual &&
+       git rev-list --stdin </dev/null >actual &&
        test_must_be_empty actual
 '
 
index 0a37dd5f97ee49fd65eff1c05d016abf2bcba38f..d4ff0b3bef61b5d3de1ab0fad4695949d80dc8fd 100755 (executable)
@@ -113,12 +113,11 @@ test_expect_success 'verify blob:limit=1k' '
 '
 
 test_expect_success 'verify blob:limit=1m' '
-       cat </dev/null >expected &&
        git -C r2 rev-list HEAD --quiet --objects --filter-print-omitted --filter=blob:limit=1m \
                | awk -f print_1.awk \
                | sed "s/~//" \
                | sort >observed &&
-       test_cmp observed expected
+       test_must_be_empty observed
 '
 
 # Test sparse:path=<path> filter.
index 84dd1cb6907d583ec4019f1bb5b949865beac6cb..d639d946965547c86708701bfde276649c568a15 100755 (executable)
@@ -121,10 +121,9 @@ test_expect_success 'describe --contains defaults to HEAD without commit-ish' '
        test_cmp expect actual
 '
 
-: >err.expect
 check_describe tags/A --all A^0
 test_expect_success 'no warning was displayed for A' '
-       test_cmp err.expect err.actual
+       test_must_be_empty err.actual
 '
 
 test_expect_success 'rename tag A to Q locally' '
index 658353277ee1e2c1b666d22961a8141dbb1bdd17..37760233a560559730fdf8c00a45c07d86250c00 100755 (executable)
@@ -97,9 +97,8 @@ test_expect_success 'no-glob option matches literally (bracket)' '
 '
 
 test_expect_success 'no-glob option disables :(literal)' '
-       : >expect &&
        git --literal-pathspecs log --format=%s -- ":(literal)foo" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'no-glob environment variable works' '
@@ -130,9 +129,8 @@ test_expect_success '**/ works with :(glob)' '
 '
 
 test_expect_success '**/ does not work with --noglob-pathspecs' '
-       : >expect &&
        git --noglob-pathspecs log --format=%s -- "**/bar" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success '**/ works with :(glob) and --noglob-pathspecs' '
@@ -154,9 +152,8 @@ test_expect_success '**/ works with --glob-pathspecs' '
 '
 
 test_expect_success '**/ does not work with :(literal) and --glob-pathspecs' '
-       : >expect &&
        git --glob-pathspecs log --format=%s -- ":(literal)**/bar" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_done
index a54a52aaa4e680bdbc97750c4ae4855a45dcdb80..93f23cfa8279ccc093ca332b1eb718c515dd41aa 100755 (executable)
@@ -366,8 +366,6 @@ test_expect_success 'merge-msg with nothing to merge' '
        test_unconfig merge.log &&
        test_config merge.summary yes &&
 
-       >empty &&
-
        (
                cd remote &&
                git checkout -b unrelated &&
@@ -376,7 +374,7 @@ test_expect_success 'merge-msg with nothing to merge' '
                git fmt-merge-msg <.git/FETCH_HEAD >../actual
        ) &&
 
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'merge-msg tag' '
index 9e59e5a5dd031f036237dafc3ebb1e3854883caa..36b50d0b4c1255408d57b4e8b583cfcd41ce9c0d 100755 (executable)
@@ -384,7 +384,7 @@ test_expect_success 'mv does not complain when no .gitmodules file is found' '
        entry="$(git ls-files --stage sub | cut -f 1)" &&
        mkdir mod &&
        git mv sub mod/sub 2>actual.err &&
-       ! test -s actual.err &&
+       test_must_be_empty actual.err &&
        ! test -e sub &&
        [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
        (
@@ -408,7 +408,7 @@ test_expect_success 'mv will error out on a modified .gitmodules file unless sta
        git diff-files --quiet -- sub &&
        git add .gitmodules &&
        git mv sub mod/sub 2>actual.err &&
-       ! test -s actual.err &&
+       test_must_be_empty actual.err &&
        ! test -e sub &&
        [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
        (
@@ -469,7 +469,7 @@ test_expect_success 'checking out a commit before submodule moved needs manual u
        git update-index --refresh &&
        git diff-files --quiet -- sub .gitmodules &&
        git status -s sub2 >actual &&
-       ! test -s actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'mv -k does not accidentally destroy submodules' '
index 465eb4ea3f973943367b1c8b2e560d1b16b3c31b..0b01862c23aa182ee4ae7ce2944a40b4449d6049 100755 (executable)
@@ -325,11 +325,10 @@ test_expect_success \
        test_cmp expect actual
 '
 
->expect
 test_expect_success \
        'listing tags using v.* should print nothing because none have v.' '
        git tag -l "v.*" > actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 cat >expect <<EOF
@@ -1511,12 +1510,9 @@ test_expect_success 'inverse of the last test, with --no-contains' "
        test_cmp expected actual
 "
 
-cat > expected <<EOF
-EOF
-
 test_expect_success 'checking that third commit has no tags' "
        git tag -l --contains $hash3 v* >actual &&
-       test_cmp expected actual
+       test_must_be_empty actual
 "
 
 cat > expected <<EOF
index 615e7e0162518087fff355bac156ba8bbdd6df38..2d87c49b753935f11f291371e8dd028e21651308 100755 (executable)
@@ -57,9 +57,8 @@ test_expect_success 'git grep -ah ina a' '
 '
 
 test_expect_success 'git grep -I ina a' '
-       : >expect &&
        test_must_fail git grep -I ina a >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'git grep -c ina a' '
@@ -81,9 +80,8 @@ test_expect_success 'git grep -L bar a' '
 '
 
 test_expect_success 'git grep -q ina a' '
-       : >expect &&
        git grep -q ina a >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'git grep -F ile a' '
index b9a86d3347acb4051a212e2c9e3573a2c6e9fe7a..11eccc231a792b77fe5e95d11b6ceaad83fda3d9 100755 (executable)
@@ -364,11 +364,8 @@ test_expect_success 'verify upstream fields in branch header' '
                test_cmp expect actual &&
 
                ## Repeat the above but without --branch.
-               cat >expect <<-EOF &&
-               EOF
-
                git status --porcelain=v2 --untracked-files=all >actual &&
-               test_cmp expect actual &&
+               test_must_be_empty actual &&
 
                ## Test upstream-gone case. Fake this by pointing origin/master at
                ## a non-existing commit.
index 94cb039a03f8378cec55f61a9694feca4a973d29..324933acfe94153e166783e9810e98e69da1fc7e 100755 (executable)
@@ -116,9 +116,8 @@ test_expect_success "checkout -m with dirty tree" '
        git diff --name-status side >current.side &&
        test_cmp expect.side current.side &&
 
-       : >expect.index &&
        git diff --cached >current.index &&
-       test_cmp expect.index current.index
+       test_must_be_empty current.index
 '
 
 test_expect_success "checkout -m with dirty tree, renamed" '
@@ -139,7 +138,7 @@ test_expect_success "checkout -m with dirty tree, renamed" '
        test_cmp expect uno &&
        ! test -f one &&
        git diff --cached >current &&
-       ! test -s current
+       test_must_be_empty current
 
 '
 
@@ -163,7 +162,7 @@ test_expect_success 'checkout -m with merge conflict' '
        fill d2 aT d7 aS >expect &&
        test_cmp current expect &&
        git diff --cached two >current &&
-       ! test -s current
+       test_must_be_empty current
 '
 
 test_expect_success 'format of merge conflict from checkout -m' '
index 2b71e62ec2c26e6b1bbbcf71e69c5e5b784dc2ba..7d3d9842108ae5961f7c17e392f0ce9a8b397cf4 100755 (executable)
@@ -101,7 +101,6 @@ inspect() {
 
 test_expect_success 'submodule add' '
        echo "refs/heads/master" >expect &&
-       >empty &&
 
        (
                cd addtest &&
@@ -123,7 +122,7 @@ test_expect_success 'submodule add' '
        inspect addtest/submod ../.. &&
        test_cmp expect heads &&
        test_cmp expect head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success 'setup parent and one repository' '
@@ -189,7 +188,6 @@ test_expect_success 'submodule add --branch' '
        refs/heads/initial
        refs/heads/master
        EOF
-       >empty &&
 
        (
                cd addtest &&
@@ -202,12 +200,11 @@ test_expect_success 'submodule add --branch' '
        inspect addtest/submod-branch ../.. &&
        test_cmp expect-heads heads &&
        test_cmp expect-head head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success 'submodule add with ./ in path' '
        echo "refs/heads/master" >expect &&
-       >empty &&
 
        (
                cd addtest &&
@@ -219,12 +216,11 @@ test_expect_success 'submodule add with ./ in path' '
        inspect addtest/dotsubmod/frotz ../../.. &&
        test_cmp expect heads &&
        test_cmp expect head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success 'submodule add with /././ in path' '
        echo "refs/heads/master" >expect &&
-       >empty &&
 
        (
                cd addtest &&
@@ -236,12 +232,11 @@ test_expect_success 'submodule add with /././ in path' '
        inspect addtest/dotslashdotsubmod/frotz ../../.. &&
        test_cmp expect heads &&
        test_cmp expect head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success 'submodule add with // in path' '
        echo "refs/heads/master" >expect &&
-       >empty &&
 
        (
                cd addtest &&
@@ -253,12 +248,11 @@ test_expect_success 'submodule add with // in path' '
        inspect addtest/slashslashsubmod/frotz ../../.. &&
        test_cmp expect heads &&
        test_cmp expect head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success 'submodule add with /.. in path' '
        echo "refs/heads/master" >expect &&
-       >empty &&
 
        (
                cd addtest &&
@@ -270,12 +264,11 @@ test_expect_success 'submodule add with /.. in path' '
        inspect addtest/realsubmod ../.. &&
        test_cmp expect heads &&
        test_cmp expect head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success 'submodule add with ./, /.. and // in path' '
        echo "refs/heads/master" >expect &&
-       >empty &&
 
        (
                cd addtest &&
@@ -287,7 +280,7 @@ test_expect_success 'submodule add with ./, /.. and // in path' '
        inspect addtest/realsubmod2 ../.. &&
        test_cmp expect heads &&
        test_cmp expect head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success !CYGWIN 'submodule add with \\ in path' '
@@ -306,7 +299,6 @@ test_expect_success !CYGWIN 'submodule add with \\ in path' '
 
 test_expect_success 'submodule add in subdirectory' '
        echo "refs/heads/master" >expect &&
-       >empty &&
 
        mkdir addtest/sub &&
        (
@@ -319,7 +311,7 @@ test_expect_success 'submodule add in subdirectory' '
        inspect addtest/realsubmod3 ../.. &&
        test_cmp expect heads &&
        test_cmp expect head &&
-       test_cmp empty untracked
+       test_must_be_empty untracked
 '
 
 test_expect_success 'submodule add in subdirectory with relative path should fail' '
@@ -502,8 +494,6 @@ test_expect_success 'checkout superproject with subproject already present' '
 '
 
 test_expect_success 'apply submodule diff' '
-       >empty &&
-
        git branch second &&
        (
                cd init &&
@@ -518,7 +508,7 @@ test_expect_success 'apply submodule diff' '
        git apply --index P.diff &&
 
        git diff --cached master >staged &&
-       test_cmp empty staged
+       test_must_be_empty staged
 '
 
 test_expect_success 'update --init' '
index 1cd12b38c53c7fdfedb937151d961527aa990dbd..9bc841d085ee74cbc4a103b3c2f07c7e4b86e82d 100755 (executable)
@@ -300,7 +300,7 @@ test_expect_success 'should not fail in an empty repo' "
        git init xyzzy &&
        cd xyzzy &&
        git submodule summary >output 2>&1 &&
-       test_cmp output /dev/null
+       test_must_be_empty output
 "
 
 test_done
index 51646d80197486a19475a144ae8e64b2151b511c..4cae92804d11f75f24bdd6f6517a88c834e7cfc7 100755 (executable)
@@ -582,13 +582,11 @@ test_expect_success 'same tree (merge and amend merge)' '
 
        git merge -s ours side -m "empty ok" &&
        git diff HEAD^ HEAD >actual &&
-       : >expected &&
-       test_cmp expected actual &&
+       test_must_be_empty actual &&
 
        git commit --amend -m "empty really ok" &&
        git diff HEAD^ HEAD >actual &&
-       : >expected &&
-       test_cmp expected actual
+       test_must_be_empty actual
 
 '
 
@@ -677,7 +675,7 @@ test_expect_success '--dry-run with conflicts fixed from a merge' '
        git checkout -b branch-2 HEAD^1 &&
        echo "commit-2-state" >test-file &&
        git commit -m "commit 2" -i test-file &&
-       ! $(git merge --no-commit commit-1) &&
+       test_must_fail git merge --no-commit commit-1 &&
        echo "commit-2-state" >test-file &&
        git add test-file &&
        git commit --dry-run &&
index 6736d8d13139c946b07165d5bbad6c8d14617cbd..106148254d0ce067e8f5f842faac8fbf1ee90f15 100755 (executable)
@@ -38,7 +38,6 @@ printf '%s\n' '1 X' 2 3 4 5 6 7 8 9 >result.1
 printf '%s\n' '1 X' 2 3 4 '5 X' 6 7 8 9 >result.1-5
 printf '%s\n' '1 X' 2 3 4 '5 X' 6 7 8 '9 X' >result.1-5-9
 printf '%s\n' 1 2 3 4 5 6 7 8 '9 Z' >result.9z
->empty
 
 create_merge_msgs () {
        echo "Merge tag 'c2'" >msg.1-5 &&
@@ -58,8 +57,6 @@ create_merge_msgs () {
                echo &&
                git log --no-merges ^HEAD c2 c3
        } >squash.1-5-9 &&
-       : >msg.nologff &&
-       : >msg.nolognoff &&
        {
                echo "* tag 'c3':" &&
                echo "  commit 3"
@@ -519,7 +516,7 @@ test_expect_success 'tolerate unknown values for merge.ff' '
        test_tick &&
        git merge c1 2>message &&
        verify_head "$c1" &&
-       test_cmp empty message
+       test_must_be_empty message
 '
 
 test_expect_success 'combining --squash and --no-ff is refused' '
@@ -551,13 +548,13 @@ test_expect_success 'merge log message' '
        git reset --hard c0 &&
        git merge --no-log c2 &&
        git show -s --pretty=format:%b HEAD >msg.act &&
-       test_cmp msg.nologff msg.act &&
+       test_must_be_empty msg.act &&
 
        git reset --hard c0 &&
        test_config branch.master.mergeoptions "--no-ff" &&
        git merge --no-log c2 &&
        git show -s --pretty=format:%b HEAD >msg.act &&
-       test_cmp msg.nolognoff msg.act &&
+       test_must_be_empty msg.act &&
 
        git merge --log c3 &&
        git show -s --pretty=format:%b HEAD >msg.act &&
index b18503de8158aa6583423f923675d415ab408e76..a9fb971615b7f40bd17f16dcc1ce99ab2c0930ca 100755 (executable)
@@ -328,9 +328,8 @@ test_expect_success 'mergetool produces no errors when keepBackup is used' '
        git checkout -b test$test_count move-to-c &&
        test_config mergetool.keepBackup true &&
        test_must_fail git merge move-to-b &&
-       : >expect &&
        echo d | git mergetool a/a/file.txt 2>actual &&
-       test_cmp expect actual &&
+       test_must_be_empty actual &&
        ! test -d a
 '
 
index d826e24b45118d4b87a2723f540c742ac6300f44..be5c1bd553ede55d54e1d918625c99000ba32d80 100755 (executable)
@@ -217,9 +217,8 @@ do
        '
 
        test_expect_success "grep -w $L (w)" '
-               : >expected &&
                test_must_fail git grep -n -w -e "^w" $H >actual &&
-               test_cmp expected actual
+               test_must_be_empty actual
        '
 
        test_expect_success "grep -w $L (x)" '
@@ -239,26 +238,24 @@ do
        '
 
        test_expect_success "grep -w $L (y-2)" '
-               : >expected &&
                if git grep -n -w -e "^y y" $H >actual
                then
                        echo should not have matched
                        cat actual
                        false
                else
-                       test_cmp expected actual
+                       test_must_be_empty actual
                fi
        '
 
        test_expect_success "grep -w $L (z)" '
-               : >expected &&
                if git grep -n -w -e "^z" $H >actual
                then
                        echo should not have matched
                        cat actual
                        false
                else
-                       test_cmp expected actual
+                       test_must_be_empty actual
                fi
        '
 
@@ -498,7 +495,7 @@ test_expect_success 'grep -L -C' '
 
 test_expect_success 'grep --files-without-match --quiet' '
        git grep --files-without-match --quiet nonexistent_string >actual &&
-       test_cmp /dev/null actual
+       test_must_be_empty actual
 '
 
 cat >expected <<EOF
@@ -619,11 +616,10 @@ z:zzz
 EOF
 
 test_expect_success 'grep -q, silently report matches' '
-       >empty &&
        git grep -q mmap >actual &&
-       test_cmp empty actual &&
+       test_must_be_empty actual &&
        test_must_fail git grep -q qfwfq >actual &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'grep -C1 hunk mark between files' '
@@ -716,8 +712,7 @@ test_expect_success 'log grep (9)' '
 
 test_expect_success 'log grep (9)' '
        git log -g --grep-reflog="commit: third" --author="non-existent" --pretty=tformat:%s >actual &&
-       : >expect &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'log --grep-reflog can only be used under -g' '
@@ -807,15 +802,13 @@ test_expect_success 'log --all-match --grep --grep --author takes intersection'
 '
 
 test_expect_success 'log --author does not search in timestamp' '
-       : >expect &&
        git log --author="$GIT_AUTHOR_DATE" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'log --committer does not search in timestamp' '
-       : >expect &&
        git log --committer="$GIT_COMMITTER_DATE" >actual &&
-       test_cmp expect actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'grep with CE_VALID file' '
@@ -956,7 +949,7 @@ test_expect_success 'grep from a subdirectory to search wider area (2)' '
        (
                cd s &&
                test_expect_code 1 git grep xxyyzz .. >out &&
-               ! test -s out
+               test_must_be_empty out
        )
 '
 
@@ -1065,13 +1058,12 @@ test_expect_success 'inside git repository but with --no-index' '
                echo ".gitignore:.*o*" &&
                cat is/expect.unignored
        } >is/expect.full &&
-       : >is/expect.empty &&
        echo file2:world >is/expect.sub &&
        (
                cd is/git &&
                git init &&
                test_must_fail git grep o >../actual.full &&
-               test_cmp ../expect.empty ../actual.full &&
+               test_must_be_empty ../actual.full &&
 
                git grep --untracked o >../actual.unignored &&
                test_cmp ../expect.unignored ../actual.unignored &&
@@ -1084,7 +1076,7 @@ test_expect_success 'inside git repository but with --no-index' '
 
                cd sub &&
                test_must_fail git grep o >../../actual.sub &&
-               test_cmp ../../expect.empty ../../actual.sub &&
+               test_must_be_empty ../../actual.sub &&
 
                git grep --no-index o >../../actual.sub &&
                test_cmp ../../expect.sub ../../actual.sub &&
@@ -1250,10 +1242,9 @@ test_expect_success !PCRE 'grep -P pattern errors without PCRE' '
 '
 
 test_expect_success 'grep pattern with grep.extendedRegexp=true' '
-       >empty &&
        test_must_fail git -c grep.extendedregexp=true \
                grep "\p{Ps}.*?\p{Pe}" hello.c >actual &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success PCRE 'grep -P pattern with grep.extendedRegexp=true' '
index e1951a5cbb759a0f233b624a1a1a7e9c55ff9640..d1ebfd88c7a9a92a956b92347c4193c6b1d08701 100755 (executable)
@@ -51,14 +51,13 @@ test_expect_success SIMPLEPAGER 'git grep -O' '
        grep.h
        EOF
        echo grep.h >expect.notless &&
-       >empty &&
 
        PATH=.:$PATH git grep -O GREP_PATTERN >out &&
        {
                test_cmp expect.less pager-args ||
                test_cmp expect.notless pager-args
        } &&
-       test_cmp empty out
+       test_must_be_empty out
 '
 
 test_expect_success 'git grep -O --cached' '
@@ -72,7 +71,6 @@ test_expect_success 'git grep -O --no-index' '
        grep.h
        untracked
        EOF
-       >empty &&
 
        (
                GIT_PAGER='\''printf "%s\n" >pager-args'\'' &&
@@ -80,7 +78,7 @@ test_expect_success 'git grep -O --no-index' '
                git grep --no-index -O GREP_PATTERN >out
        ) &&
        test_cmp expect pager-args &&
-       test_cmp empty out
+       test_must_be_empty out
 '
 
 test_expect_success 'setup: fake "less"' '
@@ -96,15 +94,14 @@ test_expect_success 'git grep -O jumps to line in less' '
        +/*GREP_PATTERN
        grep.h
        EOF
-       >empty &&
 
        GIT_PAGER=./less git grep -O GREP_PATTERN >out &&
        test_cmp expect actual &&
-       test_cmp empty out &&
+       test_must_be_empty out &&
 
        git grep -O./less GREP_PATTERN >out2 &&
        test_cmp expect actual &&
-       test_cmp empty out2
+       test_must_be_empty out2
 '
 
 test_expect_success 'modified file' '
@@ -122,7 +119,7 @@ test_expect_success 'modified file' '
        test_when_finished "git checkout HEAD unrelated" &&
        GIT_PAGER=./less git grep -F -O "enum grep_pat_token" >out &&
        test_cmp expect actual &&
-       test_cmp empty out
+       test_must_be_empty out
 '
 
 test_expect_success 'copes with color settings' '
@@ -138,7 +135,6 @@ test_expect_success 'copes with color settings' '
 test_expect_success 'run from subdir' '
        rm -f actual &&
        echo grep.c >expect &&
-       >empty &&
 
        (
                cd subdir &&
@@ -156,8 +152,8 @@ test_expect_success 'run from subdir' '
                ;;
        esac &&
        test_cmp expect args &&
-       test_cmp empty out &&
-       test_cmp empty out2
+       test_must_be_empty out &&
+       test_must_be_empty out2
 '
 
 test_done
index 0f86c191745d65c88c70881c6520685289bc2405..31de4b64dc06c1aad760dfc4ad585d11b46a65d8 100755 (executable)
@@ -47,7 +47,7 @@ test_expect_success 'cat-file --textconv --path=<path> works' '
 test_expect_success '--path=<path> complains without --textconv/--filters' '
        sha1=$(git rev-parse -q --verify HEAD:world.txt) &&
        test_must_fail git cat-file --path=hello.txt blob $sha1 >actual 2>err &&
-       test ! -s actual &&
+       test_must_be_empty actual &&
        grep "path.*needs.*filters" err
 '
 
index b38d16f9dbd6e6f575e12f81e7d6546f07e53f1f..ab1ef28fd991f4325ad3821ae0f7607d4f500810 100755 (executable)
@@ -18,7 +18,7 @@ test_expect_success 'reject empty delta' '
 test_expect_success 'delta can empty file' '
        printf "SVNQ" | q_to_nul >clear.delta &&
        test-svn-fe -d preimage clear.delta 4 >actual &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'reject svndiff2' '
@@ -29,7 +29,7 @@ test_expect_success 'reject svndiff2' '
 test_expect_success 'one-window empty delta' '
        printf "SVNQ%s" "QQQQQ" | q_to_nul >clear.onewindow &&
        test-svn-fe -d preimage clear.onewindow 9 >actual &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'reject incomplete window header' '
@@ -50,7 +50,7 @@ test_expect_success 'two-window empty delta' '
        printf "SVNQ%s%s" "QQQQQ" "QQQQQ" | q_to_nul >clear.twowindow &&
        test-svn-fe -d preimage clear.twowindow 14 >actual &&
        test_must_fail test-svn-fe -d preimage clear.twowindow 13 &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'noisy zeroes' '
@@ -60,7 +60,7 @@ test_expect_success 'noisy zeroes' '
                q_to_nul >clear.noisy &&
        len=$(wc -c <clear.noisy) &&
        test-svn-fe -d preimage clear.noisy $len &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'reject variable-length int in magic' '
@@ -83,7 +83,7 @@ test_expect_success 'reject truncated integer' '
 test_expect_success 'nonempty (but unused) preimage view' '
        printf "SVNQ%b" "Q\003QQQ" | q_to_nul >clear.readpreimage &&
        test-svn-fe -d preimage clear.readpreimage 9 >actual &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'preimage view: right endpoint cannot backtrack' '
@@ -99,7 +99,7 @@ test_expect_success 'preimage view: left endpoint can advance' '
                q_to_nul >clear.shrinkbacktrack &&
        test-svn-fe -d preimage clear.preshrink 14 >actual &&
        test_must_fail test-svn-fe -d preimage clear.shrinkbacktrack 14 &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'preimage view: offsets compared by value' '
@@ -109,7 +109,7 @@ test_expect_success 'preimage view: offsets compared by value' '
                q_to_nul >clear.noisyadvance &&
        test_must_fail test-svn-fe -d preimage clear.noisybacktrack 15 &&
        test-svn-fe -d preimage clear.noisyadvance 15 &&
-       test_cmp empty actual
+       test_must_be_empty actual
 '
 
 test_expect_success 'preimage view: reject truncated preimage' '
index f762038f0ea95ce0f9d411ff6f494088ee1fc22c..3bf4255aa3ed9c05ca02d08b4795054f296e4de4 100755 (executable)
@@ -85,7 +85,7 @@ EOF
 test_expect_success 'clone using git svn' 'git svn clone -r1 "$svnrepo" x'
 test_expect_success 'enable broken symlink workaround' \
   '(cd x && git config svn.brokenSymlinkWorkaround true)'
-test_expect_success '"bar" is an empty file' 'test -f x/bar && ! test -s x/bar'
+test_expect_success '"bar" is an empty file' 'test_must_be_empty x/bar'
 test_expect_success 'get "bar" => symlink fix from svn' \
                '(cd x && git svn rebase)'
 test_expect_success SYMLINKS '"bar" becomes a symlink' 'test -h x/bar'
@@ -94,14 +94,14 @@ test_expect_success SYMLINKS '"bar" becomes a symlink' 'test -h x/bar'
 test_expect_success 'clone using git svn' 'git svn clone -r1 "$svnrepo" y'
 test_expect_success 'disable broken symlink workaround' \
   '(cd y && git config svn.brokenSymlinkWorkaround false)'
-test_expect_success '"bar" is an empty file' 'test -f y/bar && ! test -s y/bar'
+test_expect_success '"bar" is an empty file' 'test_must_be_empty y/bar'
 test_expect_success 'get "bar" => symlink fix from svn' \
                '(cd y && git svn rebase)'
 test_expect_success '"bar" does not become a symlink' '! test -L y/bar'
 
 # svn.brokenSymlinkWorkaround is unset
 test_expect_success 'clone using git svn' 'git svn clone -r1 "$svnrepo" z'
-test_expect_success '"bar" is an empty file' 'test -f z/bar && ! test -s z/bar'
+test_expect_success '"bar" is an empty file' 'test_must_be_empty z/bar'
 test_expect_success 'get "bar" => symlink fix from svn' \
                '(cd z && git svn rebase)'
 test_expect_success '"bar" does not become a symlink' '! test -L z/bar'
index 93db45db7d69e460d7005815c19ccc63e916e50c..2f80b216fe35bdcd4e3169306a69e8ca594dccdb 100755 (executable)
@@ -13,8 +13,7 @@ test_expect_success 'test that b1 exists and is empty' '
        (
                cd x &&
                git reset --hard origin/branch-c &&
-               test -f b1 &&
-               ! test -s b1
+               test_must_be_empty b1
        )
        '
 
index cd61288aa1a9476819bd9b19b888e9e1b75f1da5..c5946cb0b8a94cfc8c4e2a30284c3343acb8e876 100755 (executable)
@@ -43,11 +43,11 @@ check_entries () {
        sed -ne '/^\//p' "$1/CVS/Entries" | sort | cut -d/ -f2,3,5 >actual
        if test -z "$2"
        then
-               >expected
+               test_must_be_empty actual
        else
                printf '%s\n' "$2" | tr '|' '\012' >expected
+               test_cmp expected actual
        fi
-       test_cmp expected actual
 }
 
 test_expect_success \
index 1fc9b33aeb5f095816fba72e85c94f0455994418..9978352d7828dbd63d44d172b91193a20291c4d1 100755 (executable)
@@ -310,7 +310,7 @@ test_expect_success SYMLINKS 'empty symlink target' '
                # p4 to sync here will make it generate errors.
                cd "$cli" &&
                p4 print -q //depot/empty-symlink#2 >out &&
-               test ! -s out
+               test_must_be_empty out
        ) &&
        test_when_finished cleanup_git &&
 
index ab890d3d4b3e2a39bb787bd29d7865c46f64c7f6..81a5179e28bf529bc2f0a8bc197108fcb69fba72 100755 (executable)
@@ -513,10 +513,9 @@ test_expect_success 'prompt - format string starting with dash' '
 
 test_expect_success 'prompt - pc mode' '
        printf "BEFORE: (\${__git_ps1_branch_name}):AFTER\\nmaster" >expected &&
-       printf "" >expected_output &&
        (
                __git_ps1 "BEFORE:" ":AFTER" >"$actual" &&
-               test_cmp expected_output "$actual" &&
+               test_must_be_empty "$actual" &&
                printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
        ) &&
        test_cmp expected "$actual"
@@ -712,13 +711,12 @@ test_expect_success 'prompt - hide if pwd ignored - env var set, config disabled
 '
 
 test_expect_success 'prompt - hide if pwd ignored - env var set, config unset' '
-       printf "" >expected &&
        (
                cd ignored_dir &&
                GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
                __git_ps1 >"$actual"
        ) &&
-       test_cmp expected "$actual"
+       test_must_be_empty "$actual"
 '
 
 test_expect_success 'prompt - hide if pwd ignored - env var set, config unset, pc mode' '
index fe2e466ac1dcb164b214ce4856ed9d62884ddbd3..553bc0e63ae37ada1c3e19ae748d1228561f00f6 100644 (file)
@@ -557,9 +557,7 @@ struct combine_diff_path *diff_tree_paths(
         * free pre-allocated last element, if any
         * (see path_appendnew() for details about why)
         */
-       if (p->next) {
-               FREE_AND_NULL(p->next);
-       }
+       FREE_AND_NULL(p->next);
 
        return p;
 }