Sync with 1.6.5.6
authorJunio C Hamano <gitster@pobox.com>
Fri, 11 Dec 2009 00:20:59 +0000 (16:20 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 11 Dec 2009 00:20:59 +0000 (16:20 -0800)
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/RelNotes-1.6.5.6.txt [new file with mode: 0644]
Documentation/git-upload-pack.txt
Documentation/git.txt
Documentation/githooks.txt
builtin-archive.c
t/t5501-post-upload-pack.sh [deleted file]
upload-pack.c
diff --git a/Documentation/RelNotes-1.6.5.6.txt b/Documentation/RelNotes-1.6.5.6.txt
new file mode 100644 (file)
index 0000000..a9eaf76
--- /dev/null
@@ -0,0 +1,23 @@
+Git v1.6.5.6 Release Notes
+==========================
+
+Fixes since v1.6.5.5
+--------------------
+
+ * "git add -p" had a regression since v1.6.5.3 that broke deletion of
+   non-empty files.
+
+ * "git archive -o o.zip -- Makefile" produced an archive in o.zip
+   but in POSIX tar format.
+
+ * Error message given to "git pull --rebase" when the user didn't give
+   enough clue as to what branch to integrate with still talked about
+   "merging with" the branch.
+
+ * Error messages given by "git merge" when the merge resulted in a
+   fast-forward still were in plumbing lingo, even though in v1.6.5
+   we reworded messages in other cases.
+
+ * The post-upload-hook run by upload-pack in response to "git fetch" has
+   been removed, due to security concerns (the hook first appeared in
+   1.6.5).
index 63f3b5c7425cd0b76a6931d92872424310f5fbce..b8e49dce4a19a4d7083459468f27c273c1d91fea 100644 (file)
@@ -20,8 +20,6 @@ The UI for the protocol is on the 'git-fetch-pack' side, and the
 program pair is meant to be used to pull updates from a remote
 repository.  For push operations, see 'git-send-pack'.
 
-After finishing the operation successfully, `post-upload-pack`
-hook is called (see linkgit:githooks[5]).
 
 OPTIONS
 -------
index ad6037baa0c69599250120842b06c3d1d5dc9857..3d0cbf63ed29b6549f5deacf52af07d74bc25105 100644 (file)
@@ -43,9 +43,10 @@ unreleased) version of git, that is available from 'master'
 branch of the `git.git` repository.
 Documentation for older releases are available here:
 
-* link:v1.6.5.5/git.html[documentation for release 1.6.5.5]
+* link:v1.6.5.6/git.html[documentation for release 1.6.5.6]
 
 * release notes for
+  link:RelNotes-1.6.5.6.txt[1.6.5.6],
   link:RelNotes-1.6.5.5.txt[1.6.5.5],
   link:RelNotes-1.6.5.4.txt[1.6.5.4],
   link:RelNotes-1.6.5.3.txt[1.6.5.3],
index 4cc3d1387fbdb60a2134a2e399fa46140939fe2f..29eeae77ca8716a9b07362f164104e3afee4f192 100644 (file)
@@ -310,35 +310,6 @@ Both standard output and standard error output are forwarded to
 'git-send-pack' on the other end, so you can simply `echo` messages
 for the user.
 
-post-upload-pack
-----------------
-
-After upload-pack successfully finishes its operation, this hook is called
-for logging purposes.
-
-The hook is passed various pieces of information, one per line, from its
-standard input.  Currently the following items can be fed to the hook, but
-more types of information may be added in the future:
-
-want SHA-1::
-    40-byte hexadecimal object name the client asked to include in the
-    resulting pack.  Can occur one or more times in the input.
-
-have SHA-1::
-    40-byte hexadecimal object name the client asked to exclude from
-    the resulting pack, claiming to have them already.  Can occur zero
-    or more times in the input.
-
-time float::
-    Number of seconds spent for creating the packfile.
-
-size decimal::
-    Size of the resulting packfile in bytes.
-
-kind string:
-    Either "clone" (when the client did not give us any "have", and asked
-    for all our refs with "want"), or "fetch" (otherwise).
-
 pre-auto-gc
 ~~~~~~~~~~~
 
