git-svn: don't allow globs to match regular files

git only tracks the histories of full directories, not
that of individual files.  Sometimes, SVN users will
place[1] a regular file in the directory designated
for subdirectories of branches or tags.

Thanks to jrockway on #git for pointing this out.

[1] mistakenly or otherwise, such as a README

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Eric Wong 2007-04-18 00:17:33 -07:00 committed by Junio C Hamano
parent 1401f46bb4
commit 0c1ec5a1f7
2 changed files with 6 additions and 0 deletions

View File

@ -59,3 +59,7 @@ Fixes since v1.5.1
- git-svn dcommit and rebase was confused by patches that were - git-svn dcommit and rebase was confused by patches that were
merged from another branch that is managed by git-svn. merged from another branch that is managed by git-svn.
- git-svn used to get confused when globbing remote branch/tag
spec (e.g. "branches = proj/branches/*:refs/remotes/origin/*")
is used and there was a plain file that matched the glob.

View File

@ -3162,6 +3162,8 @@ sub match_globs {
my $p = $1; my $p = $1;
my $pathname = $g->{path}->full_path($p); my $pathname = $g->{path}->full_path($p);
next if $exists->{$pathname}; next if $exists->{$pathname};
next if ($self->check_path($pathname, $r) !=
$SVN::Node::dir);
$exists->{$pathname} = Git::SVN->init( $exists->{$pathname} = Git::SVN->init(
$self->{url}, $pathname, undef, $self->{url}, $pathname, undef,
$g->{ref}->full_path($p), 1); $g->{ref}->full_path($p), 1);