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