index 12351e9dd5c481fddc8db07c00a211b4620250bd..446d6bff30ed47a5cf308310e3f28c5b30648a2c 100644 (file)
@@ -106,13 +106,17 @@ int cmd_archive(int argc, const char **argv, const char *prefix)
        if (format) {
                sprintf(fmt_opt, "--format=%s", format);
                /*
-                * This is safe because either --format and/or --output must
-                * have been given on the original command line if we get to
-                * this point, and parse_options() must have eaten at least
-                * one argument, i.e. we have enough room to append to argv[].
+                * We have enough room in argv[] to muck it in place,
+                * because either --format and/or --output must have
+                * been given on the original command line if we get
+                * to this point, and parse_options() must have eaten
+                * it, i.e. we can add back one element to the array.
+                * But argv[] may contain "--"; we should make it the
+                * first option.
                 */
-               argv[argc++] = fmt_opt;
-               argv[argc] = NULL;
+               memmove(argv + 2, argv + 1, sizeof(*argv) * argc);
+               argv[1] = fmt_opt;
+               argv[++argc] = NULL;
        }
 
        if (remote)
diff --git a/t/t5501-post-upload-pack.sh b/t/t5501-post-upload-pack.sh
deleted file mode 100755 (executable)
index d89fb51..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-
-test_description='post upload-hook'
-
-. ./test-lib.sh
-
-LOGFILE=".git/post-upload-pack-log"
-
-test_expect_success setup '
-       test_commit A &&
-       test_commit B &&
-       git reset --hard A &&
-       test_commit C &&
-       git branch prev B &&
-       mkdir -p .git/hooks &&
-       {
-               echo "#!$SHELL_PATH" &&
-               echo "cat >post-upload-pack-log"
-       } >".git/hooks/post-upload-pack" &&
-       chmod +x .git/hooks/post-upload-pack
-'
-
-test_expect_success initial '
-       rm -fr sub &&
-       git init sub &&
-       (
-               cd sub &&
-               git fetch --no-tags .. prev
-       ) &&
-       want=$(sed -n "s/^want //p" "$LOGFILE") &&
-       test "$want" = "$(git rev-parse --verify B)" &&
-       ! grep "^have " "$LOGFILE" &&
-       kind=$(sed -n "s/^kind //p" "$LOGFILE") &&
-       test "$kind" = fetch
-'
-
-test_expect_success second '
-       rm -fr sub &&
-       git init sub &&
-       (
-               cd sub &&
-               git fetch --no-tags .. prev:refs/remotes/prev &&
-               git fetch --no-tags .. master
-       ) &&
-       want=$(sed -n "s/^want //p" "$LOGFILE") &&
-       test "$want" = "$(git rev-parse --verify C)" &&
-       have=$(sed -n "s/^have //p" "$LOGFILE") &&
-       test "$have" = "$(git rev-parse --verify B)" &&
-       kind=$(sed -n "s/^kind //p" "$LOGFILE") &&
-       test "$kind" = fetch
-'
-
-test_expect_success all '
-       rm -fr sub &&
-       HERE=$(pwd) &&
-       git init sub &&
-       (
-               cd sub &&
-               git clone "file://$HERE/.git" new
-       ) &&
-       sed -n "s/^want //p" "$LOGFILE" | sort >actual &&
-       git rev-parse A B C | sort >expect &&
-       test_cmp expect actual &&
-       ! grep "^have " "$LOGFILE" &&
-       kind=$(sed -n "s/^kind //p" "$LOGFILE") &&
-       test "$kind" = clone
-'
-
-test_done
index 6bfb500eb4116bc74d6088b5b0621e89453fab3d..df151813f9c12a681dcac85608f5ff2262c12879 100644 (file)
@@ -148,66 +148,8 @@ static int do_rev_list(int fd, void *create_full_pack)
        return 0;
 }
 
