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

[PATCH v3 1/2 / RFC] builtin/branch: stop supporting the use of --set-upstream option

From
Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
Date
Aug 14, 2017, 08:54 UTC
Message-ID
<20170814085442.31174-1-kaarticsivaraam91196@gmail.com>
In-Reply-To
<20170808171136.31168-1-kaarticsivaraam91196@gmail.com>
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 <kaarticsivaraam91196@gmail.com>
---
 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(-)
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 81bd0a7b7..93ee05c55 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -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>::
diff --git a/builtin/branch.c b/builtin/branch.c
index a3bd2262b..b92070393 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -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);
 	} else if (argc > 0 && argc <= 2) {
 		struct branch *branch = branch_get(argv[0]);
-		int branch_existed = 0, remote_tracking = 0;
-		struct strbuf buf = 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);
 
-		/*
-		 * We only show the instructions if the user gave us
-		 * one branch which doesn't exist locally, but is the
-		 * name of a remote-tracking branch.
-		 */
-		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);
-		}
-
 	} else
 		usage_with_options(builtin_branch_usage, options);
 
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index dd37ac47c..249be4b1a 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -561,7 +561,8 @@ test_expect_success 'use --set-upstream-to modify a particular branch' '
 	git branch my13 &&
 	git branch --set-upstream-to master my13 &&
 	test "$(git config branch.my13.remote)" = "." &&
-	test "$(git config branch.my13.merge)" = "refs/heads/master"
+	test "$(git config branch.my13.merge)" = "refs/heads/master" &&
+	git branch --unset-upstream my13
 '
 
 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"
diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh
index 97a07655a..4b522f456 100755
--- a/t/t6040-tracking-info.sh
+++ b/t/t6040-tracking-info.sh
@@ -188,35 +188,35 @@ test_expect_success 'fail to track annotated tags' '
 	test_must_fail git checkout heavytrack
 '
 
-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' '
 	git branch from-master master &&
 	test_must_fail git config branch.from-master.merge > actual &&
-	git branch --set-upstream from-master master &&
+	git branch --set-upstream-to master from-master &&
 	git config branch.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' '
 	git branch from-master2 master &&
 	test_must_fail git config branch.from-master2.merge > actual &&
 	git rev-list from-master2 &&
 	git update-ref refs/heads/from-master2 from-master2^ &&
 	git rev-parse from-master2 >expect2 &&
-	git branch --set-upstream from-master2 master &&
+	git branch --set-upstream-to master from-master2 &&
 	git config branch.from-master.merge > actual &&
 	git rev-parse from-master2 >actual2 &&
 	grep -q "^refs/heads/master$" actual &&
 	cmp expect2 actual2
 '
 
-test_expect_success '--set-upstream @{-1}' '
-	git checkout from-master &&
+test_expect_success '--set-upstream-to @{-1}' '
+	git checkout follower &&
 	git checkout from-master2 &&
 	git config branch.from-master2.merge > expect2 &&
-	git branch --set-upstream @{-1} follower &&
+	git branch --set-upstream-to @{-1} from-master &&
 	git config branch.from-master.merge > actual &&
 	git config branch.from-master2.merge > actual2 &&
-	git branch --set-upstream from-master follower &&
+	git branch --set-upstream-to follower from-master &&
 	git config branch.from-master.merge > expect &&
 	test_cmp expect2 actual2 &&
 	test_cmp expect actual
