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
next prev 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).