-static int feed_msg_to_hook(int fd, const char *fmt, ...)
-{
-       int cnt;
-       char buf[1024];
-       va_list params;
-
-       va_start(params, fmt);
-       cnt = vsprintf(buf, fmt, params);
-       va_end(params);
-       return write_in_full(fd, buf, cnt) != cnt;
-}
-
-static int feed_obj_to_hook(const char *label, struct object_array *oa, int i, int fd)
-{
-       return feed_msg_to_hook(fd, "%s %s\n", label,
-                               sha1_to_hex(oa->objects[i].item->sha1));
-}
-
-static int run_post_upload_pack_hook(size_t total, struct timeval *tv)
-{
-       const char *argv[2];
-       struct child_process proc;
-       int err, i;
-
-       argv[0] = "hooks/post-upload-pack";
-       argv[1] = NULL;
-
-       if (access(argv[0], X_OK) < 0)
-               return 0;
-
-       memset(&proc, 0, sizeof(proc));
-       proc.argv = argv;
-       proc.in = -1;
-       proc.stdout_to_stderr = 1;
-       err = start_command(&proc);
-       if (err)
-               return err;
-       for (i = 0; !err && i < want_obj.nr; i++)
-               err |= feed_obj_to_hook("want", &want_obj, i, proc.in);
-       for (i = 0; !err && i < have_obj.nr; i++)
-               err |= feed_obj_to_hook("have", &have_obj, i, proc.in);
-       if (!err)
-               err |= feed_msg_to_hook(proc.in, "time %ld.%06ld\n",
-                                       (long)tv->tv_sec, (long)tv->tv_usec);
-       if (!err)
-               err |= feed_msg_to_hook(proc.in, "size %ld\n", (long)total);
-       if (!err)
-               err |= feed_msg_to_hook(proc.in, "kind %s\n",
-                                       (nr_our_refs == want_obj.nr && !have_obj.nr)
-                                       ? "clone" : "fetch");
-       if (close(proc.in))
-               err = 1;
-       if (finish_command(&proc))
-               err = 1;
-       return err;
-}
-
 static void create_pack_file(void)
 {
-       struct timeval start_tv, tv;
        struct async rev_list;
        struct child_process pack_objects;
        int create_full_pack = (nr_our_refs == want_obj.nr && !have_obj.nr);
@@ -215,12 +157,10 @@ static void create_pack_file(void)
        char abort_msg[] = "aborting due to possible repository "
                "corruption on the remote side.";
        int buffered = -1;
-       ssize_t sz, total_sz;
+       ssize_t sz;
        const char *argv[10];
        int arg = 0;
 
-       gettimeofday(&start_tv, NULL);
-       total_sz = 0;
        if (shallow_nr) {
                rev_list.proc = do_rev_list;
                rev_list.data = 0;
@@ -346,7 +286,7 @@ static void create_pack_file(void)
                        sz = xread(pack_objects.out, cp,
                                  sizeof(data) - outsz);
                        if (0 < sz)
-                               total_sz += sz;
+                               ;
                        else if (sz == 0) {
                                close(pack_objects.out);
                                pack_objects.out = -1;
@@ -383,16 +323,6 @@ static void create_pack_file(void)
        }
        if (use_sideband)
                packet_flush(1);
-
-       gettimeofday(&tv, NULL);
-       tv.tv_sec -= start_tv.tv_sec;
-       if (tv.tv_usec < start_tv.tv_usec) {
-               tv.tv_sec--;
-               tv.tv_usec += 1000000;
-       }
-       tv.tv_usec -= start_tv.tv_usec;
-       if (run_post_upload_pack_hook(total_sz, &tv))
-               warning("post-upload-hook failed");
        return;
 
  fail: