git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>
To: git@vger.kernel.org
Cc: Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>,
	Junio C Hamano <gitster@pobox.com>,
	Philip Oakley <philipoakley@iee.email>,
	Eric Sunshine <sunshine@sunshineco.com>
Subject: [PATCH v4 0/1] making --set-upstream have default arguments
Date: Sat,  1 Jan 2022 20:07:47 +0530	[thread overview]
Message-ID: <20220101143748.2582-1-chakrabortyabhradeep79@gmail.com> (raw)
In-Reply-To: <20211209101550.19582-1-chakrabortyabhradeep79@gmail.com>

Often developers want to set a remote branch (i.e. upstream branch)
for the local branch according to their `push.default` settings. For
example, beginners often (may be most of the beginners) run

	git push -u origin <current_branch_name>

If the `push.default` configuration is set, people may want to set
the upstream to that branch that satisfies the `push.default`
configuration. For example, if the `push.default` is set to
'current', developer may want to do like this -

	git push -u <default_repo> <current_branch>

So, it would be great if 'git push -u' (i.e. without <repo> and
<refspec>) by default do this. If `push.default` is not set or has
a value other than 'matching', it would do this - 

	git push -u <default_repo> <current_branch>

And for `push.default`= 'matching', it would set all the remote
maching branch as upstream of their respective matching local
branches. E.g. if 'branch1' and 'branch2' branches both exist in
the local as well as remote repo, 'git push -u' would set the remote
'branch1' as the upstream of local 'branch1' branch and remote
'branch2' branch would be set as the upstream of local 'branch2'
branch.

Note, 'git push -u' for push.default=matching, already works. 

This patch series addresses this.

In v0: argumentless 'git push -u' was blindly passing default remote
name and current branch's name as argv[0] and argv[1] respectively.
This was affecting `push.default` setting.

From v1: The default remote is still used for the <repository> value.
But <refspec> depends on the current push configurations. If
`push.default`='matching', it pushes to the upstream as it should and
sets upstream respectively. For other values of 'push.default', it
pushes to the remote branch with the same name as the current
branch and sets that branch as the upstream.

In v2 and v3: various test cases were added and improved

In current version: tests for 'git push -u' with other options are
added. This includes '-f', '--prune', '-d', '--mirror'.


Abhradeep Chakraborty (1):
  push: make 'set-upstream' have dafault arguments

 Documentation/git-push.txt |  10 +++
 builtin/push.c             |  11 +++-
 t/t5523-push-upstream.sh   | 125 +++++++++++++++++++++++++++++++++++++
 3 files changed, 144 insertions(+), 2 deletions(-)

