From 7e9116b1d8adef635ae900af7eff4b320390eeb3 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 12 May 2007 12:35:29 +0200 Subject: [PATCH 1/5] Fix an unmatched comment end in arm/sha1_arm.S Signed-off-by: Marco Costalba Acked-by: Nicolas Pitre Signed-off-by: Junio C Hamano --- arm/sha1_arm.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arm/sha1_arm.S b/arm/sha1_arm.S index da92d20e84..a328b73375 100644 --- a/arm/sha1_arm.S +++ b/arm/sha1_arm.S @@ -23,7 +23,7 @@ sha_transform: stmfd sp!, {r4 - r8, lr} @ for (i = 0; i < 16; i++) - @ W[i] = ntohl(((uint32_t *)data)[i]); */ + @ W[i] = ntohl(((uint32_t *)data)[i]); #ifdef __ARMEB__ mov r4, r0 From a6e3768f641c2703266422aa05c05f1d01e886b2 Mon Sep 17 00:00:00 2001 From: Steffen Prohaska Date: Sat, 12 May 2007 13:32:34 +0200 Subject: [PATCH 2/5] tiny fix in documentation of git-clone path in example was missing '../' Signed-off-by: Steffen Prohaska Signed-off-by: Junio C Hamano --- Documentation/git-clone.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt index 6d32c491a5..644bf126fb 100644 --- a/Documentation/git-clone.txt +++ b/Documentation/git-clone.txt @@ -132,7 +132,7 @@ Make a local clone that borrows from the current directory, without checking thi + ------------ $ git clone -l -s -n . ../copy -$ cd copy +$ cd ../copy $ git show-branch ------------ From 96f12b54f7b2067d668a1ea578a1fc3773e31148 Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Fri, 11 May 2007 22:35:22 +0200 Subject: [PATCH 3/5] Allow fetching references from any namespace not only from the three defined: heads, tags and remotes. Noticed when I tried to fetch the references created by git-p4-import.bat: they are placed into separate namespace (refs/p4import/, to avoid showing them in git-branch output). As canon_refs_list_for_fetch always prepended refs/heads/ it was impossible, and annoying: it worked before. Normally, the p4import references are useless anywhere but in the directory managed by perforce, but in this special case the cloned directory was supposed to be a backup, including the p4import branch: it keeps information about where the imported perforce state came from. Signed-off-by: Alex Riesen Signed-off-by: Junio C Hamano --- git-parse-remote.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git-parse-remote.sh b/git-parse-remote.sh index 437b0c3b1b..0506b12cb2 100755 --- a/git-parse-remote.sh +++ b/git-parse-remote.sh @@ -143,13 +143,13 @@ canon_refs_list_for_fetch () { fi case "$remote" in '' | HEAD ) remote=HEAD ;; - refs/heads/* | refs/tags/* | refs/remotes/*) ;; + refs/*) ;; heads/* | tags/* | remotes/* ) remote="refs/$remote" ;; *) remote="refs/heads/$remote" ;; esac case "$local" in '') local= ;; - refs/heads/* | refs/tags/* | refs/remotes/*) ;; + refs/*) ;; heads/* | tags/* | remotes/* ) local="refs/$local" ;; *) local="refs/heads/$local" ;; esac From cbb84e5d174cf33fd4dcf3136de50a886ff9a2e2 Mon Sep 17 00:00:00 2001 From: Jan Hudec Date: Sat, 12 May 2007 19:11:13 +0200 Subject: [PATCH 4/5] Updated documentation of hooks in git-receive-pack. Added documentation of pre-receive and post-receive hooks and updated documentation of update and post-update hooks. [jc: with minor copy-editing] Signed-off-by: Jan Hudec Signed-off-by: Junio C Hamano --- Documentation/hooks.txt | 77 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/Documentation/hooks.txt b/Documentation/hooks.txt index b083290d12..80ba6709ad 100644 --- a/Documentation/hooks.txt +++ b/Documentation/hooks.txt @@ -90,6 +90,35 @@ parameter, and is invoked after a commit is made. This hook is meant primarily for notification, and cannot affect the outcome of `git-commit`. +[[pre-receive]] +pre-receive +----------- + +This hook is invoked by `git-receive-pack` on the remote repository, +which happens when a `git push` is done on a local repository. +Just before starting to update refs on the remote repository, the +pre-receive hook is invoked. Its exit status determines the success +or failure of the update. + +This hook executes once for the receive operation. It takes no +arguments, but for each ref to be updated it receives on standard +input a line of the format: + + SP SP LF + +where `` is the old object name stored in the ref, +`` is the new object name to be stored in the ref and +`` is the full name of the ref. +When creating a new ref, `` is 40 `0`. + +If the hook exits with non-zero status, none of the refs will be +updated. If the hook exits with zero, updating of individual refs can +still be prevented by the <> hook. + +If you want to report something to the `git-send-pack` on the other end, +you can simply `echo` your messages. + +[[update]] update ------ @@ -108,7 +137,7 @@ three parameters: A zero exit from the update hook allows the ref to be updated. Exiting with a non-zero status prevents `git-receive-pack` -from updating the ref. +from updating that ref. This hook can be used to prevent 'forced' update on certain refs by making sure that the object name is a commit object that is a @@ -117,7 +146,8 @@ That is, to enforce a "fast forward only" policy. It could also be used to log the old..new status. However, it does not know the entire set of branches, so it would end up -firing one e-mail per ref when used naively, though. +firing one e-mail per ref when used naively, though. The +<> hook is more suited to that. Another use suggested on the mailing list is to use this hook to implement access control which is finer grained than the one @@ -127,9 +157,38 @@ The standard output of this hook is sent to `stderr`, so if you want to report something to the `git-send-pack` on the other end, you can simply `echo` your messages. -The default 'update' hook, when enabled, demonstrates how to -send out a notification e-mail. +The default 'update' hook, when enabled--and with +`hooks.allowunannotated` config option turned on--prevents +unannotated tags to be pushed. + +[[post-receive]] +post-receive +------------ +This hook is invoked by `git-receive-pack` on the remote repository, +which happens when a `git push` is done on a local repository. +It executes on the remote repository once after all the refs have +been updated. + +This hook executes once for the receive operation. It takes no +arguments, but gets the same information as the `pre-receive` +hook does on its standard input. + +This hook does not affect the outcome of `git-receive-pack`, as it +is called after the real work is done. + +This supersedes the [[post-update]] hook in that it actually get's +both old and new values of all the refs. + +If you want to report something to the `git-send-pack` on the +other end, you can simply `echo` your messages. + +The default 'post-receive' hook is empty, but there is +a sample script `post-receive-email` provided in the `contrib/hooks` +directory in git distribution, which implements sending commit +emails. + +[[post-update]] post-update ----------- @@ -148,12 +207,16 @@ The 'post-update' hook can tell what are the heads that were pushed, but it does not know what their original and updated values are, so it is a poor place to do log old..new. +In general, `post-receive` hook is preferred when the hook needs +to decide its acion on the status of the entire set of refs +being updated, as this hook is called once per ref, with +information only on a single ref at a time. + When enabled, the default 'post-update' hook runs `git-update-server-info` to keep the information used by dumb transports (e.g., HTTP) up-to-date. If you are publishing a git repository that is accessible via HTTP, you should probably enable this hook. -The standard output of this hook is sent to `/dev/null`; if you -want to report something to the `git-send-pack` on the other end, -you can redirect your output to your `stderr`. +Both standard output and standard error output are forwarded to +`git-send-pack` on the other end. From fdc99cbbdcdcf4ee2c336f02b7b2dbcb11696392 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 29 Mar 2007 01:02:50 -0700 Subject: [PATCH 5/5] checkout: allow detaching to HEAD even when switching to the tip of a branch You cannot currently checkout the tip of an existing branch without moving to the branch. This allows you to detach your HEAD and place it at such a commit, with: $ git checkout master^0 Signed-off-by: Junio C Hamano --- git-checkout.sh | 4 ++-- t/t7201-co.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/git-checkout.sh b/git-checkout.sh index a7390e808c..deb0a9a3c7 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -170,7 +170,7 @@ describe_detached_head () { } } -if test -z "$branch$newbranch" && test "$new" != "$old" +if test -z "$branch$newbranch" && test "$new_name" != "$old_name" then detached="$new" if test -n "$oldbranch" && test -z "$quiet" @@ -180,7 +180,7 @@ If you want to create a new branch from this checkout, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b " fi -elif test -z "$oldbranch" +elif test -z "$oldbranch" && test "$new" != "$old" then describe_detached_head 'Previous HEAD position was' "$old" fi diff --git a/t/t7201-co.sh b/t/t7201-co.sh index 867bbd26cb..5fa6a45577 100755 --- a/t/t7201-co.sh +++ b/t/t7201-co.sh @@ -3,7 +3,20 @@ # Copyright (c) 2006 Junio C Hamano # -test_description='git-checkout tests.' +test_description='git-checkout tests. + +Creates master, forks renamer and side branches from it. +Test switching across them. + + ! [master] Initial A one, A two + * [renamer] Renamer R one->uno, M two + ! [side] Side M one, D two, A three + --- + + [side] Side M one, D two, A three + * [renamer] Renamer R one->uno, M two + +*+ [master] Initial A one, A two + +' . ./test-lib.sh @@ -129,4 +142,52 @@ test_expect_success 'checkout -m with merge conflict' ' ! test -s current ' +test_expect_success 'checkout to detach HEAD' ' + + git checkout -f renamer && git clean && + git checkout renamer^ && + H=$(git rev-parse --verify HEAD) && + M=$(git show-ref -s --verify refs/heads/master) && + test "z$H" = "z$M" && + if git symbolic-ref HEAD >/dev/null 2>&1 + then + echo "OOPS, HEAD is still symbolic???" + false + else + : happy + fi +' + +test_expect_success 'checkout to detach HEAD with branchname^' ' + + git checkout -f master && git clean && + git checkout renamer^ && + H=$(git rev-parse --verify HEAD) && + M=$(git show-ref -s --verify refs/heads/master) && + test "z$H" = "z$M" && + if git symbolic-ref HEAD >/dev/null 2>&1 + then + echo "OOPS, HEAD is still symbolic???" + false + else + : happy + fi +' + +test_expect_success 'checkout to detach HEAD with HEAD^0' ' + + git checkout -f master && git clean && + git checkout HEAD^0 && + H=$(git rev-parse --verify HEAD) && + M=$(git show-ref -s --verify refs/heads/master) && + test "z$H" = "z$M" && + if git symbolic-ref HEAD >/dev/null 2>&1 + then + echo "OOPS, HEAD is still symbolic???" + false + else + : happy + fi +' + test_done