git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Christopher Lindee <christopher.lindee@webpros.com>
Cc: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [PATCH 0/2] Optionally support push options on up-to-date branches
Date: Wed, 13 Mar 2024 15:58:58 -0700	[thread overview]
Message-ID: <xmqqa5n168nh.fsf@gitster.g> (raw)
In-Reply-To: <SA1PR14MB4691B63C740F95D7D8A495628D2B2@SA1PR14MB4691.namprd14.prod.outlook.com> (Christopher Lindee's message of "Tue, 12 Mar 2024 21:55:08 +0000")

Christopher Lindee <christopher.lindee@webpros.com> writes:

> 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.

Yeah, the send-pack/receive-pack were written in the simpler days
back when "pushing the same object again to the ref was an absolute
no-op", and push options that breaks the expectation did not exist.

It makes sense to allow a (seemingly no-op) push to go through with
an option.

And even without custom push option, recording this seemingly no-op
push as a ref "update" does make sense--push certificate records
what object the pusher wanted each target ref to have, and omitting
a ref from the record only because the ref was already pointing at
the desired object is losing information.

So I doubly agree with the reasoning beind this change.

> 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

"where" -> "even if"

> 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.

And it makes sense *not* to update `--force` to do the no-op push,
becaues you may not want to (accidentally) force push a ref that
does not fast-forward.  As I already said, tying this with use of
the "-o" option is not sufficient.  So I agree we may want a new
option to trigger this behaviour.

A radical counter-proposal for the design is to update the client
side to do this unconditionally, without needing any new option.
For an already up-to-date ref, its only contribution to the cost of
"git push" is from its "Finally, tell the other end!" instruction,
which is in the order of 100 bytes per ref, and it should not add to
the pack generation cost at all [*].

    Side note: But we have to be careful---if the receiving end is
    totally up-to-date and there is absolutely no ref, I think the
    current code will not even call pack_objects(), and you'd
    probably want a similar optimization to avoid the cost to spawn
    pack_objects().

I do not know if "send-up-to-date" is a great name for the option,
though.

>
> 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


  reply	other threads:[~2024-03-13 22:59 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-12 21:55 [PATCH 0/2] Optionally support push options on up-to-date branches Christopher Lindee
2024-03-13 22:58 ` Junio C Hamano [this message]
2024-03-14 22:55   ` brian m. carlson
2024-03-14 23:29     ` Junio C Hamano
2024-03-15  0:04       ` Chris Torek
2024-03-15  0:57         ` brian m. carlson
2024-03-15  0:19       ` Christopher Lindee
2024-03-15 15:42         ` Junio C Hamano
2024-03-15  0:39       ` brian m. carlson
2024-03-15  8:58         ` Christopher Lindee
2024-03-15 20:29           ` brian m. carlson
2024-03-15  0:11     ` Christopher Lindee
2024-03-14 23:08   ` Christopher Lindee

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=xmqqa5n168nh.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=christopher.lindee@webpros.com \
    --cc=git@vger.kernel.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).