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

[PATCH v2 0/6] Unconvolutize push.default=simple

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
May 29, 2021, 07:11 UTC
Message-ID
<20210529071115.1908310-1-felipe.contreras@gmail.com>

Tired of jumping through hoops trying to understand what the "simple" mode does, I decided to reorganize it up for good so it's crystal clear.

There are no functional changes.

Basically the simple mode pushes the current branch with the same name on the remote.

Except... when there's no upstream branch configured with the same name.
Now the code and the documentation are clear.

This is basically the same as v1, except I removed a bunch of patches which are now part of a different series. Also, I updated some commit messages with suggestions from Elijah Newren.

The result of this series is in short this function:
static void setup_push_simple(struct remote *remote, struct branch *branch, int triangular)
{
	if (!branch)
		die(_(message_detached_head_die), remote->name);
	if (!triangular) {
		if (!branch->merge_nr || !branch->merge || !branch->remote_name)
			die(_("The current branch %s has no upstream branch.\n"
			    "To push the current branch and set the remote as upstream, use\n"
			    "\n"
			    "    git push --set-upstream %s %s\n"),
			    branch->name,
			    remote->name,
			    branch->name);
		if (branch->merge_nr != 1)
			die(_("The current branch %s has multiple upstream branches, "
			    "refusing to push."), branch->name);
		/* Additional safety */
		if (strcmp(branch->refname, branch->merge[0]->src))
			die_push_simple(branch, remote);
	}
	refspec_appendf(&rs, "%s:%s", branch->refname, branch->refname);
}
Felipe Contreras (6):
  push: hedge code of default=simple
  push: move code to setup_push_simple()
  push: reorganize setup_push_simple()
  push: simplify setup_push_simple()
  push: remove unused code in setup_push_upstream()
  doc: push: explain default=simple correctly
 Documentation/config/push.txt | 13 ++++++------
 builtin/push.c                | 40 ++++++++++++++++++++++++-----------
 2 files changed, 34 insertions(+), 19 deletions(-)
Range-diff against v1:
 1:  2856711eb3 !  1:  f1f42bda32 push: hedge code of default=simple
    @@ Commit message
         `simple` is the most important mode so move the relevant code to its own
         function to make it easier to see what it's doing.
     
    +    Reviewed-by: Elijah Newren <newren@gmail.com>
         Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
     
      ## builtin/push.c ##
 2:  33acb09e82 !  2:  bb6d810011 push: move code to setup_push_simple()
    @@ Commit message
     
         The code is copied exactly as-is; no functional changes.
     
    +    Reviewed-by: Elijah Newren <newren@gmail.com>
         Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
     
      ## builtin/push.c ##
 3:  de1b621b7e !  3:  d66a442fba push: reorganize setup_push_simple()
    @@ Metadata
      ## Commit message ##
         push: reorganize setup_push_simple()
     
    -    Simply move the code around.
    +    Simply move the code around and remove dead code. In particular the
    +    'trivial' conditional is a no-op since that part of the code is the
    +    !trivial leg of the conditional beforehand.
     
         No functional changes.
     
    +    Suggestions-by: Elijah Newren <newren@gmail.com>
         Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
     
      ## builtin/push.c ##
 4:  83efcad143 !  4:  eaae6a826a push: simplify setup_push_simple()
    @@ Metadata
      ## Commit message ##
         push: simplify setup_push_simple()
     
    -    branch->refname can never be different from branch->merge[0]->src.
    +    There's a safety check to make sure branch->refname is not different
    +    from branch->merge[0]->src, otherwise we die().
     
    +    Therefore we always push to branch->refname.
    +
    +    Suggestions-by: Elijah Newren <newren@gmail.com>
         Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
     
      ## builtin/push.c ##
 5:  d7489e9545 =  5:  8d9ae5e552 push: remove unused code in setup_push_upstream()
 6:  e693341403 <  -:  ---------- push: merge current and simple
 7:  830a57c867 <  -:  ---------- push: remove redundant check
 8:  d2dded5998 <  -:  ---------- push: fix Yoda condition
 9:  7528738091 <  -:  ---------- push: remove trivial function
10:  1ae0546df6 <  -:  ---------- push: flip !triangular for centralized
11:  3acd42e385 !  6:  b35bdf14dc doc: push: explain default=simple correctly
    @@ Metadata
      ## Commit message ##
         doc: push: explain default=simple correctly
     
    -    Now that the code has been unconvolutized and it's clear what it's
    +    Now that the code has been simplified and it's clear what it's
         actually doing, update the documentation to reflect that.
     
         Namely; the simple mode only barfs when working on a centralized
