Skip to content
  • Jeff King's avatar
    remote.c: provide per-branch pushremote name · da66b274
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    When remote.c loads its config, it records the
    branch.*.pushremote for the current branch along with the
    global remote.pushDefault value, and then binds them into a
    single value: the default push for the current branch. We
    then pass this value (which may be NULL) to remote_get_1
    when looking up a remote for push.
    
    This has a few downsides:
    
      1. It's confusing. The early-binding of the "current
         value" led to bugs like the one fixed by 98b406f3
    
    
         (remote: handle pushremote config in any order,
         2014-02-24). And the fact that pushremotes fall back to
         ordinary remotes is not explicit at all; it happens
         because remote_get_1 cannot tell the difference between
         "we are not asking for the push remote" and "there is
         no push remote configured".
    
      2. It throws away intermediate data. After read_config()
         finishes, we have no idea what the value of
         remote.pushDefault was, because the string has been
         overwritten by the current branch's
         branch.*.pushremote.
    
      3. It doesn't record other data. We don't note the
         branch.*.pushremote value for anything but the current
         branch.
    
    Let's make this more like the fetch-remote config. We'll
    record the pushremote for each branch, and then explicitly
    compute the correct remote for the current branch at the
    time of reading.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    da66b274