* [PATCH 2/3] git-fetch: Support the local remote "."
@ 2007-03-13 16:28 Santi Béjar
2007-03-13 16:53 ` Paolo Bonzini
0 siblings, 1 reply; 3+ messages in thread
From: Santi Béjar @ 2007-03-13 16:28 UTC (permalink / raw)
To: Git Mailing List, Paolo Bonzini; +Cc: Junio C. Hamano
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@gmail.com>
---
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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 2/3] git-fetch: Support the local remote "."
2007-03-13 16:28 [PATCH 2/3] git-fetch: Support the local remote "." Santi Béjar
@ 2007-03-13 16:53 ` Paolo Bonzini
2007-03-13 23:01 ` Santi Béjar
0 siblings, 1 reply; 3+ messages in thread
From: Paolo Bonzini @ 2007-03-13 16:53 UTC (permalink / raw)
To: Santi Béjar; +Cc: Git Mailing List, Paolo Bonzini, Junio C. Hamano
Santi Béjar wrote:
> 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.
Can you please compare the times to do "git fetch ."? The reason
to touch git-fetch.sh was an optimization that Junio requested.
I found my 2nd submission to be 20% faster than the first.
Paolo
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/3] git-fetch: Support the local remote "."
2007-03-13 16:53 ` Paolo Bonzini
@ 2007-03-13 23:01 ` Santi Béjar
0 siblings, 0 replies; 3+ messages in thread
From: Santi Béjar @ 2007-03-13 23:01 UTC (permalink / raw)
To: bonzini; +Cc: Git Mailing List, Junio C. Hamano
On 3/13/07, Paolo Bonzini <paolo.bonzini@lu.unisi.ch> wrote:
> Santi Béjar wrote:
> > 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.
>
> Can you please compare the times to do "git fetch ."? The reason
> to touch git-fetch.sh was an optimization that Junio requested.
>
> I found my 2nd submission to be 20% faster than the first.
>
> Paolo
>
Yes. But this optimization is independent of this patch, as it already
exists without this (but it gets worse with this patch).
Also, I think, the split in fetch_main should be base on transport and
not on the definition of the remote.
Santi
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-03-13 23:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-13 16:28 [PATCH 2/3] git-fetch: Support the local remote "." Santi Béjar
2007-03-13 16:53 ` Paolo Bonzini
2007-03-13 23:01 ` Santi Béjar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).