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

[PATCH 0/2] Optionally support push options on up-to-date branches

From
CLChristopher Lindee <christopher.lindee@webpros.com>
Date
Mar 12, 2024, 21:55 UTC
Message-ID
<SA1PR14MB4691B63C740F95D7D8A495628D2B2@SA1PR14MB4691.namprd14.prod.outlook.com>

Some Git servers can take actions on a branch using push options; to do this, the branch ref must be passed along with the push options. However, if the branch is up-to-date, then Git submits push options without any refs, so the server is not given a branch to act upon and the push options become no-ops.

This means a user who does the following
    $ git commit
    $ git push -o option remote branch  # Performs option
will have a very different experience from a user who does
    $ git commit
    $ git push remote branch
    $ git push -o option remote branch  # No-op

The latter could easily happen when a user forgets to add an appropriate option on push, but could also happen intentionally when a user wants to back up their changes to a remote and then later chooses to submit those changes with a push option (e.g. one that creates a pull request) to the same remote.

To work around this issue, the user needs to re-write history between the two push commands in some way, either through force pushing a temporary value to the remote or by amending their commit to change the timestamp. Either can impact users who pull from the server, as well as automated systems triggered by a post-receive hook. With these potential side-effects, this workaround can be a bad option in some setups.

This changeset proposes to address this issue by adding an option to `push` and `send-pack` that, when specified, will send refs where the old-oid and new-oid are identical - instead of silently skipping these refs. The first commit introduces the `--send-up-to-date` option to toggle this behavior, while the second commit updates the commands to output an `(up-to-date)` notice for each branch with an identical old-oid and new-oid.

Notably, the `--force` option will not send a ref when the remote is up-to-date.
Chris Lindee (2):
  Teach send-pack & push to --send-up-to-date refs
  Add transport message for up-to-date references
 Documentation/git-push.txt      | 8 +++++++-
 Documentation/git-send-pack.txt | 7 +++++++
 builtin/push.c                  | 1 +
 builtin/send-pack.c             | 4 ++++
 send-pack.c                     | 2 +-
 send-pack.h                     | 3 ++-
 transport-helper.c              | 7 ++++++-
 transport.c                     | 3 +++
 transport.h                     | 1 +
 9 files changed, 32 insertions(+), 4 deletions(-)
        
base-commit: 3c2a3fdc388747b9eaf4a4a4f2035c1c9ddb26d0
-- 
2.38.1
Next: Junio C Hamano
Message 1 of 13 in “Optionally support push options on up-to-date branches”
  1. 0/2 Optionally support push options on up-to-date branchesChristopher Lindee, Mar 12, 2024
  2. Junio C HamanoMar 13, 2024
  3. brian m. carlsonMar 14, 2024
  4. Junio C HamanoMar 14, 2024
  5. Chris TorekMar 15, 2024
  6. brian m. carlsonMar 15, 2024
  7. Christopher LindeeMar 15, 2024
  8. Junio C HamanoMar 15, 2024
  9. brian m. carlsonMar 15, 2024
  10. Christopher LindeeMar 15, 2024
  11. brian m. carlsonMar 15, 2024
  12. Christopher LindeeMar 15, 2024
  13. Christopher LindeeMar 14, 2024

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.