git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC/PATCH] Per branch properties for pull

From
SBSanti Béjar <sbejar@gmail.com>
Date
Jul 21, 2006, 14:51 UTC
Message-ID
<87hd1b9fjq.fsf@gmail.com>
It extracts all the information for pull from the config file.
If you have a config file as:
[branch "master"]
        remote=origin
        merge=next          #the remote name
        octopus=octopus
        twohead=recursive

When doing a "git pull" without extra parameters in the master branch it will fetch the origin remote repository and will merge the next branch (the remote name).

And you can also put the equivalent of the pull.{octopus,twohead} options for each branch.

This only changes the behavour when these keys exist and when git-pull is used without extra parameters.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
---
Hi *,
   Now that we have the arbitrary keys in the config file...
   It does not affect the integrator that pulls from different
   places. I don't know exactly what is needed but just for discuss it
   could be something as:
[branch "master"]
        remote=net
        remote=ata
        merge=for-linus from ata
        merge=upstream from net
diff --git a/git-pull.sh b/git-pull.sh
index f380437..e7630b1 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -44,6 +44,14 @@ do
 	shift
 done
 
+if [ $# -eq 0 ] ; then
+    default=yes
+    curr_branch=$(git-symbolic-ref HEAD)
+    curr_branch=${curr_branch##refs/heads/}
+    remote=$(git-repo-config --get "branch.$curr_branch.remote")
+    test "$remote" && set x "$remote" && shift
+fi
+
 orig_head=$(git-rev-parse --verify HEAD) || die "Pulling into a black hole?"
 git-fetch --update-head-ok --reflog-action=pull "$@" || exit 1
 
@@ -70,9 +78,19 @@ to recover.'
 
 fi
 
+if [ "$default" == yes ] ; then
+    merge_head=$(git repo-config --get-all "branch.$curr_branch.merge")
+    for ref in $merge_head ; do
+	refspec=$(git-repo-config --get "remote.$remote.fetch" "^$ref:")
+	[ -z "$refspec" ] && die "Branch $ref does not exist in the repository: $remote."
+	locref="$locref ${refspec##$ref:}"
+    done
+    merge_head=$locref
+else
 merge_head=$(sed -e '/	not-for-merge	/d' \
 	-e 's/	.*//' "$GIT_DIR"/FETCH_HEAD | \
 	tr '\012' ' ')
+fi
 
 case "$merge_head" in
 '')
@@ -85,6 +103,11 @@ case "$merge_head" in
 	then
 		strategy_default_args="-s $var"
 	fi
+	var=`git-repo-config --get branch.$curr_branch.octopus`
+	if test -n "$var"
+	then
+		strategy_default_args="-s $var"
+	fi
 	;;
 *)
 	var=`git-repo-config --get pull.twohead`
@@ -92,6 +115,11 @@ case "$merge_head" in
         then
 		strategy_default_args="-s $var"
 	fi
+	var=`git-repo-config --get branch.$curr_branch.twohead`
+	if test -n "$var"
+        then
+		strategy_default_args="-s $var"
+	fi
 	;;
 esac
 
Next: Junio C Hamano
Message 1 of 3 in “Per branch properties for pull”
  1. Per branch properties for pullSanti Béjar, Jul 21, 2006
  2. Junio C HamanoJul 24, 2006
  3. SantiJul 24, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.