diff options
Diffstat (limited to 'git-gui/lib/checkout_op.tcl')
| -rw-r--r-- | git-gui/lib/checkout_op.tcl | 24 | 
1 files changed, 23 insertions, 1 deletions
| diff --git a/git-gui/lib/checkout_op.tcl b/git-gui/lib/checkout_op.tcl index 6e1411711b..caca88831b 100644 --- a/git-gui/lib/checkout_op.tcl +++ b/git-gui/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. | 
