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 <spearce@spearce.org>
This commit is contained in:
@ -601,6 +601,7 @@ proc apply_config {} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set default_config(branch.autosetupmerge) true
|
||||||
set default_config(merge.diffstat) true
|
set default_config(merge.diffstat) true
|
||||||
set default_config(merge.summary) false
|
set default_config(merge.summary) false
|
||||||
set default_config(merge.verbosity) 2
|
set default_config(merge.verbosity) 2
|
||||||
|
@ -183,6 +183,9 @@ method _create {} {
|
|||||||
if {$spec ne {} && $opt_fetch} {
|
if {$spec ne {} && $opt_fetch} {
|
||||||
$co enable_fetch $spec
|
$co enable_fetch $spec
|
||||||
}
|
}
|
||||||
|
if {$spec ne {}} {
|
||||||
|
$co remote_source $spec
|
||||||
|
}
|
||||||
|
|
||||||
if {[$co run]} {
|
if {[$co run]} {
|
||||||
destroy $w
|
destroy $w
|
||||||
|
@ -16,6 +16,7 @@ field merge_base {}; # merge base if we have another ref involved
|
|||||||
field fetch_spec {}; # refetch tracking branch if used?
|
field fetch_spec {}; # refetch tracking branch if used?
|
||||||
field checkout 1; # actually checkout the branch?
|
field checkout 1; # actually checkout the branch?
|
||||||
field create 0; # create the branch if it doesn't exist?
|
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 reset_ok 0; # did the user agree to reset?
|
||||||
field fetch_ok 0; # did the fetch succeed?
|
field fetch_ok 0; # did the fetch succeed?
|
||||||
@ -44,6 +45,10 @@ method enable_fetch {spec} {
|
|||||||
set fetch_spec $spec
|
set fetch_spec $spec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
method remote_source {spec} {
|
||||||
|
set remote_source $spec
|
||||||
|
}
|
||||||
|
|
||||||
method enable_checkout {co} {
|
method enable_checkout {co} {
|
||||||
set checkout $co
|
set checkout $co
|
||||||
}
|
}
|
||||||
@ -145,7 +150,7 @@ method _finish_fetch {ok} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
method _update_ref {} {
|
method _update_ref {} {
|
||||||
global null_sha1 current_branch
|
global null_sha1 current_branch repo_config
|
||||||
|
|
||||||
set ref $new_ref
|
set ref $new_ref
|
||||||
set new $new_hash
|
set new $new_hash
|
||||||
@ -172,6 +177,23 @@ method _update_ref {} {
|
|||||||
|
|
||||||
set reflog_msg "branch: Created from $new_expr"
|
set reflog_msg "branch: Created from $new_expr"
|
||||||
set cur $null_sha1
|
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}} {
|
} elseif {$create && $merge_type eq {none}} {
|
||||||
# We were told to create it, but not do a merge.
|
# We were told to create it, but not do a merge.
|
||||||
# Bad. Name shouldn't have existed.
|
# Bad. Name shouldn't have existed.
|
||||||
|
Reference in New Issue
Block a user