-- 
2.14.0.rc1.434.g6eded367a
Previous: Kaartic SivaraamNext: Martin Ågren
Message 19 of 127 in “branch: warn user about non-existent branch”
  1. branch: warn user about non-existent branchKaartic Sivaraam, Jul 24, 2017
  2. Change in output as a result of patchKaartic Sivaraam, Jul 24, 2017
  3. Junio C HamanoJul 24, 2017
  4. Kaartic SivaraamJul 25, 2017
  5. Junio C HamanoJul 26, 2017
  6. Can the '--set-upstream' option of branch be removed ?Kaartic Sivaraam, Aug 7, 2017
  7. 1/2 builtin/branch: remove the deprecated '--set-upstream' optionKaartic Sivaraam, Aug 7, 2017
  8. 2/2 branch: quote branch/ref names to improve readabilityKaartic Sivaraam, Aug 7, 2017
  9. Junio C HamanoAug 7, 2017
  10. Kaartic SivaraamAug 8, 2017
  11. Junio C HamanoAug 8, 2017
  12. 1/2 builtin/branch: stop supporting the use of --set-upstream optionKaartic Sivaraam, Aug 8, 2017
  13. 2/2 branch: quote branch/ref names to improve readabilityKaartic Sivaraam, Aug 8, 2017
  14. Stefan BellerAug 8, 2017
  15. Junio C HamanoAug 8, 2017
  16. Stefan BellerAug 8, 2017
  17. Martin ÅgrenAug 8, 2017
  18. Kaartic SivaraamAug 14, 2017
  19. 1/2 builtin/branch: stop supporting the use of --set-upstream optionKaartic Sivaraam, Aug 14, 2017
  20. Martin ÅgrenAug 14, 2017
  21. Kaartic SivaraamAug 15, 2017
  22. Junio C HamanoAug 14, 2017
  23. Kaartic SivaraamAug 15, 2017
  24. Junio C HamanoAug 15, 2017
  25. Kaartic SivaraamAug 16, 2017
  26. Junio C HamanoAug 16, 2017
  27. Kaartic SivaraamAug 17, 2017
  28. Junio C HamanoSep 12, 2017
  29. Kaartic SivaraamSep 12, 2017
  30. branch: strictly don't allow a branch with name 'HEAD'Kaartic Sivaraam, Sep 12, 2017
  31. 1/3 test: cleanup cruft of a testKaartic Sivaraam, Aug 17, 2017
  32. 2/3 builtin/branch: stop supporting the use of --set-upstream optionKaartic Sivaraam, Aug 17, 2017
  33. Martin ÅgrenAug 17, 2017
  34. Junio C HamanoAug 17, 2017
  35. Kaartic SivaraamAug 18, 2017
  36. Junio C HamanoAug 18, 2017
  37. Martin ÅgrenAug 18, 2017
  38. Junio C HamanoAug 17, 2017
  39. Kaartic SivaraamAug 18, 2017
  40. Junio C HamanoAug 18, 2017
  41. 3/3 branch: quote branch/ref names to improve readabilityKaartic Sivaraam, Aug 17, 2017
  42. Kaartic SivaraamAug 7, 2017
  43. 0/5 branch: improve error messages of branch renamingKaartic Sivaraam, Sep 19, 2017
  44. 1/5 builtin/checkout: avoid usage of '!!'Kaartic Sivaraam, Sep 19, 2017
  45. Junio C HamanoSep 20, 2017
  46. Kaartic SivaraamSep 20, 2017
  47. Kaartic SivaraamSep 20, 2017
  48. Junio C HamanoSep 21, 2017
  49. Kaartic SivaraamSep 23, 2017
  50. 2/5 branch: document the usage of certain parametersKaartic Sivaraam, Sep 19, 2017
  51. Junio C HamanoSep 20, 2017
  52. Kaartic SivaraamSep 20, 2017
  53. Junio C HamanoSep 21, 2017
  54. 3/5 branch: cleanup branch name validationKaartic Sivaraam, Sep 19, 2017
  55. Junio C HamanoSep 20, 2017
  56. Kaartic SivaraamSep 20, 2017
  57. Junio C HamanoSep 21, 2017
  58. Kaartic SivaraamSep 23, 2017
  59. Kaartic SivaraamSep 20, 2017
  60. 4/5 branch: introduce dont_fail parameter for update validationKaartic Sivaraam, Sep 19, 2017
  61. 5/5 builtin/branch: give more useful error messages when renamingKaartic Sivaraam, Sep 19, 2017
  62. [RFC SAMPLE] builtin/branch: give more useful error messages when renamingKaartic Sivaraam, Sep 19, 2017
  63. Kaartic SivaraamSep 19, 2017
  64. Stefan BellerSep 20, 2017
  65. Kaartic SivaraamSep 23, 2017
  66. 0/5 Give more useful error messages when renaming a branchKaartic Sivaraam, Sep 25, 2017
  67. 1/5 branch: improve documentation and naming of certain parametersKaartic Sivaraam, Sep 25, 2017
  68. Stefan BellerOct 20, 2017
  69. Eric SunshineOct 20, 2017
  70. Kaartic SivaraamOct 21, 2017
  71. Kaartic SivaraamOct 21, 2017
  72. 2/5 branch: re-order function arguments to group related argumentsKaartic Sivaraam, Sep 25, 2017
  73. Stefan BellerOct 20, 2017
  74. Kaartic SivaraamOct 21, 2017
  75. Stefan BellerOct 23, 2017
  76. 3/5 branch: cleanup branch name validationKaartic Sivaraam, Sep 25, 2017
  77. 4/5 branch: introduce dont_fail parameter for create validationKaartic Sivaraam, Sep 25, 2017
  78. 5/5 builtin/branch: give more useful error messages when renamingKaartic Sivaraam, Sep 25, 2017
  79. Stefan BellerOct 23, 2017
  80. Kaartic SivaraamOct 24, 2017
  81. Kaartic SivaraamOct 20, 2017
  82. Stefan BellerOct 20, 2017
  83. 0/4 give more useful error messages while renaming branchKaartic Sivaraam, Nov 2, 2017
  84. 2/4 branch: re-order function arguments to group related argumentsKaartic Sivaraam, Nov 2, 2017
  85. Junio C HamanoNov 6, 2017
  86. Kaartic SivaraamNov 12, 2017
  87. Junio C HamanoNov 13, 2017
  88. Kaartic SivaraamNov 13, 2017
  89. 3/4 branch: introduce dont_fail parameter for branchname validationKaartic Sivaraam, Nov 2, 2017
  90. Kaartic SivaraamNov 2, 2017
  91. Stefan BellerNov 2, 2017
  92. Kaartic SivaraamNov 3, 2017
  93. Junio C HamanoNov 6, 2017
  94. Kaartic SivaraamNov 12, 2017
  95. 4/4 builtin/branch: give more useful error messages when renamingKaartic Sivaraam, Nov 2, 2017
  96. Eric SunshineNov 2, 2017
  97. Kaartic SivaraamNov 3, 2017
  98. Junio C HamanoNov 6, 2017
  99. Kaartic SivaraamNov 12, 2017
  100. Kevin DaudtNov 12, 2017
  101. Kaartic SivaraamNov 13, 2017
  102. Kevin DaudtNov 13, 2017
  103. Kaartic SivaraamNov 14, 2017
  104. 1/4 branch: improve documentation and naming of 'create_branch()'Kaartic Sivaraam, Nov 2, 2017
  105. 0/4 cleanups surrounding branchKaartic Sivaraam, Nov 18, 2017
  106. 1/4 branch: improve documentation and naming of create_branch() parametersKaartic Sivaraam, Nov 18, 2017
  107. 2/4 branch: group related arguments of create_branch()Kaartic Sivaraam, Nov 18, 2017
  108. 3/4 branch: update warning message shown when copying a misnamed branchKaartic Sivaraam, Nov 18, 2017
  109. 4/4 builtin/branch: strip refs/heads/ using skip_prefixKaartic Sivaraam, Nov 18, 2017
  110. Eric SunshineNov 19, 2017
  111. Kaartic SivaraamNov 19, 2017
  112. Eric SunshineNov 19, 2017
  113. 4/4 builtin/branch: strip refs/heads/ using skip_prefixKaartic Sivaraam, Nov 29, 2017
  114. 4/4 builtin/branch: strip refs/heads/ using skip_prefixKaartic Sivaraam, Dec 1, 2017
  115. SZEDER GáborDec 4, 2017
  116. Junio C HamanoDec 7, 2017
  117. Junio C HamanoDec 7, 2017
  118. Kaartic SivaraamDec 8, 2017
  119. 0/3 give more useful error messages while renaming branch (reboot)Kaartic Sivaraam, Mar 10, 2018
  120. 1/3 branch: introduce dont_fail parameter for branchname validationKaartic Sivaraam, Mar 10, 2018
  121. Junio C HamanoMar 15, 2018
  122. Kaartic SivaraamMar 16, 2018
  123. 2/3 builtin/branch: give more useful error messages when renamingKaartic Sivaraam, Mar 10, 2018
  124. Junio C HamanoMar 15, 2018
  125. Kaartic SivaraamMar 24, 2018
  126. 3/3 t/t3200: fix a typo in a test descriptionKaartic Sivaraam, Mar 10, 2018
  127. Junio C HamanoMar 15, 2018

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.