-- 
2.32.0.rc0
Next: Felipe Contreras
Message 1 of 59 in “Unconvolutize push.default=simple”
  1. 0/6 Unconvolutize push.default=simpleFelipe Contreras, May 29, 2021
  2. 1/6 push: hedge code of default=simpleFelipe Contreras, May 29, 2021
  3. Junio C HamanoMay 31, 2021
  4. Felipe ContrerasMay 31, 2021
  5. 4/6 push: simplify setup_push_simple()Felipe Contreras, May 29, 2021
  6. Junio C HamanoMay 31, 2021
  7. 2/6 push: move code to setup_push_simple()Felipe Contreras, May 29, 2021
  8. Junio C HamanoMay 31, 2021
  9. Felipe ContrerasMay 31, 2021
  10. 3/6 push: reorganize setup_push_simple()Felipe Contreras, May 29, 2021
  11. Junio C HamanoMay 31, 2021
  12. 6/6 doc: push: explain default=simple correctlyFelipe Contreras, May 29, 2021
  13. Mathias KunterMay 30, 2021
  14. Felipe ContrerasMay 30, 2021
  15. Mathias KunterMay 31, 2021
  16. Felipe ContrerasMay 31, 2021
  17. Mathias KunterMay 31, 2021
  18. Felipe ContrerasMay 31, 2021
  19. Mathias KunterMay 31, 2021
  20. Felipe ContrerasMay 31, 2021
  21. Mathias KunterMay 31, 2021
  22. Junio C HamanoMay 31, 2021
  23. Felipe ContrerasMay 31, 2021
  24. Junio C HamanoJun 1, 2021
  25. Felipe ContrerasJun 1, 2021
  26. Philip OakleyJun 1, 2021
  27. Felipe ContrerasJun 1, 2021
  28. Philip OakleyJun 1, 2021
  29. Felipe ContrerasJun 1, 2021
  30. Junio C HamanoJun 1, 2021
  31. 5/6 push: remove unused code in setup_push_upstream()Felipe Contreras, May 29, 2021
  32. 00/15 push: revamp push.defaultFelipe Contreras, May 29, 2021
  33. 01/15 push: create new get_upstream_ref() helperFelipe Contreras, May 29, 2021
  34. 02/15 push: return immediately in trivial switch caseFelipe Contreras, May 29, 2021
  35. 03/15 push: reorder switch casesFelipe Contreras, May 29, 2021
  36. Junio C HamanoMay 31, 2021
  37. Felipe ContrerasMay 31, 2021
  38. 04/15 push: factor out null branch checkFelipe Contreras, May 29, 2021
  39. 05/15 push: only get the branch when neededFelipe Contreras, May 29, 2021
  40. Junio C HamanoMay 31, 2021
  41. Felipe ContrerasMay 31, 2021
  42. 06/15 push: make setup_push_* return the dstFelipe Contreras, May 29, 2021
  43. 10/15 push: remove redundant checkFelipe Contreras, May 29, 2021
  44. 08/15 push: get rid of all the setup_push_* functionsFelipe Contreras, May 29, 2021
  45. Junio C HamanoMay 31, 2021
  46. 07/15 push: trivial simplificationsFelipe Contreras, May 29, 2021
  47. 09/15 push: factor out the typical caseFelipe Contreras, May 29, 2021
  48. 11/15 push: fix Yoda conditionFelipe Contreras, May 29, 2021
  49. Junio C HamanoMay 31, 2021
  50. 14/15 push: don't get a full remote objectFelipe Contreras, May 29, 2021
  51. 13/15 push: only get triangular when neededFelipe Contreras, May 29, 2021
  52. Junio C HamanoMay 31, 2021
  53. 12/15 push: remove trivial functionFelipe Contreras, May 29, 2021
  54. 15/15 push: rename !triangular to same_remoteFelipe Contreras, May 29, 2021
  55. Junio C HamanoMay 31, 2021
  56. Philip OakleyMay 29, 2021
  57. Felipe ContrerasMay 30, 2021
  58. Ævar Arnfjörð BjarmasonMay 30, 2021
  59. Felipe ContrerasMay 30, 2021

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.