git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fetch/parse-remote: refs/remotes/* support
@ 2006-03-09 11:54 Eric Wong
  2006-03-09 11:55 ` [PATCH] clone: add refs/remotes/* to Pull: targets when cloning Eric Wong
  2006-03-09 17:23 ` [PATCH] fetch/parse-remote: refs/remotes/* support Junio C Hamano
  0 siblings, 2 replies; 5+ messages in thread
From: Eric Wong @ 2006-03-09 11:54 UTC (permalink / raw)
  To: git, Junio C Hamano

Signed-off-by: Eric Wong <normalperson@yhbt.net>

---

 git-fetch.sh        |    5 ++++-
 git-parse-remote.sh |    8 ++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

34f9d6c64bd686f29db4cd410882aab607e1b628
diff --git a/git-fetch.sh b/git-fetch.sh
index 0346d4a..2748573 100755
--- a/git-fetch.sh
+++ b/git-fetch.sh
@@ -103,6 +103,9 @@ append_fetch_head () {
     refs/tags/*)
 	note_="$(expr "$remote_name_" : 'refs/tags/\(.*\)')"
 	note_="tag '$note_' of " ;;
+    refs/remotes/*)
+	note_="$(expr "$remote_name_" : 'refs/remotes/\(.*\)')"
+	note_="remote branch '$note_' of " ;;
     *)
 	note_="$remote_name of " ;;
     esac
@@ -150,7 +153,7 @@ fast_forward_local () {
 	git-update-ref "$1" "$2" 
 	;;
 
-    refs/heads/*)
+    refs/heads/* | refs/remotes/*)
 	# $1 is the ref being updated.
 	# $2 is the new value for the ref.
 	local=$(git-rev-parse --verify "$1^0" 2>/dev/null)
diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index 5f158c6..63f2281 100755
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -86,14 +86,14 @@ canon_refs_list_for_fetch () {
 		local=$(expr "$ref" : '[^:]*:\(.*\)')
 		case "$remote" in
 		'') remote=HEAD ;;
-		refs/heads/* | refs/tags/*) ;;
-		heads/* | tags/* ) remote="refs/$remote" ;;
+		refs/heads/* | refs/tags/* | refs/remotes/*) ;;
+		heads/* | tags/* | remotes/* ) remote="refs/$remote" ;;
 		*) remote="refs/heads/$remote" ;;
 		esac
 		case "$local" in
 		'') local= ;;
-		refs/heads/* | refs/tags/*) ;;
-		heads/* | tags/* ) local="refs/$local" ;;
+		refs/heads/* | refs/tags/* | refs/remotes/*) ;;
+		heads/* | tags/* | remotes/* ) local="refs/$local" ;;
 		*) local="refs/heads/$local" ;;
 		esac
 
-- 
1.2.4.ga2910

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH] clone: add refs/remotes/* to Pull: targets when cloning
  2006-03-09 11:54 [PATCH] fetch/parse-remote: refs/remotes/* support Eric Wong
@ 2006-03-09 11:55 ` Eric Wong
  2006-03-09 18:23   ` Junio C Hamano
  2006-03-09 17:23 ` [PATCH] fetch/parse-remote: refs/remotes/* support Junio C Hamano
  1 sibling, 1 reply; 5+ messages in thread
From: Eric Wong @ 2006-03-09 11:55 UTC (permalink / raw)
  To: git, Junio C Hamano

Signed-off-by: Eric Wong <normalperson@yhbt.net>

---

 git-clone.sh |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

be2db2344099b3713c1136e84bab7390b6198895
diff --git a/git-clone.sh b/git-clone.sh
index 4ed861d..a8ab7fd 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -249,6 +249,12 @@ Pull: $head_points_at:$origin" &&
 			test "$origin" = "$head" ||
 			echo "Pull: ${head}:${head}"
 		done >>"$GIT_DIR/remotes/origin"
+		(test -d "$GIT_DIR"/refs/remotes && cd "$GIT_DIR" &&
+		 find "refs/remotes" -type f -print | sed -e 's|^refs/||') |
+		while read ref
+		do
+			echo "Pull: $ref:$ref"
+		done >>"$GIT_DIR/remotes/origin"
 	esac
 
 	case "$no_checkout" in
-- 
1.2.4.ga2910

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] fetch/parse-remote: refs/remotes/* support
  2006-03-09 11:54 [PATCH] fetch/parse-remote: refs/remotes/* support Eric Wong
  2006-03-09 11:55 ` [PATCH] clone: add refs/remotes/* to Pull: targets when cloning Eric Wong
@ 2006-03-09 17:23 ` Junio C Hamano
  2006-03-10 12:19   ` [PATCH] fetch,parse-remote,fmt-merge-msg: " Eric Wong
  1 sibling, 1 reply; 5+ messages in thread
From: Junio C Hamano @ 2006-03-09 17:23 UTC (permalink / raw)
  To: Eric Wong; +Cc: git


> @@ -103,6 +103,9 @@ append_fetch_head () {
>      refs/tags/*)
>  	note_="$(expr "$remote_name_" : 'refs/tags/\(.*\)')"
>  	note_="tag '$note_' of " ;;
> +    refs/remotes/*)
> +	note_="$(expr "$remote_name_" : 'refs/remotes/\(.*\)')"
> +	note_="remote branch '$note_' of " ;;
>      *)
>  	note_="$remote_name of " ;;
>      esac

I vaguely recall that if you touch this part of the code you
would also need to check if fmt-merge-msg does sensible thing
for it.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] clone: add refs/remotes/* to Pull: targets when cloning
  2006-03-09 11:55 ` [PATCH] clone: add refs/remotes/* to Pull: targets when cloning Eric Wong
@ 2006-03-09 18:23   ` Junio C Hamano
  0 siblings, 0 replies; 5+ messages in thread
From: Junio C Hamano @ 2006-03-09 18:23 UTC (permalink / raw)
  To: Eric Wong; +Cc: git

Eric Wong <normalperson@yhbt.net> writes:

> diff --git a/git-clone.sh b/git-clone.sh
> index 4ed861d..a8ab7fd 100755
> --- a/git-clone.sh
> +++ b/git-clone.sh
> @@ -249,6 +249,12 @@ Pull: $head_points_at:$origin" &&
>  			test "$origin" = "$head" ||
>  			echo "Pull: ${head}:${head}"
>  		done >>"$GIT_DIR/remotes/origin"
> +		(test -d "$GIT_DIR"/refs/remotes && cd "$GIT_DIR" &&
> +		 find "refs/remotes" -type f -print | sed -e 's|^refs/||') |
> +		while read ref
> +		do
> +			echo "Pull: $ref:$ref"
> +		done >>"$GIT_DIR/remotes/origin"
>  	esac

I am not sure I agree with what you are doing here.  I thought
the idea behind refs/remotes is to migrate away from copying all
the remote heads into refs/heads (so that Linus does not need to
see my "next" and "pu" under his refs/heads), and putting
foreign SCM tracking branches used by SVN and CVS importers in
there instead of in refs/heads naturally falls out from that
pattern.

Now I do not propose to change the current clone that
contaminates the local branch namespace by copying remote
refs/heads into local refs/heads in the middle of v1.3.0
development without laying out a transition plan, but I think
that is a sensible future direction.  Instead of copying
everything from refs/heads to refs/heads, we only copy what
remote HEAD points at to refs/heads/master to initialize the
local clone, and copy everything from refs/heads to
refs/remotes, _and_ set up Pull: lines to do the same tracking.
The part of the code you are touching corresponds to the last
part.

We would probably be better off not doing this right now.  When
we are sure everybody thinks it is a better approach to use
refs/remotes for remote branch tracking, we would need to change
the part you did not change (I think the clone-pack part is the
hardest to change since it has a built-in "copy refs to matching
locations" logic) alongside with the part you touched with this
patch to make things consistent.  At that time also you would
need to remove several lines above the part you touched so that
we do not use local refs/heads/* for tracking.

How does that sound?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] fetch,parse-remote,fmt-merge-msg: refs/remotes/* support
  2006-03-09 17:23 ` [PATCH] fetch/parse-remote: refs/remotes/* support Junio C Hamano
@ 2006-03-10 12:19   ` Eric Wong
  0 siblings, 0 replies; 5+ messages in thread
From: Eric Wong @ 2006-03-10 12:19 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Note: This replaces the previous patch to fetch and parse-remote.

We can now easily fetch and merge things from heads in the
refs/remotes/ hierarchy in remote repositories.

The refs/remotes/ hierarchy is likely to become the standard for
tracking foreign SCMs, as well as the location of Pull: targets
for non-master heads of newly cloned repositories.

Signed-off-by: Eric Wong <normalperson@yhbt.net>

---

 git-fetch.sh           |    8 +++++++-
 git-fmt-merge-msg.perl |    8 ++++++++
 git-parse-remote.sh    |    8 ++++----
 3 files changed, 19 insertions(+), 5 deletions(-)

6697c83da96b26739c3fe33c8526da6124cea909
diff --git a/git-fetch.sh b/git-fetch.sh
index 0346d4a..11e9a9d 100755
--- a/git-fetch.sh
+++ b/git-fetch.sh
@@ -94,6 +94,9 @@ append_fetch_head () {
     # remote-nick is the URL given on the command line (or a shorthand)
     # remote-name is the $GIT_DIR relative refs/ path we computed
     # for this refspec.
+
+    # the $note_ variable will be fed to git-fmt-merge-msg for further
+    # processing.
     case "$remote_name_" in
     HEAD)
 	note_= ;;
@@ -103,6 +106,9 @@ append_fetch_head () {
     refs/tags/*)
 	note_="$(expr "$remote_name_" : 'refs/tags/\(.*\)')"
 	note_="tag '$note_' of " ;;
+    refs/remotes/*)
+	note_="$(expr "$remote_name_" : 'refs/\(remotes/.*\)')"
+	note_="remote branch '$note_' of " ;;
     *)
 	note_="$remote_name of " ;;
     esac
@@ -150,7 +156,7 @@ fast_forward_local () {
 	git-update-ref "$1" "$2" 
 	;;
 
-    refs/heads/*)
+    refs/heads/* | refs/remotes/*)
 	# $1 is the ref being updated.
 	# $2 is the new value for the ref.
 	local=$(git-rev-parse --verify "$1^0" 2>/dev/null)
diff --git a/git-fmt-merge-msg.perl b/git-fmt-merge-msg.perl
index afe80e6..5986e54 100755
--- a/git-fmt-merge-msg.perl
+++ b/git-fmt-merge-msg.perl
@@ -75,6 +75,7 @@ while (<>) {
 		$src{$src} = {
 			BRANCH => [],
 			TAG => [],
+			R_BRANCH => [],
 			GENERIC => [],
 			# &1 == has HEAD.
 			# &2 == has others.
@@ -91,6 +92,11 @@ while (<>) {
 		push @{$src{$src}{TAG}}, $1;
 		$src{$src}{HEAD_STATUS} |= 2;
 	}
+	elsif (/^remote branch (.*)$/) {
+		$origin = $1;
+		push @{$src{$src}{R_BRANCH}}, $1;
+		$src{$src}{HEAD_STATUS} |= 2;
+	}
 	elsif (/^HEAD$/) {
 		$origin = $src;
 		$src{$src}{HEAD_STATUS} |= 1;
@@ -123,6 +129,8 @@ for my $src (@src) {
 	}
 	push @this, andjoin("branch ", "branches ",
 			   $src{$src}{BRANCH});
+	push @this, andjoin("remote branch ", "remote branches ",
+			   $src{$src}{R_BRANCH});
 	push @this, andjoin("tag ", "tags ",
 			   $src{$src}{TAG});
 	push @this, andjoin("commit ", "commits ",
diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index 5f158c6..63f2281 100755
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -86,14 +86,14 @@ canon_refs_list_for_fetch () {
 		local=$(expr "$ref" : '[^:]*:\(.*\)')
 		case "$remote" in
 		'') remote=HEAD ;;
-		refs/heads/* | refs/tags/*) ;;
-		heads/* | tags/* ) remote="refs/$remote" ;;
+		refs/heads/* | refs/tags/* | refs/remotes/*) ;;
+		heads/* | tags/* | remotes/* ) remote="refs/$remote" ;;
 		*) remote="refs/heads/$remote" ;;
 		esac
 		case "$local" in
 		'') local= ;;
-		refs/heads/* | refs/tags/*) ;;
-		heads/* | tags/* ) local="refs/$local" ;;
+		refs/heads/* | refs/tags/* | refs/remotes/*) ;;
+		heads/* | tags/* | remotes/* ) local="refs/$local" ;;
 		*) local="refs/heads/$local" ;;
 		esac
 
-- 
1.2.4.gbe2d

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-03-10 12:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-09 11:54 [PATCH] fetch/parse-remote: refs/remotes/* support Eric Wong
2006-03-09 11:55 ` [PATCH] clone: add refs/remotes/* to Pull: targets when cloning Eric Wong
2006-03-09 18:23   ` Junio C Hamano
2006-03-09 17:23 ` [PATCH] fetch/parse-remote: refs/remotes/* support Junio C Hamano
2006-03-10 12:19   ` [PATCH] fetch,parse-remote,fmt-merge-msg: " Eric Wong

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).