git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 0/6] transport: catch non-fast forwards

From
Tay Ray Chuan <rctay89@gmail.com>
Date
Dec 24, 2009, 07:40 UTC
Message-ID
<20091224154005.a642c8ec.rctay89@gmail.com>
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

Previous: Tay Ray ChuanNext: Tay Ray Chuan
Message 9 of 25 in “refactor ref status logic for pushing”
  1. 1/3 refactor ref status logic for pushingTay Ray Chuan, Dec 4, 2009
  2. 0/3 transport: catch non-fast-forwardsTay Ray Chuan, Dec 8, 2009
  3. 1/3 refactor ref status logic for pushingTay Ray Chuan, Dec 8, 2009
  4. Daniel BarkalowDec 8, 2009
  5. Tay Ray ChuanDec 9, 2009
  6. Daniel BarkalowDec 9, 2009
  7. 2/3 transport.c::transport_push(): make ref status affect return valueTay Ray Chuan, Dec 8, 2009
  8. 3/3 transport-helper.c::push_refs(): emit "no refs" error messageTay Ray Chuan, Dec 8, 2009
  9. 0/6 transport: catch non-fast forwardsTay Ray Chuan, Dec 24, 2009
  10. 1/6 t5541-http-push.sh: add tests for non-fast-forward pushesTay Ray Chuan, Dec 24, 2009
  11. 2/6 t5541-http-push.sh: add test for unmatched, non-fast-forwarded refsTay Ray Chuan, Dec 24, 2009
  12. 3/6 refactor ref status logic for pushingTay Ray Chuan, Dec 24, 2009
  13. 4/6 transport.c::transport_push(): make ref status affect return valueTay Ray Chuan, Dec 24, 2009
  14. 5/6 transport-helper.c::push_refs(): ignore helper-reported status if ref is not to be pushedTay Ray Chuan, Dec 24, 2009
  15. 6/6 transport-helper.c::push_refs(): emit "no refs" error messageTay Ray Chuan, Dec 24, 2009
  16. Jeff KingJan 5, 2010
  17. Tay Ray ChuanJan 5, 2010
  18. Jeff KingJan 6, 2010
  19. Tay Ray ChuanJan 6, 2010
  20. Tay Ray ChuanJan 8, 2010
  21. Jeff KingJan 5, 2010
  22. Tay Ray ChuanJan 5, 2010
  23. Jeff KingJan 6, 2010
  24. Junio C HamanoJan 6, 2010
  25. Tay Ray ChuanJan 6, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.