From: Junio C Hamano <hidden> Date: 2017-08-07 20:59:32
Kaartic Sivaraam [off-list ref] writes:
I refactored builtin/branch.c to remove the '--set-upstream'
option,successfully. The corresponding patch follows.
There's just one issue with the version of git that doesn't
have the '--set-upstream' option. It's described in the commit
log message of the following patch.
which is...
Note that, 'git branch' still *accepts* '--set-upstream' as a consequence
of "unique prefix can be abbrievated in option names". '--set-upstream'
is a unique prefix of '--set-upstream-to' after '--set-upstream' has
been removed.
... this.
Thanks for spotting the issue.
I think in the longer term we still want to remove --set-upstream as
many people seem to say that its behaviour has been uttering
confusing to them and that is why we keep giving the warning any
time it is used.
I guess it would be difficult to detect the removal of the option in
case it's used in scripts and might cause confusion to users?
If we want to follow through the transition, because of the issue
you spotted, we'd need one extra step to make sure users won't be
hurt before removal: we would need to still recognize --set-upstream
as an option distinct from --set-upstream-to, and actively fail the
request, telling them that the former option no longer is supported.
Then after waiting for a few years, we may be able to re-introduce
the "--set-upstream" option that takes the arguments in the same
order as "--set-upstream-to", which would be the ideal endgame
(assuming that the reason why we started deprecating "--set-upstream"
and encouraged users to use "--set-upstream-to" still holds).
On Mon, 2017-08-07 at 13:59 -0700, Junio C Hamano wrote:
Kaartic Sivaraam [off-list ref] writes:
quoted
I refactored builtin/branch.c to remove the '--set-upstream'
option,successfully. The corresponding patch follows.
There's just one issue with the version of git that doesn't
have the '--set-upstream' option. It's described in the commit
log message of the following patch.
which is...
quoted
Note that, 'git branch' still *accepts* '--set-upstream' as a consequence
of "unique prefix can be abbrievated in option names". '--set-upstream'
is a unique prefix of '--set-upstream-to' after '--set-upstream' has
been removed.
... this.
Thanks for spotting the issue.
Oh, I would have to thank you for enlightening me about,
"unique prefix can be abbrievated in option names"
If I didn't know that, it would taken me some time (or an email) to
find why 'git' accepted '--set-upstream' even after it's removal!
I think in the longer term we still want to remove --set-upstream as
many people seem to say that its behaviour has been uttering
confusing to them and that is why we keep giving the warning any
time it is used.
I do accept that. The behaviour of '--set-upstream' is awkward.
quoted
I guess it would be difficult to detect the removal of the option in
case it's used in scripts and might cause confusion to users?
If we want to follow through the transition, because of the issue
you spotted, we'd need one extra step to make sure users won't be
hurt before removal: we would need to still recognize --set-upstream
as an option distinct from --set-upstream-to, and actively fail thes
request, telling them that the former option no longer is supported.
There's no issue in doing that if people don't shout at us for the
behaviour :)
Just to be sure, you mean "die() with a good message" when you say
"fail these requests, telling them that the former option no longer is
supported."
Then after waiting for a few years, we may be able to re-introduce
the "--set-upstream" option that takes the arguments in the same
order as "--set-upstream-to", which would be the ideal endgame
(assuming that the reason why we started deprecating "--set-upstream"
and encouraged users to use "--set-upstream-to" still holds).
It's pretty surprising it takes almost a decade to *stop accepting* a
bad option though many users are confused by it.
"It's easier to do things than to undo them!"
--
Kaartic
The '--set-upstream' option of branch was deprecated in,
b347d06bf branch: deprecate --set-upstream and show help if we
detect possible mistaken use (Thu, 30 Aug 2012 19:23:13 +0200)
It was deprecated for the reasons specified in the commit message of
the referenced commit.
Refactor 'branch' so that it dies with an appropraite error message
when the '--set-upstream' is used.
Note that there's a reason behind "dying with an error message" instead of
"not accepting the '--set-upstream'". ;git branch' would still *accept*
'--set-upstream' even after it's removal as a consequence of "unique
prefix can be abbrievated in option names" AND '--set-upstream' is a unique
prefix of '--set-upstream-to' when '--set-upstream' has been removed. In
order to smooth the transition for users due to the "prefix issue" it was
decided to make branch die when seeing the '--set-upstream' flag for a few
years and let the users know that it would be removed some time in the future.
The before/after behaviour for a simple case follows,
$ git remote
origin
Before,
$ git branch
* master
$ git branch --set-upstream origin/master
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
Branch origin/master set up to track local branch master.
$ echo $?
0
$ git branch
* master
origin/master
After,
$ git branch
* master
$ git branch --set-upstream origin/master
fatal: the '--set-upstream' flag is no longer supported and will be removed. Consider using '--track' or '--set-upstream-to'
$ echo $?
128
$ git branch
* master
Signed-off-by: Kaartic Sivaraam <redacted>
---
Changes in v2:
The previous patch removed the concerned option while the current patch
makes 'git branch' die on seeing the option.
The possibility of '--set-upstream' becoming an alias of '--set-upstream-to'
was documented.
Documentation/git-branch.txt | 8 +++----
builtin/branch.c | 21 +------------------
t/t3200-branch.sh | 50 ++++----------------------------------------
t/t6040-tracking-info.sh | 16 +++++++-------
4 files changed, 17 insertions(+), 78 deletions(-)
@@ -195,10 +195,10 @@ start-point is either a local or remote-tracking branch. branch.autoSetupMerge configuration variable is true. --set-upstream::- If specified branch does not exist yet or if `--force` has been- given, acts exactly like `--track`. Otherwise sets up configuration- like `--track` would when creating the branch, except that where- branch points to is not changed.+ This option is no longer supported and will be removed in the future.+ Consider using --track or --set-upstream-to instead.+++Note: This could possibly become an alias of --set-upstream-to in the future. -u <upstream>:: --set-upstream-to=<upstream>::
@@ -755,8 +755,6 @@ int cmd_branch(int argc, const char **argv, const char *prefix)strbuf_release(&buf);}elseif(argc>0&&argc<=2){structbranch*branch=branch_get(argv[0]);-intbranch_existed=0,remote_tracking=0;-structstrbufbuf=STRBUF_INIT;if(!strcmp(argv[0],"HEAD"))die(_("it does not make sense to create 'HEAD' manually"));
@@ -768,28 +766,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)die(_("-a and -r options to 'git branch' do not make sense with a branch name"));if(track==BRANCH_TRACK_OVERRIDE)-fprintf(stderr,_("The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to\n"));+die(_("the '--set-upstream' flag is no longer supported and will be removed. Consider using '--track' or '--set-upstream-to'"));-strbuf_addf(&buf,"refs/remotes/%s",branch->name);-remote_tracking=ref_exists(buf.buf);-strbuf_release(&buf);--branch_existed=ref_exists(branch->refname);create_branch(argv[0],(argc==2)?argv[1]:head,force,reflog,0,quiet,track);-/*-*Weonlyshowtheinstructionsiftheusergaveus-*onebranchwhichdoesn'texistlocally,butisthe-*nameofaremote-trackingbranch.-*/-if(argc==1&&track==BRANCH_TRACK_OVERRIDE&&-!branch_existed&&remote_tracking){-fprintf(stderr,_("\nIf you wanted to make '%s' track '%s', do this:\n\n"),head,branch->name);-fprintf(stderr," git branch -d %s\n",branch->name);-fprintf(stderr," git branch --set-upstream-to %s\n",branch->name);-}-}elseusage_with_options(builtin_branch_usage,options);
@@ -561,7 +561,8 @@ test_expect_success 'use --set-upstream-to modify a particular branch' 'gitbranchmy13&&gitbranch--set-upstream-tomastermy13&&test"$(gitconfigbranch.my13.remote)"="."&&-test"$(gitconfigbranch.my13.merge)"="refs/heads/master"+test"$(gitconfigbranch.my13.merge)"="refs/heads/master"&&+gitbranch--unset-upstreammy13' test_expect_success'--unset-upstream should fail if given a non-existent branch''
@@ -605,38 +606,8 @@ test_expect_success 'test --unset-upstream on a particular branch' 'test_must_failgitconfigbranch.my14.merge'-test_expect_success'--set-upstream shows message when creating a new branch that exists as remote-tracking''-gitupdate-refrefs/remotes/origin/masterHEAD&&-gitbranch--set-upstreamorigin/master2>actual&&-test_when_finishedgitupdate-ref-drefs/remotes/origin/master&&-test_when_finishedgitbranch-dorigin/master&&-cat>expected<<EOF&&-The--set-upstreamflagisdeprecatedandwillberemoved.Considerusing--trackor--set-upstream-to--Ifyouwantedtomake'"'master'"'track'"'origin/master'"',dothis:--gitbranch-dorigin/master-gitbranch--set-upstream-toorigin/master-EOF-test_i18ncmpexpectedactual-'--test_expect_success'--set-upstream with two args only shows the deprecation message''-gitbranch--set-upstreammastermy132>actual&&-test_when_finishedgitbranch--unset-upstreammaster&&-cat>expected<<EOF&&-The--set-upstreamflagisdeprecatedandwillberemoved.Considerusing--trackor--set-upstream-to-EOF-test_i18ncmpexpectedactual-'--test_expect_success'--set-upstream with one arg only shows the deprecation message if the branch existed''-gitbranch--set-upstreammy132>actual&&-test_when_finishedgitbranch--unset-upstreammy13&&-cat>expected<<EOF&&-The--set-upstreamflagisdeprecatedandwillberemoved.Considerusing--trackor--set-upstream-to-EOF-test_i18ncmpexpectedactual+test_expect_success'--set-upstream fails''+test_must_failgitbranch--set-upstreamorigin/master' test_expect_success'--set-upstream-to notices an error to set branch as own upstream''
@@ -961,19 +932,6 @@ test_expect_success 'attempt to delete a branch merged to its base' 'test_must_failgitbranch-dmy10'-test_expect_success'use set-upstream on the current branch''-gitcheckoutmaster&&-git--bareinitmyupstream.git&&-gitpushmyupstream.gitmaster:refs/heads/frotz&&-gitremoteaddoriginmyupstream.git&&-gitfetch&&-gitbranch--set-upstreammasterorigin/frotz&&--test"z$(gitconfigbranch.master.remote)"="zorigin"&&-test"z$(gitconfigbranch.master.merge)"="zrefs/heads/frotz"--'- test_expect_success'use --edit-description''write_scripteditor<<-\EOF&&echo"New contents">"$1"
@@ -188,35 +188,35 @@ test_expect_success 'fail to track annotated tags' 'test_must_failgitcheckoutheavytrack'-test_expect_success'setup tracking with branch --set-upstream on existing branch''+test_expect_success'setup tracking with branch --set-upstream-to on existing branch''gitbranchfrom-mastermaster&&test_must_failgitconfigbranch.from-master.merge>actual&&-gitbranch--set-upstreamfrom-mastermaster&&+gitbranch--set-upstream-tomasterfrom-master&&gitconfigbranch.from-master.merge>actual&&grep-q"^refs/heads/master$"actual'-test_expect_success'--set-upstream does not change branch''+test_expect_success'--set-upstream-to does not change branch''gitbranchfrom-master2master&&test_must_failgitconfigbranch.from-master2.merge>actual&&gitrev-listfrom-master2&&gitupdate-refrefs/heads/from-master2from-master2^&&gitrev-parsefrom-master2>expect2&&-gitbranch--set-upstreamfrom-master2master&&+gitbranch--set-upstream-tomasterfrom-master2&&gitconfigbranch.from-master.merge>actual&&gitrev-parsefrom-master2>actual2&&grep-q"^refs/heads/master$"actual&&cmpexpect2actual2'-test_expect_success'--set-upstream @{-1}''-gitcheckoutfrom-master&&+test_expect_success'--set-upstream-to @{-1}''+gitcheckoutfollower&&gitcheckoutfrom-master2&&gitconfigbranch.from-master2.merge>expect2&&-gitbranch--set-upstream@{-1}follower&&+gitbranch--set-upstream-to@{-1}from-master&&gitconfigbranch.from-master.merge>actual&&gitconfigbranch.from-master2.merge>actual2&&-gitbranch--set-upstreamfrom-masterfollower&&+gitbranch--set-upstream-tofollowerfrom-master&&gitconfigbranch.from-master.merge>expect&&test_cmpexpect2actual2&&test_cmpexpectactual
@@ -90,24 +90,24 @@ int install_branch_config(int flag, const char *local, const char *origin, constif(shortname){if(origin)printf_ln(rebasing?-_("Branch %s set up to track remote branch %s from %s by rebasing."):-_("Branch %s set up to track remote branch %s from %s."),+_("Branch '%s' set up to track remote branch '%s' from '%s' by rebasing."):+_("Branch '%s' set up to track remote branch '%s' from '%s'."),local,shortname,origin);elseprintf_ln(rebasing?-_("Branch %s set up to track local branch %s by rebasing."):-_("Branch %s set up to track local branch %s."),+_("Branch '%s' set up to track local branch '%s' by rebasing."):+_("Branch '%s' set up to track local branch '%s'."),local,shortname);}else{if(origin)printf_ln(rebasing?-_("Branch %s set up to track remote ref %s by rebasing."):-_("Branch %s set up to track remote ref %s."),+_("Branch '%s' set up to track remote ref '%s' by rebasing."):+_("Branch '%s' set up to track remote ref '%s'."),local,remote);elseprintf_ln(rebasing?-_("Branch %s set up to track local ref %s by rebasing."):-_("Branch %s set up to track local ref %s."),+_("Branch '%s' set up to track local ref '%s' by rebasing."):+_("Branch '%s' set up to track local ref '%s'."),local,remote);}}
From: Martin Ågren <hidden> Date: 2017-08-08 18:33:31
On 8 August 2017 at 19:11, Kaartic Sivaraam
[off-list ref] wrote:
The '--set-upstream' option of branch was deprecated in,
b347d06bf branch: deprecate --set-upstream and show help if we
detect possible mistaken use (Thu, 30 Aug 2012 19:23:13 +0200)
It was deprecated for the reasons specified in the commit message of
the referenced commit.
Refactor 'branch' so that it dies with an appropraite error message
when the '--set-upstream' is used.
appropriate. (Also, is this really a refactoring?)
quoted hunk
Note that there's a reason behind "dying with an error message" instead of
"not accepting the '--set-upstream'". ;git branch' would still *accept*
'--set-upstream' even after it's removal as a consequence of "unique
prefix can be abbrievated in option names" AND '--set-upstream' is a unique
prefix of '--set-upstream-to' when '--set-upstream' has been removed. In
order to smooth the transition for users due to the "prefix issue" it was
decided to make branch die when seeing the '--set-upstream' flag for a few
years and let the users know that it would be removed some time in the future.
The before/after behaviour for a simple case follows,
$ git remote
origin
Before,
$ git branch
* master
$ git branch --set-upstream origin/master
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
Branch origin/master set up to track local branch master.
$ echo $?
0
$ git branch
* master
origin/master
After,
$ git branch
* master
$ git branch --set-upstream origin/master
fatal: the '--set-upstream' flag is no longer supported and will be removed. Consider using '--track' or '--set-upstream-to'
$ echo $?
128
$ git branch
* master
Signed-off-by: Kaartic Sivaraam <redacted>
---
Changes in v2:
The previous patch removed the concerned option while the current patch
makes 'git branch' die on seeing the option.
The possibility of '--set-upstream' becoming an alias of '--set-upstream-to'
was documented.
Documentation/git-branch.txt | 8 +++----
builtin/branch.c | 21 +------------------
t/t3200-branch.sh | 50 ++++----------------------------------------
t/t6040-tracking-info.sh | 16 +++++++-------
4 files changed, 17 insertions(+), 78 deletions(-)
@@ -195,10 +195,10 @@ start-point is either a local or remote-tracking branch. branch.autoSetupMerge configuration variable is true. --set-upstream::- If specified branch does not exist yet or if `--force` has been- given, acts exactly like `--track`. Otherwise sets up configuration- like `--track` would when creating the branch, except that where- branch points to is not changed.+ This option is no longer supported and will be removed in the future.+ Consider using --track or --set-upstream-to instead.+++Note: This could possibly become an alias of --set-upstream-to in the future.
Maybe the final note could be removed? Someone who is looking up
--set-upstream because Git just "crashed" on them will only want to know
what they should do instead. Our thoughts about the future are perhaps
not that interesting. (I sort of wonder if this option needs to be
documented at all, especially if this doesn't say anything more than
the die() just did.)
Also, I'm wondering if it should be "has been removed" instead of "will
be removed"? /Implementation-wise/, it has not been removed yet, but to
the user, it has. So maybe just "This option has been removed. Consider
using --track or --set-upstream-to instead." The same below.
I don't know if it's worth trying to use PARSE_OPT_HIDDEN in the
options-struct?
Martin
@@ -755,8 +755,6 @@ int cmd_branch(int argc, const char **argv, const char *prefix)strbuf_release(&buf);}elseif(argc>0&&argc<=2){structbranch*branch=branch_get(argv[0]);-intbranch_existed=0,remote_tracking=0;-structstrbufbuf=STRBUF_INIT;if(!strcmp(argv[0],"HEAD"))die(_("it does not make sense to create 'HEAD' manually"));
@@ -768,28 +766,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)die(_("-a and -r options to 'git branch' do not make sense with a branch name"));if(track==BRANCH_TRACK_OVERRIDE)-fprintf(stderr,_("The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to\n"));+die(_("the '--set-upstream' flag is no longer supported and will be removed. Consider using '--track' or '--set-upstream-to'"));-strbuf_addf(&buf,"refs/remotes/%s",branch->name);-remote_tracking=ref_exists(buf.buf);-strbuf_release(&buf);--branch_existed=ref_exists(branch->refname);create_branch(argv[0],(argc==2)?argv[1]:head,force,reflog,0,quiet,track);-/*-*Weonlyshowtheinstructionsiftheusergaveus-*onebranchwhichdoesn'texistlocally,butisthe-*nameofaremote-trackingbranch.-*/-if(argc==1&&track==BRANCH_TRACK_OVERRIDE&&-!branch_existed&&remote_tracking){-fprintf(stderr,_("\nIf you wanted to make '%s' track '%s', do this:\n\n"),head,branch->name);-fprintf(stderr," git branch -d %s\n",branch->name);-fprintf(stderr," git branch --set-upstream-to %s\n",branch->name);-}-}elseusage_with_options(builtin_branch_usage,options);
I like this patch.
In submodule.c we quote a lot of things (branches, submodules, paths), so
this is another step to make the output as a whole more consistent.
(Though wondering for non-submodule users, if they perceive it as
inconsistency as other parts of the code may not follow the rigorous quoting)
@@ -90,24 +90,24 @@ int install_branch_config(int flag, const char *local, const char *origin, constif(shortname){if(origin)printf_ln(rebasing?-_("Branch %s set up to track remote branch %s from %s by rebasing."):-_("Branch %s set up to track remote branch %s from %s."),+_("Branch '%s' set up to track remote branch '%s' from '%s' by rebasing."):+_("Branch '%s' set up to track remote branch '%s' from '%s'."),local,shortname,origin);elseprintf_ln(rebasing?-_("Branch %s set up to track local branch %s by rebasing."):-_("Branch %s set up to track local branch %s."),+_("Branch '%s' set up to track local branch '%s' by rebasing."):+_("Branch '%s' set up to track local branch '%s'."),local,shortname);}else{if(origin)printf_ln(rebasing?-_("Branch %s set up to track remote ref %s by rebasing."):-_("Branch %s set up to track remote ref %s."),+_("Branch '%s' set up to track remote ref '%s' by rebasing."):+_("Branch '%s' set up to track remote ref '%s'."),local,remote);elseprintf_ln(rebasing?-_("Branch %s set up to track local ref %s by rebasing."):-_("Branch %s set up to track local ref %s."),+_("Branch '%s' set up to track local ref '%s' by rebasing."):+_("Branch '%s' set up to track local ref '%s'."),local,remote);}}--
On Wednesday 09 August 2017 12:03 AM, Martin Ågren wrote:
(Also, is this really a refactoring?)
Not quite.
quoted
--set-upstream::
- If specified branch does not exist yet or if `--force` has been
- given, acts exactly like `--track`. Otherwise sets up configuration
- like `--track` would when creating the branch, except that where
- branch points to is not changed.
+ This option is no longer supported and will be removed in the future.
+ Consider using --track or --set-upstream-to instead.
++
+Note: This could possibly become an alias of --set-upstream-to in the future.
Maybe the final note could be removed? Someone who is looking up
--set-upstream because Git just "crashed" on them will only want to know
what they should do instead. Our thoughts about the future are perhaps
not that interesting.
I thought it's better to document it to avoid people from getting surprised
when the options *starts working* again.
(I sort of wonder if this option needs to be
documented at all, especially if this doesn't say anything more than
the die() just did.)
Yeah, it needs improvement.
Also, I'm wondering if it should be "has been removed" instead of "will
be removed"? /Implementation-wise/, it has not been removed yet, but to
the user, it has. So maybe just "This option has been removed. Consider
using --track or --set-upstream-to instead." The same below.
I guess you're right. I thought "no longer supported" was equally
communicative.
The '--set-upstream' option of branch was deprecated in,
b347d06bf branch: deprecate --set-upstream and show help if we
detect possible mistaken use (Thu, 30 Aug 2012 19:23:13 +0200)
It was deprecated for the reasons specified in the commit message of the
referenced commit.
Make 'branch' die with an appropraite error message when the '--set-upstream'
option is used.
Note that there's a reason behind "dying with an error message" instead of
"not accepting the option". 'git branch' would *accept* '--set-upstream'
even after it's removal as a consequence of,
Unique prefix can be abbrievated in option names
AND
'--set-upstream' is a unique prefix of '--set-upstream-to'
(when the '--set-upstream' option has been removed)
In order to smooth the transition for users and to avoid them being affected
by the "prefix issue" it was decided to make branch die when seeing the
'--set-upstream' flag for a few years and let the users know that it would be
removed some time in the future.
The before/after behaviour for a simple case follows,
$ git remote
origin
Before,
$ git branch
* master
$ git branch --set-upstream origin/master
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
Branch origin/master set up to track local branch master.
$ echo $?
0
$ git branch
* master
origin/master
After,
$ git branch
* master
$ git branch --set-upstream origin/master
fatal: the '--set-upstream' flag is no longer supported and will be removed. Consider using '--track' or '--set-upstream-to'
$ echo $?
128
$ git branch
* master
Signed-off-by: Kaartic Sivaraam <redacted>
---
Changes in v3:
A few tweaks to the following:
* Commit message
* Error message (the one shown when '--set-upstream' is seen)
* Updated the corresponding message in the options structure
* Documentation
A query,
I see the following code in the code path a little above the die statement
added in this change,
if (!strcmp(argv[0], "HEAD"))
die(_("it does not make sense to create 'HEAD' manually"));
It does seem to be doing quite a nice job of avoiding an ambiguity that could
have bad consequences but it's still possible to create a branch named 'HEAD'
using the '-b' option of 'checkout'. Should 'git checkout -b HEAD' actually
fail(it does not currently) for the same reason 'git branch HEAD' fails?
My guess is that people would use 'git checkout -b <new_branch_name> <starting_point>'
more than it's 'git branch' counterpart.
Documentation/git-branch.txt | 8 +++----
builtin/branch.c | 23 ++------------------
t/t3200-branch.sh | 50 ++++----------------------------------------
t/t6040-tracking-info.sh | 16 +++++++-------
4 files changed, 18 insertions(+), 79 deletions(-)
@@ -195,10 +195,10 @@ start-point is either a local or remote-tracking branch. branch.autoSetupMerge configuration variable is true. --set-upstream::- If specified branch does not exist yet or if `--force` has been- given, acts exactly like `--track`. Otherwise sets up configuration- like `--track` would when creating the branch, except that where- branch points to is not changed.+ As this option has confusing syntax it's no longer supported. Please use+ --track or --set-upstream-to instead.+++Note: This could possibly become an alias of --set-upstream-to in the future. -u <upstream>:: --set-upstream-to=<upstream>::
@@ -557,7 +557,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)OPT__QUIET(&quiet,N_("suppress informational messages")),OPT_SET_INT('t',"track",&track,N_("set up tracking mode (see git-pull(1))"),BRANCH_TRACK_EXPLICIT),-OPT_SET_INT(0,"set-upstream",&track,N_("change upstream info"),+OPT_SET_INT(0,"set-upstream",&track,N_("no longer supported"),BRANCH_TRACK_OVERRIDE),OPT_STRING('u',"set-upstream-to",&new_upstream,N_("upstream"),N_("change the upstream info")),OPT_BOOL(0,"unset-upstream",&unset_upstream,N_("Unset the upstream info")),
@@ -755,8 +755,6 @@ int cmd_branch(int argc, const char **argv, const char *prefix)strbuf_release(&buf);}elseif(argc>0&&argc<=2){structbranch*branch=branch_get(argv[0]);-intbranch_existed=0,remote_tracking=0;-structstrbufbuf=STRBUF_INIT;if(!strcmp(argv[0],"HEAD"))die(_("it does not make sense to create 'HEAD' manually"));
@@ -768,28 +766,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)die(_("-a and -r options to 'git branch' do not make sense with a branch name"));if(track==BRANCH_TRACK_OVERRIDE)-fprintf(stderr,_("The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to\n"));+die(_("the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead."));-strbuf_addf(&buf,"refs/remotes/%s",branch->name);-remote_tracking=ref_exists(buf.buf);-strbuf_release(&buf);--branch_existed=ref_exists(branch->refname);create_branch(argv[0],(argc==2)?argv[1]:head,force,reflog,0,quiet,track);-/*-*Weonlyshowtheinstructionsiftheusergaveus-*onebranchwhichdoesn'texistlocally,butisthe-*nameofaremote-trackingbranch.-*/-if(argc==1&&track==BRANCH_TRACK_OVERRIDE&&-!branch_existed&&remote_tracking){-fprintf(stderr,_("\nIf you wanted to make '%s' track '%s', do this:\n\n"),head,branch->name);-fprintf(stderr," git branch -d %s\n",branch->name);-fprintf(stderr," git branch --set-upstream-to %s\n",branch->name);-}-}elseusage_with_options(builtin_branch_usage,options);
@@ -561,7 +561,8 @@ test_expect_success 'use --set-upstream-to modify a particular branch' 'gitbranchmy13&&gitbranch--set-upstream-tomastermy13&&test"$(gitconfigbranch.my13.remote)"="."&&-test"$(gitconfigbranch.my13.merge)"="refs/heads/master"+test"$(gitconfigbranch.my13.merge)"="refs/heads/master"&&+gitbranch--unset-upstreammy13' test_expect_success'--unset-upstream should fail if given a non-existent branch''
@@ -605,38 +606,8 @@ test_expect_success 'test --unset-upstream on a particular branch' 'test_must_failgitconfigbranch.my14.merge'-test_expect_success'--set-upstream shows message when creating a new branch that exists as remote-tracking''-gitupdate-refrefs/remotes/origin/masterHEAD&&-gitbranch--set-upstreamorigin/master2>actual&&-test_when_finishedgitupdate-ref-drefs/remotes/origin/master&&-test_when_finishedgitbranch-dorigin/master&&-cat>expected<<EOF&&-The--set-upstreamflagisdeprecatedandwillberemoved.Considerusing--trackor--set-upstream-to--Ifyouwantedtomake'"'master'"'track'"'origin/master'"',dothis:--gitbranch-dorigin/master-gitbranch--set-upstream-toorigin/master-EOF-test_i18ncmpexpectedactual-'--test_expect_success'--set-upstream with two args only shows the deprecation message''-gitbranch--set-upstreammastermy132>actual&&-test_when_finishedgitbranch--unset-upstreammaster&&-cat>expected<<EOF&&-The--set-upstreamflagisdeprecatedandwillberemoved.Considerusing--trackor--set-upstream-to-EOF-test_i18ncmpexpectedactual-'--test_expect_success'--set-upstream with one arg only shows the deprecation message if the branch existed''-gitbranch--set-upstreammy132>actual&&-test_when_finishedgitbranch--unset-upstreammy13&&-cat>expected<<EOF&&-The--set-upstreamflagisdeprecatedandwillberemoved.Considerusing--trackor--set-upstream-to-EOF-test_i18ncmpexpectedactual+test_expect_success'--set-upstream fails''+test_must_failgitbranch--set-upstreamorigin/master' test_expect_success'--set-upstream-to notices an error to set branch as own upstream''
@@ -961,19 +932,6 @@ test_expect_success 'attempt to delete a branch merged to its base' 'test_must_failgitbranch-dmy10'-test_expect_success'use set-upstream on the current branch''-gitcheckoutmaster&&-git--bareinitmyupstream.git&&-gitpushmyupstream.gitmaster:refs/heads/frotz&&-gitremoteaddoriginmyupstream.git&&-gitfetch&&-gitbranch--set-upstreammasterorigin/frotz&&--test"z$(gitconfigbranch.master.remote)"="zorigin"&&-test"z$(gitconfigbranch.master.merge)"="zrefs/heads/frotz"--'- test_expect_success'use --edit-description''write_scripteditor<<-\EOF&&echo"New contents">"$1"
@@ -188,35 +188,35 @@ test_expect_success 'fail to track annotated tags' 'test_must_failgitcheckoutheavytrack'-test_expect_success'setup tracking with branch --set-upstream on existing branch''+test_expect_success'setup tracking with branch --set-upstream-to on existing branch''gitbranchfrom-mastermaster&&test_must_failgitconfigbranch.from-master.merge>actual&&-gitbranch--set-upstreamfrom-mastermaster&&+gitbranch--set-upstream-tomasterfrom-master&&gitconfigbranch.from-master.merge>actual&&grep-q"^refs/heads/master$"actual'-test_expect_success'--set-upstream does not change branch''+test_expect_success'--set-upstream-to does not change branch''gitbranchfrom-master2master&&test_must_failgitconfigbranch.from-master2.merge>actual&&gitrev-listfrom-master2&&gitupdate-refrefs/heads/from-master2from-master2^&&gitrev-parsefrom-master2>expect2&&-gitbranch--set-upstreamfrom-master2master&&+gitbranch--set-upstream-tomasterfrom-master2&&gitconfigbranch.from-master.merge>actual&&gitrev-parsefrom-master2>actual2&&grep-q"^refs/heads/master$"actual&&cmpexpect2actual2'-test_expect_success'--set-upstream @{-1}''-gitcheckoutfrom-master&&+test_expect_success'--set-upstream-to @{-1}''+gitcheckoutfollower&&gitcheckoutfrom-master2&&gitconfigbranch.from-master2.merge>expect2&&-gitbranch--set-upstream@{-1}follower&&+gitbranch--set-upstream-to@{-1}from-master&&gitconfigbranch.from-master.merge>actual&&gitconfigbranch.from-master2.merge>actual2&&-gitbranch--set-upstreamfrom-masterfollower&&+gitbranch--set-upstream-tofollowerfrom-master&&gitconfigbranch.from-master.merge>expect&&test_cmpexpect2actual2&&test_cmpexpectactual
From: Martin Ågren <hidden> Date: 2017-08-14 19:14:35
On 14 August 2017 at 10:54, Kaartic Sivaraam
[off-list ref] wrote:
quoted hunk
The '--set-upstream' option of branch was deprecated in,
b347d06bf branch: deprecate --set-upstream and show help if we
detect possible mistaken use (Thu, 30 Aug 2012 19:23:13 +0200)
It was deprecated for the reasons specified in the commit message of the
referenced commit.
Make 'branch' die with an appropraite error message when the '--set-upstream'
option is used.
Note that there's a reason behind "dying with an error message" instead of
"not accepting the option". 'git branch' would *accept* '--set-upstream'
even after it's removal as a consequence of,
Unique prefix can be abbrievated in option names
AND
'--set-upstream' is a unique prefix of '--set-upstream-to'
(when the '--set-upstream' option has been removed)
In order to smooth the transition for users and to avoid them being affected
by the "prefix issue" it was decided to make branch die when seeing the
'--set-upstream' flag for a few years and let the users know that it would be
removed some time in the future.
The before/after behaviour for a simple case follows,
$ git remote
origin
Before,
$ git branch
* master
$ git branch --set-upstream origin/master
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
Branch origin/master set up to track local branch master.
$ echo $?
0
$ git branch
* master
origin/master
After,
$ git branch
* master
$ git branch --set-upstream origin/master
fatal: the '--set-upstream' flag is no longer supported and will be removed. Consider using '--track' or '--set-upstream-to'
$ echo $?
128
$ git branch
* master
Signed-off-by: Kaartic Sivaraam <redacted>
---
Changes in v3:
A few tweaks to the following:
* Commit message
* Error message (the one shown when '--set-upstream' is seen)
* Updated the corresponding message in the options structure
* Documentation
A query,
I see the following code in the code path a little above the die statement
added in this change,
if (!strcmp(argv[0], "HEAD"))
die(_("it does not make sense to create 'HEAD' manually"));
It does seem to be doing quite a nice job of avoiding an ambiguity that could
have bad consequences but it's still possible to create a branch named 'HEAD'
using the '-b' option of 'checkout'. Should 'git checkout -b HEAD' actually
fail(it does not currently) for the same reason 'git branch HEAD' fails?
My guess is that people would use 'git checkout -b <new_branch_name> <starting_point>'
more than it's 'git branch' counterpart.
Documentation/git-branch.txt | 8 +++----
builtin/branch.c | 23 ++------------------
t/t3200-branch.sh | 50 ++++----------------------------------------
t/t6040-tracking-info.sh | 16 +++++++-------
4 files changed, 18 insertions(+), 79 deletions(-)
@@ -195,10 +195,10 @@ start-point is either a local or remote-tracking branch. branch.autoSetupMerge configuration variable is true. --set-upstream::- If specified branch does not exist yet or if `--force` has been- given, acts exactly like `--track`. Otherwise sets up configuration- like `--track` would when creating the branch, except that where- branch points to is not changed.+ As this option has confusing syntax it's no longer supported. Please use
"has" or "had"? (I guess when someone reads this, it "has" no syntax at
all. ;) )
+ --track or --set-upstream-to instead.
Maybe indent with a tab instead of two spaces for consistency with the
rest of the file.
++
+Note: This could possibly become an alias of --set-upstream-to in the future.
@@ -557,7 +557,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)OPT__QUIET(&quiet,N_("suppress informational messages")),OPT_SET_INT('t',"track",&track,N_("set up tracking mode (see git-pull(1))"),BRANCH_TRACK_EXPLICIT),-OPT_SET_INT(0,"set-upstream",&track,N_("change upstream info"),+OPT_SET_INT(0,"set-upstream",&track,N_("no longer supported"),BRANCH_TRACK_OVERRIDE),OPT_STRING('u',"set-upstream-to",&new_upstream,N_("upstream"),N_("change the upstream info")),OPT_BOOL(0,"unset-upstream",&unset_upstream,N_("Unset the upstream info")),
@@ -755,8 +755,6 @@ int cmd_branch(int argc, const char **argv, const char *prefix)strbuf_release(&buf);}elseif(argc>0&&argc<=2){structbranch*branch=branch_get(argv[0]);-intbranch_existed=0,remote_tracking=0;-structstrbufbuf=STRBUF_INIT;if(!strcmp(argv[0],"HEAD"))die(_("it does not make sense to create 'HEAD' manually"));
@@ -768,28 +766,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)die(_("-a and -r options to 'git branch' do not make sense with a branch name"));if(track==BRANCH_TRACK_OVERRIDE)-fprintf(stderr,_("The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to\n"));+die(_("the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead."));-strbuf_addf(&buf,"refs/remotes/%s",branch->name);-remote_tracking=ref_exists(buf.buf);-strbuf_release(&buf);--branch_existed=ref_exists(branch->refname);create_branch(argv[0],(argc==2)?argv[1]:head,force,reflog,0,quiet,track);-/*-*Weonlyshowtheinstructionsiftheusergaveus-*onebranchwhichdoesn'texistlocally,butisthe-*nameofaremote-trackingbranch.-*/-if(argc==1&&track==BRANCH_TRACK_OVERRIDE&&-!branch_existed&&remote_tracking){-fprintf(stderr,_("\nIf you wanted to make '%s' track '%s', do this:\n\n"),head,branch->name);-fprintf(stderr," git branch -d %s\n",branch->name);-fprintf(stderr," git branch --set-upstream-to %s\n",branch->name);-}-
I think it would be safer to use test_when_finished like on line 625.
Out of curiosity: are you adding this out of caution, or did some later
test fail without this?
quoted hunk
'
test_expect_success '--unset-upstream should fail if given a non-existent branch' '
@@ -605,38 +606,8 @@ test_expect_success 'test --unset-upstream on a particular branch' ' test_must_fail git config branch.my14.merge '-test_expect_success '--set-upstream shows message when creating a new branch that exists as remote-tracking' '- git update-ref refs/remotes/origin/master HEAD &&- git branch --set-upstream origin/master 2>actual &&- test_when_finished git update-ref -d refs/remotes/origin/master &&- test_when_finished git branch -d origin/master &&- cat >expected <<EOF &&-The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to--If you wanted to make '"'master'"' track '"'origin/master'"', do this:-- git branch -d origin/master- git branch --set-upstream-to origin/master-EOF- test_i18ncmp expected actual-'--test_expect_success '--set-upstream with two args only shows the deprecation message' '- git branch --set-upstream master my13 2>actual &&- test_when_finished git branch --unset-upstream master &&- cat >expected <<EOF &&-The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to-EOF- test_i18ncmp expected actual-'--test_expect_success '--set-upstream with one arg only shows the deprecation message if the branch existed' '- git branch --set-upstream my13 2>actual &&- test_when_finished git branch --unset-upstream my13 &&- cat >expected <<EOF &&-The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to-EOF- test_i18ncmp expected actual+test_expect_success '--set-upstream fails' '+ test_must_fail git branch --set-upstream origin/master ' test_expect_success '--set-upstream-to notices an error to set branch as own upstream' '
@@ -961,19 +932,6 @@ test_expect_success 'attempt to delete a branch merged to its base' ' test_must_fail git branch -d my10 '-test_expect_success 'use set-upstream on the current branch' '- git checkout master &&- git --bare init myupstream.git &&- git push myupstream.git master:refs/heads/frotz &&- git remote add origin myupstream.git &&- git fetch &&- git branch --set-upstream master origin/frotz &&-- test "z$(git config branch.master.remote)" = "zorigin" &&- test "z$(git config branch.master.merge)" = "zrefs/heads/frotz"--'- test_expect_success 'use --edit-description' ' write_script editor <<-\EOF && echo "New contents" >"$1"
@@ -188,35 +188,35 @@ test_expect_success 'fail to track annotated tags' 'test_must_failgitcheckoutheavytrack'-test_expect_success'setup tracking with branch --set-upstream on existing branch''+test_expect_success'setup tracking with branch --set-upstream-to on existing branch''gitbranchfrom-mastermaster&&test_must_failgitconfigbranch.from-master.merge>actual&&-gitbranch--set-upstreamfrom-mastermaster&&+gitbranch--set-upstream-tomasterfrom-master&&gitconfigbranch.from-master.merge>actual&&grep-q"^refs/heads/master$"actual'-test_expect_success'--set-upstream does not change branch''+test_expect_success'--set-upstream-to does not change branch''gitbranchfrom-master2master&&test_must_failgitconfigbranch.from-master2.merge>actual&&gitrev-listfrom-master2&&gitupdate-refrefs/heads/from-master2from-master2^&&gitrev-parsefrom-master2>expect2&&-gitbranch--set-upstreamfrom-master2master&&+gitbranch--set-upstream-tomasterfrom-master2&&gitconfigbranch.from-master.merge>actual&&gitrev-parsefrom-master2>actual2&&grep-q"^refs/heads/master$"actual&&cmpexpect2actual2'
The two tests above were added when --set-upstream was originally added.
Now that you're converting them to use --set-upstream-to, to what extent
do they just test the same thing as the tests in t3200?
On Tuesday 15 August 2017 12:44 AM, Martin Ågren wrote:
quoted
--set-upstream::
- If specified branch does not exist yet or if `--force` has been
- given, acts exactly like `--track`. Otherwise sets up configuration
- like `--track` would when creating the branch, except that where
- branch points to is not changed.
+ As this option has confusing syntax it's no longer supported. Please use
"has" or "had"? (I guess when someone reads this, it "has" no syntax at
all. ;) )
I think it would be safer to use test_when_finished like on line 625.
Out of curiosity: are you adding this out of caution, or did some later
test fail without this?
One test seems to fail without this. I guess it's better to keep this
change as a separate
commit.
@@ -188,35 +188,35 @@ test_expect_success 'fail to track annotated tags' 'test_must_failgitcheckoutheavytrack'-test_expect_success'setup tracking with branch --set-upstream on existing branch''+test_expect_success'setup tracking with branch --set-upstream-to on existing branch''gitbranchfrom-mastermaster&&test_must_failgitconfigbranch.from-master.merge>actual&&-gitbranch--set-upstreamfrom-mastermaster&&+gitbranch--set-upstream-tomasterfrom-master&&gitconfigbranch.from-master.merge>actual&&grep-q"^refs/heads/master$"actual'-test_expect_success'--set-upstream does not change branch''+test_expect_success'--set-upstream-to does not change branch''gitbranchfrom-master2master&&test_must_failgitconfigbranch.from-master2.merge>actual&&gitrev-listfrom-master2&&gitupdate-refrefs/heads/from-master2from-master2^&&gitrev-parsefrom-master2>expect2&&-gitbranch--set-upstreamfrom-master2master&&+gitbranch--set-upstream-tomasterfrom-master2&&gitconfigbranch.from-master.merge>actual&&gitrev-parsefrom-master2>actual2&&grep-q"^refs/heads/master$"actual&&cmpexpect2actual2'
The two tests above were added when --set-upstream was originally added.
Now that you're converting them to use --set-upstream-to, to what extent
do they just test the same thing as the tests in t3200?
The first seems useless, I'll remove it. Regarding the second one, as
far as I could see
there's no test in t3200 that does something similar so I guess it could
be kept back.
---
Kaartic