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

Re: [PATCH 4/5] Add --remote option to send-pack

From
Daniel Barkalow <barkalow@iabervon.org>
Date
May 3, 2007, 04:04 UTC
Message-ID
<Pine.LNX.4.64.0705022330460.28708@iabervon.org>
In-Reply-To
<7vejm3g0dg.fsf@assigned-by-dhcp.cox.net>
On Sat, 28 Apr 2007, Junio C Hamano wrote:
Show 22 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> > We're not pretending anything; remote has confirmed that the head that the 
> > ref tracks has a particular new value (which we provided), so we should be 
> > able to update the tracking ref to that value. I don't think it's 
> > particularly important that we came by this information in the course of 
> > an exchange that wasn't a fetch.
> >
> 
> We are indeed pretending.  Consider:
> 
>  (1) You push, and push succeeds.
> 
>  (2) Somebody fetches your result, works on it and pushes back;
>      this might happen in post-receive hook.
> 
>  (3) You fetch.  You should see somebody else's commit at the
>      tip, not what you pushed in (1).
> 
> By not fetching but instead of storing what you pushed, you are
> pretending that you re-fetched so fast that you gave no chance
> to anybody to perform (2) quickly enough.

But you did effectively re-fetch instantaneously by doing an operation that atomicly updates the ref and reports success. If you consider the operation that updates tracking refs not to be necessarily "git-fetch" but rather "having a connection that discusses refs", this sequence isn't any different from (1) being a fetch instead of a push; there's always the chance that your interaction with the server is shortly before the ref values you update to being replaced, whether the operation you're doing is getting the remote's value or setting the remote's value.

Even if a post-update hook further changes the ref you push to, it had better not change it to a non-descendant of the value you pushed, since there would be a race with other people fetching your value with the post-update hook is running and seeing history roll back. So, at worst, you could have the situation where, effectively, you *always* miss out on the latest thing, but it's already the case that you would *sometimes* miss out on the latest thing, if the post-update hook is running more slowly than your next fetch.

The fact that the config option is "fetch" isn't really an argument that the way you have to get the knowledge of the value of the ref at the instant you remember locally has to be "git-fetch"; any way of getting knowledge of that value at some instant should suffice.

	-Daniel
*This .sig left intentionally blank*
Previous: Junio C HamanoNext: Junio C Hamano
Message 6 of 15 in “Add --remote option to send-pack”
  1. 4/5 Add --remote option to send-packDaniel Barkalow, Apr 28, 2007
  2. Junio C HamanoApr 29, 2007
  3. Daniel BarkalowApr 29, 2007
  4. Shawn O. PearceApr 29, 2007
  5. Junio C HamanoApr 29, 2007
  6. Daniel BarkalowMay 3, 2007
  7. Junio C HamanoMay 3, 2007
  8. Daniel BarkalowMay 3, 2007
  9. Junio C HamanoMay 3, 2007
  10. Daniel BarkalowMay 5, 2007
  11. Junio C HamanoMay 5, 2007
  12. Daniel BarkalowMay 5, 2007
  13. Junio C HamanoMay 5, 2007
  14. Daniel BarkalowMay 5, 2007
  15. Loeliger Jon-LOELIGERMay 7, 2007

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.