Code

Merge branch 'np/maint-huge-delta-generation' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 1 Sep 2010 20:56:10 +0000 (13:56 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 1 Sep 2010 20:56:10 +0000 (13:56 -0700)
* np/maint-huge-delta-generation:
  fix >4GiB source delta assertion failure

32 files changed:
Documentation/RelNotes-1.5.6.3.txt
Documentation/RelNotes-1.6.0.2.txt
Documentation/RelNotes-1.6.4.3.txt
Documentation/RelNotes-1.6.5.4.txt
Documentation/RelNotes-1.6.5.7.txt
Documentation/RelNotes-1.6.6.txt
Documentation/RelNotes-1.7.0.txt
Documentation/config.txt
Documentation/fetch-options.txt
Documentation/howto/revert-a-faulty-merge.txt
builtin/blame.c
builtin/fetch.c
builtin/for-each-ref.c
builtin/log.c
compat/mingw.c
compat/nedmalloc/malloc.c.h
compat/regex/regex.c
contrib/workdir/git-new-workdir
git-pull.sh
git-submodule.sh
git.c
gitweb/README
gitweb/gitweb.perl
graph.c
pack-check.c
parse-options.h
t/t0003-attributes.sh
t/t3302-notes-index-expensive.sh
t/t5520-pull.sh
t/t5525-fetch-tagopt.sh [new file with mode: 0755]
t/t7403-submodule-sync.sh
tree-walk.h

index 942611299d59abd4bdd820e1258662067a304d62..f61dd3504afb9dc3fb7bb2d522e3adb573ef132f 100644 (file)
@@ -4,7 +4,7 @@ GIT v1.5.6.3 Release Notes
 Fixes since v1.5.6.2
 --------------------
 
-* Setting core.sharerepository to traditional "true" value was supposed to make
+* Setting core.sharedrepository to traditional "true" value was supposed to make
   the repository group writable but should not affect permission for others.
   However, since 1.5.6, it was broken to drop permission for others when umask is
   022, making the repository unreadable by others.
index 51b32f5d94c050f6cb5eae0b94cedda187e00312..e1e24b3295d4079c1bf784d11a8d6ec1691ec819 100644 (file)
@@ -17,7 +17,7 @@ Fixes since v1.6.0.1
 * Many commands did not use the correct working tree location when used
   with GIT_WORK_TREE environment settings.
 
-* Some systems needs to use compatibility fnmach and regex libraries
+* Some systems need to use compatibility fnmatch and regex libraries
   independent from each other; the compat/ area has been reorganized to
   allow this.
 
index 4f29babdeb03f9eddf73b7a6cb2a2e9b069baa4f..5643e6537de55ca961245cd1d7d01f46d9e9b855 100644 (file)
@@ -11,7 +11,7 @@ Fixes since v1.6.4.2
   been deprecated.
 
 * "git fetch" and "git clone" had an extra sanity check to verify the
-  presense of the corresponding *.pack file before downloading *.idx
+  presence of the corresponding *.pack file before downloading *.idx
   file by issuing a HEAD request.  Github server however sometimes
   gave 500 (Internal server error) response to HEAD even if a GET
   request for *.pack file to the same URL would have succeeded, and broke
index e42f8b239706465c7d1daf64ae052a31fa8ffcc8..d3a2a3e71243dc4612050d28a8cc779f34ab51ae 100644 (file)
@@ -26,7 +26,7 @@ Fixes since v1.6.5.3
    future versions, but not in this release,
 
  * "git merge -m <message> <branch>..." added the standard merge message
-   on its own after user-supplied message, which should have overrided the
+   on its own after user-supplied message, which should have overridden the
    standard one.
 
 Other minor documentation updates are included.
index 5b49ea53beb5592f97ccc68840d1b97616b18f23..dc5302c21cd2108a175235bc22efb0debac29670 100644 (file)
@@ -10,7 +10,7 @@ Fixes since v1.6.5.6
   an older version of git should just ignore them.  Instead we diagnosed
   it as an error.
 
-* With help.autocorrect set to non-zero value, the logic to guess typoes
+* With help.autocorrect set to non-zero value, the logic to guess typos
   in the subcommand name misfired and ran a random nonsense command.
 
 * If a command is run with an absolute path as a pathspec inside a bare
index 04e205c457cd11cba91327ad1e8b2c023743ac74..c50b59c4957a5def22fa6b2fc55cc85f3d46d0bc 100644 (file)
@@ -29,7 +29,7 @@ or adjust to the new behaviour, on the day their sysadmin decides to install
 the new version of git.  When we switched from "git-foo" to "git foo" in
 1.6.0, even though the change had been advertised and the transition
 guide had been provided for a very long time, the users procrastinated
-during the entire transtion period, and ended up panicking on the day
+during the entire transition period, and ended up panicking on the day
 their sysadmins updated their git installation.  We are trying to avoid
 repeating that unpleasantness in the 1.7.0 release.
 
@@ -94,7 +94,7 @@ users will fare this time.
  * "git diff" traditionally treated various "ignore whitespace" options
    only as a way to filter the patch output.  "git diff --exit-code -b"
    exited with non-zero status even if all changes were about changing the
-   ammount of whitespace and nothing else.  and "git diff -b" showed the
+   amount of whitespace and nothing else.  and "git diff -b" showed the
    "diff --git" header line for such a change without patch text.
 
    In 1.7.0, the "ignore whitespaces" will affect the semantics of the
index 43e3f336150e1869bdae01823471d7ab216584a8..0bb8c0b2a2a771ac95b5e5c1fc9b44eac5f2fe5d 100644 (file)
@@ -202,7 +202,7 @@ release, unless otherwise noted.
    the branch is fully merged to its upstream branch if it is not merged
    to the current branch.  It now deletes it in such a case.
 
- * "fiter-branch" command incorrectly said --prune-empty and --filter-commit
+ * "filter-branch" command incorrectly said --prune-empty and --filter-commit
    were incompatible; the latter should be read as --commit-filter.
 
  * When using "git status" or asking "git diff" to compare the work tree
index 7fffee7e3de29181479da083b086bf537c6f9354..dc4e83b10365e04f7b83ddc2015867d04b8cea45 100644 (file)
@@ -1629,7 +1629,9 @@ remote.<name>.tagopt::
        Setting this value to \--no-tags disables automatic tag following when
        fetching from remote <name>. Setting it to \--tags will fetch every
        tag from remote <name>, even if they are not reachable from remote
-       branch heads.
+       branch heads. Passing these flags directly to linkgit:git-fetch[1] can
+       override this setting. See options \--tags and \--no-tags of
+       linkgit:git-fetch[1].
 
 remote.<name>.vcs::
        Setting this to a value <vcs> will cause git to interact with
index 9333c42c558464ce2430df39e9864f932e786b36..470ac31396606a18298f69329b050a86943c580c 100644 (file)
@@ -49,7 +49,9 @@ ifndef::git-pull[]
 endif::git-pull[]
        By default, tags that point at objects that are downloaded
        from the remote repository are fetched and stored locally.
-       This option disables this automatic tag following.
+       This option disables this automatic tag following. The default
+       behavior for a remote may be specified with the remote.<name>.tagopt
+       setting. See linkgit:git-config[1].
 
 -t::
 --tags::
@@ -58,7 +60,9 @@ endif::git-pull[]
        objects reachable from the branch heads that are being
        tracked will not be fetched by this mechanism.  This
        flag lets all tags and their associated objects be
-       downloaded.
+       downloaded. The default behavior for a remote may be
+       specified with the remote.<name>.tagopt setting. See
+       linkgit:git-config[1].
 
 -u::
 --update-head-ok::
index ff5c0bc27a416de16f106c15b9076082c6509e42..6fd711996a775d1da8ab2051db98896a601c8971 100644 (file)
@@ -229,7 +229,7 @@ reverting W.  Mainline's history would look like this:
    A---B---C
 
 But if you don't actually need to change commit A, then you need some way to
-recreate it as a new commit with the same changes in it.  The rebase commmand's
+recreate it as a new commit with the same changes in it.  The rebase command's
 --no-ff option provides a way to do this:
 
     $ git rebase [-i] --no-ff P
index 01e62fdeb00b2d085efe96a07f2ee77776081a69..28e3be2eadadc71723da96334b8ff1dd22e73205 100644 (file)
@@ -2376,11 +2376,11 @@ parse_done:
         *
         * The remaining are:
         *
-        * (1) if dashdash_pos != 0, its either
+        * (1) if dashdash_pos != 0, it is either
         *     "blame [revisions] -- <path>" or
         *     "blame -- <path> <rev>"
         *
-        * (2) otherwise, its one of the two:
+        * (2) otherwise, it is one of the two:
         *     "blame [revisions] <path>"
         *     "blame <path> <rev>"
         *
index 1b67f5fda55896635e91852657259b47e722c889..7a5314415312e4c0e6e17e5a8934099d3d1274c4 100644 (file)
@@ -675,10 +675,12 @@ static int do_fetch(struct transport *transport,
 
        for_each_ref(add_existing, &existing_refs);
 
-       if (transport->remote->fetch_tags == 2 && tags != TAGS_UNSET)
-               tags = TAGS_SET;
-       if (transport->remote->fetch_tags == -1)
-               tags = TAGS_UNSET;
+       if (tags == TAGS_DEFAULT) {
+               if (transport->remote->fetch_tags == 2)
+                       tags = TAGS_SET;
+               if (transport->remote->fetch_tags == -1)
+                       tags = TAGS_UNSET;
+       }
 
        if (!transport->get_refs_list || !transport->fetch)
                die("Don't know how to fetch from %s", transport->url);
index a2b28c6962be8ea6f8882bae3d4fde9d972e78d2..89e75c6894e6fdb2abbe464d825f5c7186a14141 100644 (file)
@@ -228,7 +228,8 @@ static void grab_common_values(struct atom_value *val, int deref, struct object
                        v->s = s;
                }
                else if (!strcmp(name, "objectname:short")) {
-                       v->s = find_unique_abbrev(obj->sha1, DEFAULT_ABBREV);
+                       v->s = xstrdup(find_unique_abbrev(obj->sha1,
+                                                         DEFAULT_ABBREV));
                }
        }
 }
