git-fetch: allow forcing glob pattern in refspec
authorJunio C Hamano <junkio@cox.net>
Sat, 25 Nov 2006 09:10:10 +0000 (01:10 -0800)
committerJunio C Hamano <junkio@cox.net>
Sat, 25 Nov 2006 09:10:10 +0000 (01:10 -0800)
Building on top of the earlier refspec glob pattern enhancement,
this allows a glob pattern to say the updates should be forced
by prefixing it with '+' as usual, like this:

Pull: +refs/heads/*:refs/remotes/origin/*

Signed-off-by: Junio C Hamano <junkio@cox.net>
git-parse-remote.sh

index e281b7c6ebd5515d74201869574eed6077f37c9d..19bc3857d17b74324edbad58156a3e3c85fe0497 100755 (executable)
@@ -99,13 +99,17 @@ get_remote_default_refs_for_push () {
 expand_refs_wildcard () {
        for ref
        do
+               lref=${ref#'+'}
                # a non glob pattern is given back as-is.
-               expr "z$ref" : 'zrefs/.*/\*:refs/.*/\*$' >/dev/null || {
+               expr "z$lref" : 'zrefs/.*/\*:refs/.*/\*$' >/dev/null || {
                        echo "$ref"
                        continue
                }
-               from=`expr "z$ref" : 'z\(refs/.*/\)\*:refs/.*/\*$'`
-               to=`expr "z$ref" : 'zrefs/.*/\*:\(refs/.*/\)\*$'`
+
+               from=`expr "z$lref" : 'z\(refs/.*/\)\*:refs/.*/\*$'`
+               to=`expr "z$lref" : 'zrefs/.*/\*:\(refs/.*/\)\*$'`
+               local_force=
+               test "z$lref" = "z$ref" || local_force='+'
                echo "$ls_remote_result" |
                (
                        IFS='   '
@@ -117,7 +121,7 @@ expand_refs_wildcard () {
                                then
                                        continue
                                fi
-                               echo "${name}:${to}${mapped}"
+                               echo "${local_force}${name}:${to}${mapped}"
                        done
                )
        done