Range-diff against v3:
1:  64655de6ca ! 1:  d154c7d1f6 push: make '-u' have default arguments
    @@ Metadata
     Author: Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>
     
      ## Commit message ##
    -    push: make '-u' have default arguments
    +    push: make 'set-upstream' have dafault arguments
     
         "git push -u" (set-upstream) requires where to push to and what
         to push.  Often people push only the current branch to update
    @@ t/t5523-push-upstream.sh: test_expect_success 'push -u :topic_2' '
     +	test_config remote.pushDefault upstream
     +}
     +
    ++check_empty_config() {
    ++	test_expect_code 1 git config "branch.$1.remote" &&
    ++	test_expect_code 1 git config "branch.$1.merge"
    ++}
    ++
     +for i in simple current upstream nothing
     +do
     +	test_expect_success 'push -u with push.default=$i' '
    @@ t/t5523-push-upstream.sh: test_expect_success 'push -u :topic_2' '
     +		git push -u &&
     +		check_config main upstream refs/heads/main
     +	'
    ++
    ++	test_expect_success 'push -u -f with push.default=$i' '
    ++		default_u_setup $i &&
    ++		git push -u -f &&
    ++		check_config main upstream refs/heads/main
    ++	'
     +done
     +
    -+check_empty_config() {
    -+	test_expect_code 1 git config "branch.$1.remote" &&
    -+	test_expect_code 1 git config "branch.$1.merge"
    -+}
    ++for i in simple current upstream nothing matching
    ++do
    ++	test_expect_success 'push -u --prune with push.default=$i' '
    ++		default_u_setup $i &&
    ++		git push upstream main:test_u215 &&
    ++		git push -u --prune >out &&
    ++		check_config main upstream refs/heads/main &&
    ++		test_i18ngrep "[deleted]" out &&
    ++		test_i18ngrep ! "Branch '"'"'test_u215'"'"' set up to track" out
    ++	'
    ++
    ++	test_expect_success 'push -u --mirror with push.default=$i' '
    ++		default_u_setup $i &&
    ++		test_might_fail git branch mirror1 &&
    ++		test_might_fail git branch mirror2 &&
    ++		git push -u --mirror &&
    ++		check_config main upstream  refs/heads/main &&
    ++		check_config mirror1 upstream refs/heads/mirror1 &&
    ++		check_config mirror2 upstream refs/heads/mirror2
    ++	'
    ++done
     +
    -+test_expect_success 'push -u with push.default=matching' '
    -+	default_u_setup matching &&
    -+	git branch test_u &&
    -+	git branch test_u2 &&
    -+	git push upstream main:test_u2 &&
    -+	git push -u &&
    -+	check_config main upstream refs/heads/main &&
    -+	check_config test_u2 upstream refs/heads/test_u2 &&
    -+	check_empty_config test_u
    ++for i in '' '-f'
    ++do
    ++
    ++	test_expect_success 'push -u $i with push.default=matching' '
    ++		default_u_setup matching &&
    ++		test_might_fail git branch test_u &&
    ++		test_might_fail git branch test_u2 &&
    ++		git push upstream main:test_u2 &&
    ++		git push -u $i &&
    ++		check_config main upstream refs/heads/main &&
    ++		check_config test_u2 upstream refs/heads/test_u2 &&
    ++		check_empty_config test_u
    ++	'
    ++done
    ++
    ++test_expect_success 'push -u -d will fail' '
    ++	git checkout main &&
    ++	test_might_fail git branch --unset-upstream &&
    ++	test_must_fail git push -u -d
     +'
     +
     +test_expect_success 'push -u --dry-run' '
-- 
2.34.1


  parent reply	other threads:[~2022-01-01 14:39 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-02 14:43 [RFC PATCH 0/1] making --set-upstream have default arguments Abhradeep Chakraborty
2021-12-02 14:43 ` [RFC PATCH 1/1] push: make '-u' " Abhradeep Chakraborty
2021-12-02 18:24   ` Junio C Hamano
2021-12-03  8:14     ` Abhradeep Chakraborty
2021-12-03 17:29       ` Junio C Hamano
2021-12-03 19:27         ` Abhradeep Chakraborty
2021-12-03 11:32 ` [RFC PATCH 0/1] making --set-upstream " Philip Oakley
2021-12-03 16:03   ` Abhradeep Chakraborty
2021-12-03 16:46     ` Philip Oakley
2021-12-03 17:28   ` Abhradeep Chakraborty
2021-12-07 18:22 ` [PATCH v2 " Abhradeep Chakraborty
2021-12-07 18:23   ` [PATCH v2 1/1] push: make '-u' " Abhradeep Chakraborty
2021-12-07 22:14     ` Eric Sunshine
2021-12-08  6:12       ` [PATCH v2 1/1] push: make '-u' have default argument Abhradeep Chakraborty
2021-12-09 10:15   ` [PATCH v3 0/1] making --set-upstream have default arguments Abhradeep Chakraborty
2021-12-09 10:15     ` [PATCH v3 1/1] push: make '-u' " Abhradeep Chakraborty
2022-01-01 14:37     ` Abhradeep Chakraborty [this message]
2022-01-01 14:37       ` [PATCH v4 1/1] push: make 'set-upstream' have dafault arguments Abhradeep Chakraborty
2022-01-04  3:46         ` Junio C Hamano
2022-01-04 13:28           ` Abhradeep Chakraborty
2022-01-04 20:35             ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220101143748.2582-1-chakrabortyabhradeep79@gmail.com \
    --to=chakrabortyabhradeep79@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=philipoakley@iee.email \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).