Skip to content

Commit

Permalink
receive-pack: document user-visible quarantine effects
Browse files Browse the repository at this point in the history
Commit 722ff7f (receive-pack: quarantine objects until
pre-receive accepts, 2016-10-03) changed the underlying
details of how we take in objects. This is mostly
transparent to the user, but there are a few things they
might notice. Let's document them.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Apr 17, 2017
1 parent 360244a commit eaeed07
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
28 changes: 28 additions & 0 deletions Documentation/git-receive-pack.txt
Expand Up @@ -114,6 +114,8 @@ will be performed, and the update, post-receive and post-update
hooks will not be invoked either. This can be useful to quickly
bail out if the update is not to be supported.

See the notes on the quarantine environment below.

update Hook
-----------
Before each ref is updated, if $GIT_DIR/hooks/update file exists
Expand Down Expand Up @@ -214,6 +216,32 @@ if the repository is packed and is served via a dumb transport.
exec git update-server-info


Quarantine Environment
----------------------

When `receive-pack` takes in objects, they are placed into a temporary
"quarantine" directory within the `$GIT_DIR/objects` directory and
migrated into the main object store only after the `pre-receive` hook
has completed. If the push fails before then, the temporary directory is
removed entirely.

This has a few user-visible effects and caveats:

1. Pushes which fail due to problems with the incoming pack, missing
objects, or due to the `pre-receive` hook will not leave any
on-disk data. This is usually helpful to prevent repeated failed
pushes from filling up your disk, but can make debugging more
challenging.

2. Any objects created by the `pre-receive` hook will be created in
the quarantine directory (and migrated only if it succeeds).

3. The `pre-receive` hook MUST NOT update any refs to point to
quarantined objects. Other programs accessing the repository will
not be able to see the objects (and if the pre-receive hook fails,
those refs would become corrupted).


SEE ALSO
--------
linkgit:git-send-pack[1], linkgit:gitnamespaces[7]
Expand Down
3 changes: 3 additions & 0 deletions Documentation/githooks.txt
Expand Up @@ -256,6 +256,9 @@ environment variables will not be set. If the client selects
to use push options, but doesn't transmit any, the count variable
will be set to zero, `GIT_PUSH_OPTION_COUNT=0`.

See the section on "Quarantine Environment" in
linkgit:git-receive-pack[1] for some caveats.

[[update]]
update
~~~~~~
Expand Down

0 comments on commit eaeed07

Please sign in to comment.