Hello!

This patch changes cg-pull so that if the branch is not specified, it
takes origin's .git/HEAD without first trying .git/refs/heads/master.
This removes preferential treatment of the "master" branch, allowing the
upstream to use another name for the default branch.  To get the master
branch, users would have to append "#master" to the URL.

Local URL handling needs to be fixed to handle .git/HEAD properly, since
it's a symlink in the upstream directory.  A new flag "-b" for fetch_*
functions is introduced, meaning "dereference" (like in GNU cp).

To do: the code needs refactoring with better option handling.

Signed-off-by: Pavel Roskin <[EMAIL PROTECTED]>

diff --git a/cg-pull b/cg-pull
--- a/cg-pull
+++ b/cg-pull
@@ -67,6 +67,8 @@ pull_progress()
 
 fetch_rsync()
 {
+       [ "$1" = "-b" ] && shift
+
        redir=
        if [ "$1" = "-i" ]; then # ignore-errors
                redir="2>/dev/null"
@@ -108,6 +110,7 @@ pull_rsync()
 
 fetch_http()
 {
+       [ "$1" = "-b" ] && shift
        [ "$1" = "-i" ] && shift
        [ "$1" = "-s" ] && shift
 
@@ -158,6 +161,7 @@ pull_http()
 
 fetch_ssh()
 {
+       [ "$1" = "-b" ] && shift
        [ "$1" = "-i" ] && shift
        [ "$1" = "-s" ] && shift
 
@@ -205,6 +209,11 @@ fetch_local()
        [ "$1" = "-s" ] && shift
 
        cp_flags_l="-vdpR"
+       if [ "$1" = "-b" ]; then
+               cp_flags_l="-vb" # Dereference symlinks
+               shift
+       fi
+
        if [ "$1" = "-u" ]; then
                cp_flags_l="$cp_flags_l -fu$can_hardlink"
                suggest_hardlink=
@@ -255,7 +264,7 @@ name=${ARGS[0]}
 [ "$name" ] || die "where to pull from?"
 uri=$(cat "$_git/branches/$name" 2>/dev/null) || die "unknown branch: $name"
 
-rembranch=master
+rembranch=
 if echo "$uri" | grep -q '#'; then
        rembranch=$(echo $uri | cut -d '#' -f 2)
        uri=$(echo $uri | cut -d '#' -f 1)
@@ -308,13 +317,13 @@ orig_head=
 
 
 mkdir -p $_git/refs/heads
-rsyncerr=
-$fetch -i "$uri/refs/heads/$rembranch" "$_git/refs/heads/.$name-pulling" || 
rsyncerr=1
-if [ "$rsyncerr" ] && [ "$rembranch" = "master" ]; then
-       rsyncerr=
-       $fetch -s "$uri/HEAD" "$_git/refs/heads/.$name-pulling" || rsyncerr=1
+if [ "$rembranch" ]; then
+       $fetch -i "$uri/refs/heads/$rembranch" 
"$_git/refs/heads/.$name-pulling" ||
+               die "unable to get the head pointer of branch $rembranch"
+else
+       $fetch -b -s "$uri/HEAD" "$_git/refs/heads/.$name-pulling" ||
+               die "unable to get the HEAD branch"
 fi
-[ "$rsyncerr" ] && die "unable to get the head pointer of branch $rembranch"
 
 new_head=$(cat "$_git/refs/heads/.$name-pulling")
 if ! [ "$symlinked" ]; then


-- 
Regards,
Pavel Roskin

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to