From fe70225dc730c5af4c491106d1e0226d1c014d1e Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 8 May 2008 20:16:43 -0400 Subject: [PATCH] git-gui: Setup branch.remote,merge for shorthand git-pull When creating new branches if branch.autosetupmerge is not set, or is set to true or always and we have been given a remote tracking branch as the starting point for a new branch we want to create the necessary configuration options in .git/config for the new branch so that a no argument git-pull on the command line pulls from the remote repository's branch. Signed-off-by: Shawn O. Pearce --- git-gui.sh | 1 + lib/branch_create.tcl | 3 +++ lib/checkout_op.tcl | 24 +++++++++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/git-gui.sh b/git-gui.sh index 7c25bb980..9df49710e 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -601,6 +601,7 @@ proc apply_config {} { } } +set default_config(branch.autosetupmerge) true set default_config(merge.diffstat) true set default_config(merge.summary) false set default_config(merge.verbosity) 2 diff --git a/lib/branch_create.tcl b/lib/branch_create.tcl index 53dfb4ce6..3817771b9 100644 --- a/lib/branch_create.tcl +++ b/lib/branch_create.tcl @@ -183,6 +183,9 @@ method _create {} { if {$spec ne {} && $opt_fetch} { $co enable_fetch $spec } + if {$spec ne {}} { + $co remote_source $spec + } if {[$co run]} { destroy $w diff --git a/lib/checkout_op.tcl b/lib/checkout_op.tcl index 6e1411711..caca88831 100644 --- a/lib/checkout_op.tcl +++ b/lib/checkout_op.tcl @@ -16,6 +16,7 @@ field merge_base {}; # merge base if we have another ref involved field fetch_spec {}; # refetch tracking branch if used? field checkout 1; # actually checkout the branch? field create 0; # create the branch if it doesn't exist? +field remote_source {}; # same as fetch_spec, to setup tracking field reset_ok 0; # did the user agree to reset? field fetch_ok 0; # did the fetch succeed? @@ -44,6 +45,10 @@ method enable_fetch {spec} { set fetch_spec $spec } +method remote_source {spec} { + set remote_source $spec +} + method enable_checkout {co} { set checkout $co } @@ -145,7 +150,7 @@ method _finish_fetch {ok} { } method _update_ref {} { - global null_sha1 current_branch + global null_sha1 current_branch repo_config set ref $new_ref set new $new_hash @@ -172,6 +177,23 @@ method _update_ref {} { set reflog_msg "branch: Created from $new_expr" set cur $null_sha1 + + if {($repo_config(branch.autosetupmerge) eq {true} + || $repo_config(branch.autosetupmerge) eq {always}) + && $remote_source ne {} + && "refs/heads/$newbranch" eq $ref} { + + set c_remote [lindex $remote_source 1] + set c_merge [lindex $remote_source 2] + if {[catch { + git config branch.$newbranch.remote $c_remote + git config branch.$newbranch.merge $c_merge + } err]} { + _error $this [strcat \ + [mc "Failed to configure simplified git-pull for '%s'." $newbranch] \ + "\n\n$err"] + } + } } elseif {$create && $merge_type eq {none}} { # We were told to create it, but not do a merge. # Bad. Name shouldn't have existed. -- 2.30.2