index 08b872263cd646ec9d7dc8ad91273c71b1af2b69..eaa1ee0fa71a344af747dec038c6a5907c8273a5 100644 (file)
@@ -125,6 +125,7 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
                rev->show_decorations = 1;
                load_ref_decorations(decoration_style);
        }
+       setup_pager();
 }
 
 /*
@@ -491,12 +492,6 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
        rev.use_terminator = 1;
        rev.always_show_header = 1;
 
-       /*
-        * We get called through "git reflog", so unlike the other log
-        * routines, we need to set up our pager manually..
-        */
-       setup_pager();
-
        return cmd_log_walk(&rev);
 }
 
index 9a8e3365827d303c6513475726113a3952fe0040..96be8a02cf2e48d9ff816638aec57987cc41c3af 100644 (file)
@@ -641,7 +641,7 @@ static char *lookup_prog(const char *dir, const char *cmd, int isexe, int exe_on
 }
 
 /*
- * Determines the absolute path of cmd using the the split path in path.
+ * Determines the absolute path of cmd using the split path in path.
  * If cmd contains a slash or backslash, no lookup is performed.
  */
 static char *path_lookup(const char *cmd, char **path, int exe_only)
index 74c42e31626480900898aba8e12704335330e11e..87260d26425dbb167f64710e71235f60e467a9b5 100644 (file)
@@ -2069,7 +2069,7 @@ static void init_malloc_global_mutex() {
   Each freshly allocated chunk must have both cinuse and pinuse set.
   That is, each allocated chunk borders either a previously allocated
   and still in-use chunk, or the base of its memory arena. This is
-  ensured by making all allocations from the the `lowest' part of any
+  ensured by making all allocations from the `lowest' part of any
   found chunk.  Further, no free chunk physically borders another one,
   so each free chunk is known to be preceded and followed by either
   inuse chunks or the ends of memory.
index 556d8ab11f40550335066f491d08383557e02a00..be851fc50267b10ae311dce042eec27c0f498461 100644 (file)
@@ -3122,7 +3122,7 @@ re_match (bufp, string, size, pos, regs)
 
 
 /* re_match_2 matches the compiled pattern in BUFP against the
-   the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
+   (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
    and SIZE2, respectively).  We start matching at POS, and stop
    matching at STOP.
 
index 993cacf324b8595e5be583ff372b25353c7af95c..3ad2c0cea56392fb941282ec6225c5f9a3ce05ea 100755 (executable)
@@ -54,13 +54,13 @@ then
        die "destination directory '$new_workdir' already exists."
 fi
 
-# make sure the the links use full paths
+# make sure the links use full paths
 git_dir=$(cd "$git_dir"; pwd)
 
 # create the workdir
 mkdir -p "$new_workdir/.git" || die "unable to create \"$new_workdir\"!"
 
-# create the links to the original repo.  explictly exclude index, HEAD and
+# create the links to the original repo.  explicitly exclude index, HEAD and
 # logs/HEAD from the list since they are purely related to the current working
 # directory, and should not be shared.
 for x in config refs logs/refs objects info hooks packed-refs remotes rr-cache svn
index a09a44ec4ce3d82cebc5f972f09e94c7c35dc948..8eb74d45debe7ab2bd2cc9b5ed57b1ba49d94bdb 100755 (executable)
@@ -273,6 +273,15 @@ then
        exit
 fi
 
+if test true = "$rebase"
+then
+       o=$(git show-branch --merge-base $curr_branch $merge_head $oldremoteref)
+       if test "$oldremoteref" = "$o"
+       then
+               unset oldremoteref
+       fi
+fi
+
 merge_name=$(git fmt-merge-msg $log_arg <"$GIT_DIR/FETCH_HEAD") || exit
 case "$rebase" in
 true)
index 170186f4946859e04d6a0b4ce248dd17bc877b31..9ebbab798d21147fc019b6183cad0c462c9dafca 100755 (executable)
@@ -839,10 +839,11 @@ cmd_sync()
                if test -e "$path"/.git
                then
                (
+                       say "Synchronizing submodule url for '$name'"
+                       git config submodule."$name".url "$url"
                        clear_local_git_env
                        cd "$path"
                        remote=$(get_default_remote)
-                       say "Synchronizing submodule url for '$name'"
                        git config remote."$remote".url "$url"
                )
                fi
diff --git a/git.c b/git.c
index f37028b3b722e6203ae8dac1ccf40a94421597d2..b83c1d17ab803ae0fa1d6c0dece43f2c0334f23d 100644 (file)
--- a/git.c
+++ b/git.c
@@ -336,7 +336,7 @@ static void handle_internal_command(int argc, const char **argv)
                { "index-pack", cmd_index_pack },
                { "init", cmd_init_db },
                { "init-db", cmd_init_db },
-               { "log", cmd_log, RUN_SETUP | USE_PAGER },
+               { "log", cmd_log, RUN_SETUP },
                { "ls-files", cmd_ls_files, RUN_SETUP },
                { "ls-tree", cmd_ls_tree, RUN_SETUP },
                { "ls-remote", cmd_ls_remote },
@@ -380,7 +380,7 @@ static void handle_internal_command(int argc, const char **argv)
                { "send-pack", cmd_send_pack, RUN_SETUP },
                { "shortlog", cmd_shortlog, USE_PAGER },
                { "show-branch", cmd_show_branch, RUN_SETUP },
-               { "show", cmd_show, RUN_SETUP | USE_PAGER },
+               { "show", cmd_show, RUN_SETUP },
                { "status", cmd_status, RUN_SETUP | NEED_WORK_TREE },
                { "stripspace", cmd_stripspace },
                { "symbolic-ref", cmd_symbolic_ref, RUN_SETUP },
@@ -395,7 +395,7 @@ static void handle_internal_command(int argc, const char **argv)
                { "var", cmd_var },
                { "verify-tag", cmd_verify_tag, RUN_SETUP },
                { "version", cmd_version },
-               { "whatchanged", cmd_whatchanged, RUN_SETUP | USE_PAGER },
+               { "whatchanged", cmd_whatchanged, RUN_SETUP },
                { "write-tree", cmd_write_tree, RUN_SETUP },
                { "verify-pack", cmd_verify_pack },
                { "show-ref", cmd_show_ref, RUN_SETUP },
index 0e19be8d216aa813221c8663d6424f96f80bfb14..d4811987965e5a5036b7ed71e32d93578579073a 100644 (file)
@@ -95,7 +95,7 @@ You can specify the following configuration variables when building GIT:
    in the browser's URL bar and next to site name in bookmarks).  Relative
    to base URI of gitweb.  [Default: static/git-favicon.png]
  * GITWEB_JS
-   Points to the localtion where you put gitweb.js on your web server
+   Points to the location where you put gitweb.js on your web server
    (or to be more generic URI of JavaScript code used by gitweb).
    Relative to base URI of gitweb.  [Default: static/gitweb.js (or
    static/gitweb.min.js if JSMIN build variable is defined / JavaScript
@@ -233,7 +233,7 @@ not include variables usually directly set during build):
    is false.
  * $maxload
    Used to set the maximum load that we will still respond to gitweb queries.
-   If server load exceed this value then return "503 Service Unavaliable" error.
+   If server load exceed this value then return "503 Service Unavailable" error.
    Server load is taken to be 0 if gitweb cannot determine its value.  Set it to
    undefined value to turn it off.  The default is 300.
 
index 6deec87e5d26b963902f80049ca0e34f76daa0bc..84261bba34dcdf436bb3b87ab88c67353ea4f4dd 100755 (executable)
@@ -245,7 +245,7 @@ our %feature = (
        # return value of feature-sub indicates if to enable specified feature
        #
        # if there is no 'sub' key (no feature-sub), then feature cannot be
-       # overriden
+       # overridden
        #
        # use gitweb_get_feature(<feature>) to retrieve the <feature> value
        # (an array) or gitweb_check_feature(<feature>) to check if <feature>
@@ -1323,7 +1323,7 @@ sub esc_param {
        return $str;
 }
 
-# quote unsafe chars in whole URL, so some charactrs cannot be quoted
+# quote unsafe chars in whole URL, so some characters cannot be quoted
 sub esc_url {
        my $str = shift;
        return undef unless defined $str;
@@ -3782,9 +3782,9 @@ sub git_print_authorship {
 }
 
 # Outputs table rows containing the full author or committer information,
-# in the format expected for 'commit' view (& similia).
+# in the format expected for 'commit' view (& similar).
 # Parameters are a commit hash reference, followed by the list of people
-# to output information for. If the list is empty it defalts to both
+# to output information for. If the list is empty it defaults to both
 # author and committer.
 sub git_print_authorship_rows {
        my $co = shift;
@@ -4513,8 +4513,8 @@ sub git_patchset_body {
                print "</div>\n"; # class="patch"
        }
 
-       # for compact combined (--cc) format, with chunk and patch simpliciaction
-       # patchset might be empty, but there might be unprocessed raw lines
+       # for compact combined (--cc) format, with chunk and patch simplification
+       # the patchset might be empty, but there might be unprocessed raw lines
        for (++$patch_idx if $patch_number > 0;
             $patch_idx < @$difftree;
             ++$patch_idx) {
diff --git a/graph.c b/graph.c
index ac7c60540645761d3c99fb405a69cb2d06aaddc2..85ab150787bfcdd593ad13e7c00396a1c96c134d 100644 (file)
--- a/graph.c
+++ b/graph.c
@@ -439,7 +439,7 @@ static void graph_update_width(struct git_graph *graph,
                max_cols++;
 
        /*
-        * We added a column for the the current commit as part of
+        * We added a column for the current commit as part of
         * graph->num_parents.  If the current commit was already in
         * graph->columns, then we have double counted it.
         */
index 395fb9527a3bc6dd8ca648233911a1c35604440d..9d0cb9a114cb3e5b0a4a4a132b9289ef18d8ae21 100644 (file)
@@ -77,7 +77,7 @@ static int verify_packfile(struct packed_git *p,
                err = error("%s SHA1 checksum mismatch",
                            p->pack_name);
        if (hashcmp(index_base + index_size - 40, pack_sig))
-               err = error("%s SHA1 does not match its inddex",
+               err = error("%s SHA1 does not match its index",
                            p->pack_name);
        unuse_pack(w_curs);
 
index 7435cdbf1d94378cf1c3408ae17cb610165a00ba..d982f0f1bf181f00f54861eb768504007490e95d 100644 (file)
@@ -69,7 +69,7 @@ typedef int parse_opt_cb(const struct option *, const char *arg, int unset);
  * `flags`::
  *   mask of parse_opt_option_flags.
  *   PARSE_OPT_OPTARG: says that the argument is optional (not for BOOLEANs)
- *   PARSE_OPT_NOARG: says that this option takes no argument
+ *   PARSE_OPT_NOARG: says that this option does not take an argument
  *   PARSE_OPT_NONEG: says that this option cannot be negated
  *   PARSE_OPT_HIDDEN: this option is skipped in the default usage, and
  *                     shown only in the full usage.
index 53bd7fcc4abbf6cb7db73b43d5dde477f5115f90..de38c7f7aab16a0c2766ef020a3fc03fadece555 100755 (executable)
@@ -48,11 +48,11 @@ test_expect_success 'attribute test' '
        attr_check a/b/g a/b/g &&
        attr_check b/g unspecified &&
        attr_check a/b/h a/b/h &&
-       attr_check a/b/d/g "a/b/d/*"
-       attr_check onoff unset
-       attr_check offon set
-       attr_check no unspecified
-       attr_check a/b/d/no "a/b/d/*"
+       attr_check a/b/d/g "a/b/d/*" &&
+       attr_check onoff unset &&
+       attr_check offon set &&
+       attr_check no unspecified &&
+       attr_check a/b/d/no "a/b/d/*" &&
        attr_check a/b/d/yes unspecified
 
 '
index 361a10aeb17108049bf0e47b71153800727edd87..8ab333dbd949fe781b5c13b3deab665544763a88 100755 (executable)
@@ -98,7 +98,7 @@ time_notes () {
        for mode in no-notes notes
        do
                echo $mode
-               /usr/bin/time sh ../time_notes $mode $1
+               /usr/bin/time "$SHELL_PATH" ../time_notes $mode $1
        done
 }
 
index 319e389ed0dbb9c920d8d619cdf94ab52145e9f4..0b489f5b1227268c050c1256d105d57d871f5698 100755 (executable)
@@ -4,6 +4,11 @@ test_description='pulling into void'
 
 . ./test-lib.sh
 
+modify () {
+       sed -e "$1" <"$2" >"$2.x" &&
+       mv "$2.x" "$2"
+}
+
 D=`pwd`
 
 test_expect_success setup '
@@ -160,4 +165,61 @@ test_expect_success 'pull --rebase works on branch yet to be born' '
        test_cmp expect actual
 '
 
+test_expect_success 'setup for detecting upstreamed changes' '
+       mkdir src &&
+       (cd src &&
+        git init &&
+        printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" > stuff &&
+        git add stuff &&
+        git commit -m "Initial revision"
+       ) &&
+       git clone src dst &&
+       (cd src &&
+        modify s/5/43/ stuff &&
+        git commit -a -m "5->43" &&
+        modify s/6/42/ stuff &&
+        git commit -a -m "Make it bigger"
+       ) &&
+       (cd dst &&
+        modify s/5/43/ stuff &&
+        git commit -a -m "Independent discovery of 5->43"
+       )
+'
+
+test_expect_success 'git pull --rebase detects upstreamed changes' '
+       (cd dst &&
+        git pull --rebase &&
+        test -z "$(git ls-files -u)"
+       )
+'
+
+test_expect_success 'setup for avoiding reapplying old patches' '
+       (cd dst &&
+        test_might_fail git rebase --abort &&
+        git reset --hard origin/master
+       ) &&
+       git clone --bare src src-replace.git &&
+       rm -rf src &&
+       mv src-replace.git src &&
+       (cd dst &&
+        modify s/2/22/ stuff &&
+        git commit -a -m "Change 2" &&
+        modify s/3/33/ stuff &&
+        git commit -a -m "Change 3" &&
+        modify s/4/44/ stuff &&
+        git commit -a -m "Change 4" &&
+        git push &&
+
+        modify s/44/55/ stuff &&
+        git commit --amend -a -m "Modified Change 4"
+       )
+'
+
+test_expect_success 'git pull --rebase does not reapply old patches' '
+       (cd dst &&
+        test_must_fail git pull --rebase &&
+        test 1 = $(find .git/rebase-apply -name "000*" | wc -l)
+       )
+'
+
 test_done
diff --git a/t/t5525-fetch-tagopt.sh b/t/t5525-fetch-tagopt.sh
new file mode 100755 (executable)
index 0000000..4fbf7a1
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+test_description='tagopt variable affects "git fetch" and is overridden by commandline.'
+
+. ./test-lib.sh
+
+setup_clone () {
+       git clone --mirror . $1 &&
+       git remote add remote_$1 $1 &&
+       (cd $1 &&
+       git tag tag_$1)
+}
+
+test_expect_success setup '
+       test_commit test &&
+       setup_clone one &&
+       git config remote.remote_one.tagopt --no-tags &&
+       setup_clone two &&
+       git config remote.remote_two.tagopt --tags
+       '
+
+test_expect_success "fetch with tagopt=--no-tags does not get tag" '
+       git fetch remote_one &&
+       test_must_fail git show-ref tag_one
+       '
+
+test_expect_success "fetch --tags with tagopt=--no-tags gets tag" '
+       git fetch --tags remote_one &&
+       git show-ref tag_one
+       '
+
+test_expect_success "fetch --no-tags with tagopt=--tags does not get tag" '
+       git fetch --no-tags remote_two &&
+       test_must_fail git show-ref tag_two
+       '
+
+test_expect_success "fetch with tagopt=--tags gets tag" '
+       git fetch remote_two &&
+       git show-ref tag_two
+       '
+test_done
index bade2179b1f7f6be44ba3266eae147634b60987f..02522f9627eea8166b2d4709ef3519b23c8dd3d5 100755 (executable)
@@ -58,6 +58,9 @@ test_expect_success '"git submodule sync" should update submodule URLs' '
        (cd super-clone/submodule &&
         git checkout master &&
         git pull
+       ) &&
+       (cd super-clone &&
+        test -d "$(git config submodule.submodule.url)"
        )
 '
 
index 42110a465f9a8c91d1bc643dfae7a9b9c32e3719..f78361a676be002a36bed0f243217c4e0ae9c8d1 100644 (file)
@@ -28,7 +28,10 @@ static inline int tree_entry_len(const char *name, const unsigned char *sha1)
 void update_tree_entry(struct tree_desc *);
 void init_tree_desc(struct tree_desc *desc, const void *buf, unsigned long size);
 
-/* Helper function that does both of the above and returns true for success */
+/*
+ * Helper function that does both tree_entry_extract() and update_tree_entry()
+ * and returns true for success
+ */
 int tree_entry(struct tree_desc *, struct name_entry *);
 
 void *fill_tree_descriptor(struct tree_desc *desc, const unsigned char *sha1);