To this end, git-parse-remote is grown with a new kind of remote, `builtin'. This returns all the local branches in get_remote_default_refs_for_fetch. This is equivalent to having a fake remote as: [remote "local"] url = . fetch = refs/* Based on a patch from Paolo Bonzini. Signed-off-by: Santi Béjar <sbejar@xxxxxxxxx> --- Documentation/config.txt | 4 ++++ git-parse-remote.sh | 12 +++++++++++- t/t5515-fetch-merge-logic.sh | 2 ++ t/t5515/fetch.br-. | 6 ++++++ t/t5515/fetch.br-.-merge | 6 ++++++ t/t5515/fetch.br-.-merge_. | 6 ++++++ t/t5515/fetch.br-.-octopus | 6 ++++++ t/t5515/fetch.br-.-octopus_. | 6 ++++++ t/t5515/fetch.br-._. | 6 ++++++ t/t5515/fetch.br-unconfig_. | 5 +++++ t/t5515/fetch.master_. | 5 +++++ t/t5520-pull.sh | 13 +++++++++++++ 12 files changed, 76 insertions(+), 1 deletions(-) create mode 100644 t/t5515/fetch.br-. create mode 100644 t/t5515/fetch.br-.-merge create mode 100644 t/t5515/fetch.br-.-merge_. create mode 100644 t/t5515/fetch.br-.-octopus create mode 100644 t/t5515/fetch.br-.-octopus_. create mode 100644 t/t5515/fetch.br-._. diff --git a/Documentation/config.txt b/Documentation/config.txt index 5408dd6..28899d9 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -272,6 +272,10 @@ branch.<name>.merge:: `git fetch`) to lookup the default branch for merging. Without this option, `git pull` defaults to merge the first refspec fetched. Specify multiple values to get an octopus merge. + If you wish to setup `git pull` so that it merges into <name> from + another branch in the local repository, you can point + branch.<name>.merge to the desired branch, and use the special setting + `.` (a period) for branch.<name>.remote. color.branch:: A boolean to enable/disable color in the output of diff --git a/git-parse-remote.sh b/git-parse-remote.sh index 99e7184..84c2c89 100755 --- a/git-parse-remote.sh +++ b/git-parse-remote.sh @@ -9,6 +9,9 @@ get_data_source () { */*) echo '' ;; + .) + echo builtin + ;; *) if test "$(git-config --get "remote.$1.url")" then @@ -31,6 +34,9 @@ get_remote_url () { '') echo "$1" ;; + builtin) + echo "$1" + ;; config) git-config --get "remote.$1.url" ;; @@ -57,7 +63,7 @@ get_default_remote () { get_remote_default_refs_for_push () { data_source=$(get_data_source "$1") case "$data_source" in - '' | branches) + '' | branches | builtin) ;; # no default push mapping, just send matching refs. config) git-config --get-all "remote.$1.push" ;; @@ -128,6 +134,10 @@ get_remote_default_refs_for_fetch () { case "$data_source" in '') set explicit "HEAD:" ;; + builtin) + set glob $(for name in $(git-show-ref | + sed -n 's,.*[ ]refs/,refs/,p') + do echo "$name:" ; done);; config) set $(expand_refs_wildcard "$1" \ $(git-config --get-all "remote.$1.fetch")) ;; diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh index 9759959..e840fe0 100755 --- a/t/t5515-fetch-merge-logic.sh +++ b/t/t5515-fetch-merge-logic.sh @@ -78,6 +78,8 @@ test_expect_success setup ' echo "../.git#one" > .git/branches/branches-one && remotes="$remotes branches-one" && + remotes="$remotes ." && + for remote in $remotes ; do git config branch.br-$remote.remote $remote && git config branch.br-$remote-merge.remote $remote && diff --git a/t/t5515/fetch.br-. b/t/t5515/fetch.br-. new file mode 100644 index 0000000..8878a73 --- /dev/null +++ b/t/t5515/fetch.br-. @@ -0,0 +1,6 @@ +# br-. +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5515/fetch.br-.-merge b/t/t5515/fetch.br-.-merge new file mode 100644 index 0000000..b851578 --- /dev/null +++ b/t/t5515/fetch.br-.-merge @@ -0,0 +1,6 @@ +# br-.-merge +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5515/fetch.br-.-merge_. b/t/t5515/fetch.br-.-merge_. new file mode 100644 index 0000000..2484570 --- /dev/null +++ b/t/t5515/fetch.br-.-merge_. @@ -0,0 +1,6 @@ +# br-.-merge . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5515/fetch.br-.-octopus b/t/t5515/fetch.br-.-octopus new file mode 100644 index 0000000..3f440b1 --- /dev/null +++ b/t/t5515/fetch.br-.-octopus @@ -0,0 +1,6 @@ +# br-.-octopus +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5515/fetch.br-.-octopus_. b/t/t5515/fetch.br-.-octopus_. new file mode 100644 index 0000000..938e9ed --- /dev/null +++ b/t/t5515/fetch.br-.-octopus_. @@ -0,0 +1,6 @@ +# br-.-octopus . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5515/fetch.br-._. b/t/t5515/fetch.br-._. new file mode 100644 index 0000000..9d43858 --- /dev/null +++ b/t/t5515/fetch.br-._. @@ -0,0 +1,6 @@ +# br-. . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5515/fetch.br-unconfig_. b/t/t5515/fetch.br-unconfig_. index 73c937d..455a0ce 100644 --- a/t/t5515/fetch.br-unconfig_. +++ b/t/t5515/fetch.br-unconfig_. @@ -1 +1,6 @@ # br-unconfig . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5515/fetch.master_. b/t/t5515/fetch.master_. index ad16cdc..967d057 100644 --- a/t/t5515/fetch.master_. +++ b/t/t5515/fetch.master_. @@ -1 +1,6 @@ # master . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/HEAD' of . +754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge remote branch 'origin/master' of . +8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge remote branch 'origin/one' of . +0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge remote branch 'origin/three' of . +6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge remote branch 'origin/two' of . diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh index 7eb3783..c424e5b 100755 --- a/t/t5520-pull.sh +++ b/t/t5520-pull.sh @@ -29,5 +29,18 @@ test_expect_success 'checking the results' ' diff file cloned/file ' +test_expect_success 'test . as a remote' ' + + git branch copy master && + git config branch.copy.remote . && + git config branch.copy.merge refs/heads/master && + echo updated >file && + git commit -a -m updated && + git checkout copy && + test `cat file` = file && + git pull && + test `cat file` = updated +' + test_done -- 1.5.0.3.1021.g5897 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html