Clarify the meaning of branch.*.merge option and add a similar
branch.*.localmerge option, which can be used to specify a local
tracking branch to be merged by default.
Previously, if branch.*.merge was specified but did not match any
ref, the message "No changes." was not really helpful regarding
the misconfiguration. This now gives a warning.
The value of branch.*.merge can be a list to get an octopus
merge. I chose the same way for branch.*.localmerge, and if
you specify both options, the octopus merge will have even
more parents ;-)
Signed-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
---
This implements to branch.*.localmerge option as counterpart
to branch.*.merge as discussed.
To get the "No default merge when any branch.*.(local)merge is given,
but not in current branch" feature, what is the way to check this,
as git-repo-config can not match with regexps against config keys?
Josef
Documentation/config.txt | 23 +++++++++++++++++++++--
git-parse-remote.sh | 40 +++++++++++++++++++++++++++++++---------
2 files changed, 52 insertions(+), 11 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 9090762..6e19130 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -125,10 +125,29 @@ apply.whitespace::
branch.<name>.remote::
When in branch <name>, it tells `git fetch` which remote to fetch.
+ If this option is not given, `git fetch` defaults to "origin".
branch.<name>.merge::
- When in branch <name>, it tells `git fetch` the default remote branch
- to be merged.
+ When in branch <name>, it tells `git fetch` the default refspec to
+ be marked for merging in FETCH_HEAD. The value has to exactly
+ match a remote part of the refspecs which are fetched from the remote
+ repository given by "branch.<name>.remote".
+ The merge information is used by `git pull` (which first calls
+ `git fetch`) for the default merge action.
+ Without this or a "branch.<name>.localmerge" option, `git pull` defaults to
+ the first refspec fetched.
+ Specify multiple values to get an octopus merge.
+
+branch.<name>.localmerge::
+ When in branch <name>, it tells `git fetch` the default refspec to
+ be marked for merging in FETCH_HEAD. The value has to exactly
+ match a local part (i.e. the local tracking branch) of the refspecs
+ which are fetched from the remote repository given by "branch.<name>.remote".
+ The merge information is used by `git pull` (which first calls
+ `git fetch`) for the default merge action.
+ Without this or a "branch.<name>.merge" option, `git pull` defaults to the
+ first refspec fetched.
+ Specify multiple values to get an octopus merge.
pager.color::
A boolean to enable/disable colored output when the pager is in
diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index da064a5..08ab272 100755
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -133,7 +133,9 @@ canon_refs_list_for_fetch () {
# leave the branches in branch.${curr_branch}.merge alone,
# or the first one otherwise; add prefix . to the rest
# to prevent the secondary branches to be merged by default.
- merge_branches=
+ merge_remotebranches=
+ merge_localbranches=
+ found_mergerefs=
if test "$1" = "-d"
then
shift ; remote="$1" ; shift
@@ -141,8 +143,10 @@ canon_refs_list_for_fetch () {
then
curr_branch=$(git-symbolic-ref HEAD | \
sed -e 's|^refs/heads/||')
- merge_branches=$(git-repo-config \
+ merge_remotebranches=$(git-repo-config \
--get-all "branch.${curr_branch}.merge")
+ merge_localbranches=$(git-repo-config \
+ --get-all "branch.${curr_branch}.localmerge")
fi
set x $(expand_refs_wildcard "$@")
shift
@@ -160,17 +164,31 @@ canon_refs_list_for_fetch () {
remote=$(expr "z$ref" : 'z\([^:]*\):')
local=$(expr "z$ref" : 'z[^:]*:\(.*\)')
dot_prefix=.
- if test -z "$merge_branches"
+ if test ! -z "$merge_remotebranches"
then
- merge_branches=$remote
- dot_prefix=
- else
- for merge_branch in $merge_branches
+ for merge_branch in $merge_remotebranches
do
- [ "$remote" = "$merge_branch" ] &&
- dot_prefix= && break
+ [ "$remote" = "$merge_branch" ] &&
+ dot_prefix= && break
done
fi
+ if test ! -z "$merge_localbranches"
+ then
+ for merge_branch in $merge_localbranches
+ do
+ [ "$local" = "$merge_branch" ] &&
+ dot_prefix= && break
+ done
+ fi
+ if test -z "$merge_remotebranches" -a -z "$merge_localbranches"
+ then
+ merge_remotebranches=$remote
+ dot_prefix=
+ fi
+ if test -z $dot_prefix
+ then
+ found_mergeref=true
+ fi
case "$remote" in
'') remote=HEAD ;;
refs/heads/* | refs/tags/* | refs/remotes/*) ;;
@@ -191,6 +209,10 @@ canon_refs_list_for_fetch () {
fi
echo "${dot_prefix}${force}${remote}:${local}"
done
+ if test -z $found_mergeref
+ then
+ echo >&2 "Warning: No merge candidate because of no match with branch.*.merge or branch.*.localmerge"
+ fi
}
# Returns list of src: (no store), or src:dst (store)
--
1.4.4.2.gdf61-dirty
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html| Dave Hansen | Re: [RFC/PATCH] Documentation of kernel messages |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Amit K. Arora | [RFC] Heads up on sys_fallocate() |
| David Newall | Re: Slow DOWN, please!!! |
git: | |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| Corey Minyard | [PATCH 3/3] Convert the UDP hash lock to RCU |
| Frans Pop | svc: failed to register lockdv1 RPC service (errno 97). |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
