On 29/05/2021 08:11, Felipe Contreras wrote: > 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. Not your problem, but I do note, as a general point, that we don't explain the different variants of Triangular workflow anywhere [just two mentions in gitrevisions.txt] (e.g. patch flow versus server-side merges, etc.). Philip > > 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@xxxxxxxxx> > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > > ## 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@xxxxxxxxx> > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > > ## 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@xxxxxxxxx> > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > > ## 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@xxxxxxxxx> > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > > ## 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