git-svn: Allow deep branch names by supporting multi-globs

Some repositories use a deep branching strategy, such as:

    branches/1.0/1.0.rc1
    branches/1.0/1.0.rc2
    branches/1.0/1.0.rtm
    branches/1.0/1.0.gold

Only allowing a single glob stiffles this.

This change allows for a single glob 'set' to accept this deep
branching strategy.

The ref glob depth must match the branch glob depth.  When using
the -b or -t options for init or clone, this is automatically
done.

For example, using the above branches:

  svn-remote.svn.branches = branches/*/*:refs/remote/*/*

gives the following branch names:

  1.0/1.0.rc1
  1.0/1.0.rc2
  1.0/1.0.rtm
  1.0/1.0.gold

[ew:
  * removed unrelated line-wrapping changes
  * fixed line-wrapping in a few more places
  * removed trailing whitespace
  * fixed bashism in test
  * removed unnecessary httpd startup in test
  * changed copyright on tests to 2008 Marcus Griep
  * added executable permissions to new tests
]

Signed-off-by: Marcus Griep <marcus@griep.us>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Marcus Griep
2008-08-08 01:41:57 -07:00
committed by Junio C Hamano
parent b47ddefe02
commit 570d35c26d
4 changed files with 246 additions and 20 deletions

View File

@ -53,7 +53,8 @@ test_expect_success 'test refspec globbing' '
test "`git rev-parse refs/remotes/tags/end~1`" = \
"`git rev-parse refs/remotes/branches/start`" &&
test "`git rev-parse refs/remotes/branches/start~2`" = \
"`git rev-parse refs/remotes/trunk`"
"`git rev-parse refs/remotes/trunk`" &&
test_must_fail git rev-parse refs/remotes/tags/end@3
'
echo try to try > expect.two
@ -85,8 +86,8 @@ test_expect_success 'test left-hand-side only globbing' '
test_cmp expect.two output.two
'
echo "Only one '*' wildcard expansion is supported (got 2): 'branches/*/*'" \
> expect.three
echo "Only one set of wildcard directories" \
"(e.g. '*' or '*/*/*') is supported: 'branches/*/t/*'" > expect.three
echo "" >> expect.three
test_expect_success 'test disallow multi-globs' '
@ -94,7 +95,7 @@ test_expect_success 'test disallow multi-globs' '
git config --add svn-remote.three.fetch \
trunk:refs/remotes/three/trunk &&
git config --add svn-remote.three.branches \
"branches/*/*:refs/remotes/three/branches/*" &&
"branches/*/t/*:refs/remotes/three/branches/*" &&
git config --add svn-remote.three.tags \
"tags/*/*:refs/remotes/three/tags/*" &&
(