git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tay Ray Chuan <rctay89@gmail.com>
To: git@vger.kernel.org
Cc: "Shawn O. Pearce" <spearce@spearce.org>,
	"Daniel Barkalow" <barkalow@iabervon.org>,
	"Jeff King" <peff@peff.net>, "Junio C Hamano" <gitster@pobox.com>
Subject: [PATCH v3 0/6] transport: catch non-fast forwards
Date: Thu, 24 Dec 2009 15:40:05 +0800	[thread overview]
Message-ID: <20091224154005.a642c8ec.rctay89@gmail.com> (raw)
In-Reply-To: <20091208223413.98e99d3e.rctay89@gmail.com>

Junio, this is re-roll of the 'tr/http-push-ref-status' branch in 'pu'.

Summary:
  This patch series applies on top of 'next', and deals with alerting
  the user to rejected non-fast-forward pushes when using helpers
  (smart).

  Previously, git silently exited. This situation involves the curl
  helper and the smart protocol. The non-fast-forward push is only
  detected when curl executes the rpc client (git-send-pack). Now, we
  detect it before telling the helper to push.

Changes from v2:
 - add tests
 - modify commit messages to mention tests
 - report rejected non-fast-forward pushes for unmatched refs
   (without an explicit refspec) by the remote helper (see patches #2
   and #5).

   This remedies the scenario where a user would not be aware of
   rejected non-fast-forward pushes.

   It occurs when
     1) there are one or more pushes that succeed and
     2) there are one or more rejected non-fast-forward pushes that
	    involve refs that cannot be matched without explicit refspecs.

   This is due to the re-marking of ref status in transport-helper.c::
   push_refs() when interacting with the remote helper.

   If only non-matched, non-fast-forward refs are involved (ie.
   condition #2 is present without #1), then the situtation does not
   occur - no 'push' commands are passed to the remote helper, no
   interaction with the helper takes place, and no re-marking of ref
   status takes place. The user will be alerted to the rejected
   non-fast-forward push.

   If both are present, re-marking occurs. Even if a ref was not part
   of a 'push' command to the helper, 'ok'/'error' status reports might
   be made for it, since the remote helper does ref matching on its
   side. This led to refs that cannot be matched without an explicit
   refspec marked as REF_STATUS_REJECT_NONFASTFORWARD to be re-marked
   REF_STATUS_NONE.

   (Note: helpers fail to match refs as explicit refspecs are always
   available to the top-level transport mechanism, but only on a need-
   to-know basis to the remote helper via a 'push' command when a ref
   is to be pushed.)

   Interestingly, it is possible for a user to be forever unaware of
   the rejected push if the user relies on information from git push
   alone. As long as the user ensures that one or more other pushes are
   successful (eg. change a tracked ref fast-forwardedly) between the
   execution of git push, the rejected non-fast-forward push won't be
   reported.

Tay Ray Chuan (6):
  t5541-http-push.sh: add tests for non-fast-forward pushes
  t5541-http-push.sh: add test for unmatched, non-fast-forwarded refs
  refactor ref status logic for pushing
  transport.c::transport_push(): make ref status affect return value
  transport-helper.c::push_refs(): ignore helper-reported status if ref
    is not to be pushed
  transport-helper.c::push_refs(): emit "no refs" error message

 builtin-send-pack.c  |   50 +++++++++++---------------------------------------
 remote.c             |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 remote.h             |    2 ++
 t/t5541-http-push.sh |   43 +++++++++++++++++++++++++++++++++++++++++++
 transport-helper.c   |   32 ++++++++++++++++++++++----------
 transport.c          |   11 +++++++++--
 6 files changed, 137 insertions(+), 51 deletions(-)

--
Cheers,
Ray Chuan

  parent reply	other threads:[~2009-12-24  7:40 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-04  6:54 [PATCH resend 0/3] transport: catch non-fast-forwards Tay Ray Chuan
2009-12-04  6:56 ` [PATCH resend 1/3] refactor ref status logic for pushing Tay Ray Chuan
2009-12-04  6:57 ` [PATCH resend 2/3] transport-helper.c::push_refs(): know more about refs before pushing Tay Ray Chuan
2009-12-04  6:58 ` [PATCH resend 3/3] transport.c::transport_push(): make ref status affect return value Tay Ray Chuan
2009-12-04 10:20   ` Jeff King
     [not found]     ` <20091204125042.c64f347d.rctay89@gmail.com>
2009-12-04  4:54       ` [PATCH 1/3] refactor ref status logic for pushing Tay Ray Chuan
     [not found]       ` <20091204144822.a61355d2.rctay89@gmail.com>
2009-12-04  7:05         ` [PATCH resend 0/3] transport: catch non-fast-forwards Daniel Barkalow
2009-12-08 14:34       ` [PATCH v2 " Tay Ray Chuan
2009-12-08 14:35         ` [PATCH v2 1/3] refactor ref status logic for pushing Tay Ray Chuan
2009-12-08 17:17           ` Daniel Barkalow
2009-12-09  3:40             ` Tay Ray Chuan
2009-12-09  7:13               ` Daniel Barkalow
2009-12-08 14:36         ` [PATCH v2 2/3] transport.c::transport_push(): make ref status affect return value Tay Ray Chuan
2009-12-08 14:37         ` [PATCH v2 3/3] transport-helper.c::push_refs(): emit "no refs" error message Tay Ray Chuan
2009-12-24  7:40         ` Tay Ray Chuan [this message]
2009-12-24  7:40           ` [PATCH v3 1/6] t5541-http-push.sh: add tests for non-fast-forward pushes Tay Ray Chuan
2009-12-24  7:41           ` [PATCH v3 2/6] t5541-http-push.sh: add test for unmatched, non-fast-forwarded refs Tay Ray Chuan
2010-01-05  6:35             ` Jeff King
2010-01-05 10:01               ` Tay Ray Chuan
2010-01-06 12:05                 ` Jeff King
2010-01-06  1:04             ` Junio C Hamano
2010-01-06  2:12               ` Tay Ray Chuan
2010-01-08  2:12             ` [PATCH v4 " Tay Ray Chuan
2010-01-08  2:12               ` [PATCH v4 3/6] refactor ref status logic for pushing Tay Ray Chuan
2010-01-08  2:12                 ` [PATCH v4 4/6] transport.c::transport_push(): make ref status affect return value Tay Ray Chuan
2009-12-24  7:42           ` [PATCH v3 3/6] refactor ref status logic for pushing Tay Ray Chuan
2009-12-24  7:43           ` [PATCH v3 4/6] transport.c::transport_push(): make ref status affect return value Tay Ray Chuan
2009-12-24  7:44           ` [PATCH v3 5/6] transport-helper.c::push_refs(): ignore helper-reported status if ref is not to be pushed Tay Ray Chuan
2010-01-05  6:32             ` Jeff King
2010-01-05 10:01               ` Tay Ray Chuan
2010-01-06 12:04                 ` Jeff King
2010-01-06 21:41                   ` Tay Ray Chuan
2010-01-08  1:04                     ` Tay Ray Chuan
2010-01-08  2:12             ` [PATCH v4 " Tay Ray Chuan
2010-01-08  2:12               ` [PATCH v4 6/6] transport-helper.c::push_refs(): emit "no refs" error message Tay Ray Chuan
2009-12-24  7:45           ` [PATCH v3 " Tay Ray Chuan
2010-01-08  2:12     ` [PATCH v4 0/6] transport: catch non-fast forwards Tay Ray Chuan
2010-01-08  2:12       ` [PATCH v4 1/6] t5541-http-push.sh: add tests for non-fast-forward pushes Tay Ray Chuan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091224154005.a642c8ec.rctay89@gmail.com \
    --to=rctay89@gmail.com \
    --cc=barkalow@iabervon.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).