Fetch: branch properties.
cover Fetch: branch properties.
Hi *,
This patch series implements the following branch properties for fetch:
- default repository to fetch
- default remotes branches to merge from the default repository
Documentation/config.txt | 7 +++++++ git-fetch.sh | 9 ++++----- git-parse-remote.sh | 34 ++++++++++++++++++++++++++-------- 3 files changed, 37 insertions(+), 13 deletions(-)
Santi
PATCH 1/2 Fetch: default remote repository from branch properties
If in branch "foo" and this in config:
[branch "foo"]
remote=bar
"git fetch" = "git fetch bar"
"git pull" = "git pull bar"
--- Documentation/config.txt | 3 +++ git-fetch.sh | 9 ++++----- git-parse-remote.sh | 6 ++++++ 3 files changed, 13 insertions(+), 5 deletions(-)
Documentation/config.txt +3 -0
@@ -119,6 +119,9 @@ apply.whitespace:: Tells `git-apply` how to handle whitespaces, in the same way as the '--whitespace' option. See gitlink:git-apply[1]. +branch.<name>.remote:: + When in branch <name>, it tells `git fetch` which remote to fetch. + pager.color:: A boolean to enable/disable colored output when the pager is in use (default is true).
git-fetch.sh +4 -5
@@ -68,11 +68,10 @@ done case "$#" in 0) - test -f "$GIT_DIR/branches/origin" || - test -f "$GIT_DIR/remotes/origin" || - git-repo-config --get remote.origin.url >/dev/null || - die "Where do you want to fetch from today?" - set origin ;; + origin=$(get_default_remote) + test -n "$(get_remote_url ${origin})" || + die "Where do you want to fetch from today?" + set x $origin ; shift ;; esac remote_nick="$1"
git-parse-remote.sh +6 -0
@@ -68,6 +68,12 @@ get_remote_url () { esac } +get_default_remote () { + curr_branch=$(git-symbolic-ref HEAD | sed -e 's|^refs/heads/||') + origin=$(git-repo-config --get "branch.$curr_branch.remote") + echo ${origin:-origin} +} + get_remote_default_refs_for_push () { data_source=$(get_data_source "$1") case "$data_source" in
Signature · 1 line
1.4.2.1.g94da7
Re: [PATCH 1/2] Fetch: default remote repository from branch properties
You would need a new test in the testsuite for this.
-- >8 --
[PATCH] Add t5510 to test per branch configuration affecting git-fetch.
--- t/t5510-fetch.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 44 insertions(+), 0 deletions(-)
t/t5510-fetch.sh new file +44 -0
@@ -0,0 +1,44 @@ +#!/bin/sh +# Copyright (c) 2006, Junio C Hamano. + +test_description='Per branch config variables affects "git fetch". + +' + +. ./test-lib.sh + +D=`pwd` + +test_expect_success setup ' + echo >file original && + git add file && + git commit -a -m original' + +test_expect_success "clone and setup child repos" ' + git clone . one && + cd one && + echo >file updated by one && + git commit -a -m "updated by one" && + cd .. && + git clone . two && + cd two && + git repo-config branch.master.remote one && + { + echo "URL: ../one/.git/" + echo "Pull: refs/heads/master:refs/heads/one" + } >.git/remotes/one +' + +test_expect_success "fetch test" ' + cd "$D" && + echo >file updated by origin && + git commit -a -m "updated by origin" && + cd two && + git fetch && + test -f .git/refs/heads/one && + mine=`git rev-parse refs/heads/one` && + his=`cd ../one && git rev-parse refs/heads/master` && + test "z$mine" = "z$his" +' + +test_done
Signature · 1 line
1.4.2.1.ga89e
PATCH 2/2 Fetch: get the remote branches to merge from the branch properties
In reply to Santi BéjarIf in branch "foo" and this in config:
[branch "foo"]
merge=bar
"git fetch": fetch from the default repository and program the "bar"
branch to be merged with pull.
--- Documentation/config.txt | 4 ++++ git-parse-remote.sh | 30 ++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-)
Documentation/config.txt +4 -0
@@ -122,6 +122,10 @@ apply.whitespace:: branch.<name>.remote:: When in branch <name>, it tells `git fetch` which remote to fetch. +branch.<name>.merge:: + When in branch <name>, it tells `git fetch` the default remote branch + to be merged. + pager.color:: A boolean to enable/disable colored output when the pager is in use (default is true).
git-parse-remote.sh +22 -8
@@ -92,9 +92,22 @@ get_remote_default_refs_for_push () { # Subroutine to canonicalize remote:local notation. canon_refs_list_for_fetch () { - # Leave only the first one alone; add prefix . to the rest + # If called from get_remote_default_refs_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. - dot_prefix= + if test "$1" = "-d" + then + shift ; remote="$1" ; shift + if test "$remote" = "$(get_default_remote)" + then + curr_branch=$(git-symbolic-ref HEAD | \ + sed -e 's|^refs/heads/||') + merge_branches=$(git-repo-config \ + --get-all "branch.${curr_branch}.merge") + fi + fi + [ -z "$merge_branches" ] && merge_branches=$1 for ref do force=
@@ -107,6 +120,11 @@ canon_refs_list_for_fetch () { expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:" remote=$(expr "z$ref" : 'z\([^:]*\):') local=$(expr "z$ref" : 'z[^:]*:\(.*\)') + dot_prefix=. + for merge_branch in $merge_branches + do + [ "$remote" = "$merge_branch" ] && dot_prefix= && break + done case "$remote" in '') remote=HEAD ;; refs/heads/* | refs/tags/* | refs/remotes/*) ;;
@@ -126,7 +144,6 @@ canon_refs_list_for_fetch () { die "* refusing to create funny ref '$local_ref_name' locally" fi echo "${dot_prefix}${force}${remote}:${local}" - dot_prefix=. done }
@@ -137,7 +154,7 @@ get_remote_default_refs_for_fetch () { '' | config-partial | branches-partial) echo "HEAD:" ;; config) - canon_refs_list_for_fetch \ + canon_refs_list_for_fetch -d "$1" \ $(git-repo-config --get-all "remote.$1.fetch") ;; branches) remote_branch=$(sed -ne '/#/s/.*#//p' "$GIT_DIR/branches/$1")
@@ -145,10 +162,7 @@ get_remote_default_refs_for_fetch () { echo "refs/heads/${remote_branch}:refs/heads/$1" ;; remotes) - # This prefixes the second and later default refspecs - # with a '.', to signal git-fetch to mark them - # not-for-merge. - canon_refs_list_for_fetch $(sed -ne '/^Pull: */{ + canon_refs_list_for_fetch -d "$1" $(sed -ne '/^Pull: */{ s///p }' "$GIT_DIR/remotes/$1") ;;
Signature · 1 line
1.4.2.1.g94da7
Re: [PATCH 2/2] Fetch: get the remote branches to merge from the branch properties
Quoted 9 lines · Santi Béjar
If in branch "foo" and this in config:
[branch "foo"]
merge=bar"git fetch": fetch from the default repository and program the "bar"
branch to be merged with pull.Signed-off-by Santi Béjar <[email protected]>
This still breaks t5700 test the same way as the earlier one.