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

Re: [PATCH 02/12] remote.c: drop "remote" pointer from "struct branch"

From
Jeff King <peff@peff.net>
Date
May 5, 2015, 19:31 UTC
Message-ID
<20150505193105.GE10463@peff.net>
In-Reply-To
<CAPig+cQny16Jei9AtDWVY3ADbPGshFw7CYofD_TnyA+GL58AOg@mail.gmail.com>
On Sat, May 02, 2015 at 11:34:25PM -0400, Eric Sunshine wrote:
Show 15 quoted lines
> > -       if (ret && ret->remote_name) {
> > -               ret->remote = remote_get(ret->remote_name);
> > -               if (ret->merge_nr)
> > -                       set_merge(ret);
> > -       }
> > +       if (ret)
> > +              set_merge(ret);
> 
> When reading the actual patch, I was surprised to see unmentioned
> changes to the reg->merge_nr check. Although the merge_nr
> simplification seems sensible, it appears to be unrelated to the
> stated purpose of the patch, and made the review more difficult since
> it required keeping track of two distinct (yet textually intertwined)
> changes. I wonder if it would make more sense to apply the merge_nr
> simplification as a separate preparatory patch?

I didn't actually mean to change any behavior with respect to ret->merge_nr here (and I don't think I did). What I did was blindly move everything in the conditional after the remote_get into set_merge, so that it happened in the same order (and the remote_get moves into set_merge, because we no longer have the struct element that it was formerly passed down in).

But actually, ret->merge_nr comes from make_branch, and we could continue to respect it regardless of the remote values (i.e., they are both preconditions to setting up the merge data, but it doesn't matter in which order we check them).

One thing I did notice while looking at this is that it seems like we may leak if you call branch_get multiple times. The make_branch() function may sometimes return a brand-new branch and sometimes return a cached version from the "branches" array. In the latter case, we continue to update the "remote" pointer (which is wasteful but at least does not leak because the remotes themselves are part of a cached list). But then we will repeatedly re-allocate the ret->merge array. We probably should make sure it is NULL before trying to fill it in.

I'll see if I can insert a cleanup patch in this part of the series.
-Peff
Previous: Eric SunshineNext: Jeff King
Message 5 of 21 in “implement @{push} shorthand”
  1. 0/12 implement @{push} shorthandJeff King, May 1, 2015
  2. 01/12 remote.c: drop default_remote_name variableJeff King, May 1, 2015
  3. 02/12 remote.c: drop "remote" pointer from "struct branch"Jeff King, May 1, 2015
  4. Eric SunshineMay 3, 2015
  5. Jeff KingMay 5, 2015
  6. Jeff KingMay 7, 2015
  7. 03/12 remote.c: hoist branch.*.remote lookup out of remote_get_1Jeff King, May 1, 2015
  8. 04/12 remote.c: provide per-branch pushremote nameJeff King, May 1, 2015
  9. Eric SunshineMay 3, 2015
  10. Jeff KingMay 5, 2015
  11. Eric SunshineMay 5, 2015
  12. Jeff KingMay 7, 2015
  13. Eric SunshineMay 8, 2015
  14. 05/12 remote.c: introduce branch_get_upstream helperJeff King, May 1, 2015
  15. 06/12 remote.c: report specific errors from branch_get_upstreamJeff King, May 1, 2015
  16. 07/12 remote.c: add branch_get_pushJeff King, May 1, 2015
  17. 08/12 sha1_name: refactor upstream_markJeff King, May 1, 2015
  18. 09/12 sha1_name: refactor interpret_upstream_markJeff King, May 1, 2015
  19. 10/12 sha1_name: implement @{push} shorthandJeff King, May 1, 2015
  20. 11/12 for-each-ref: use skip_prefix instead of starts_withJeff King, May 1, 2015
  21. 12/12 for-each-ref: accept "%(push)" formatJeff King, May 1, 2015

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.