Skip to content

Commit

Permalink
Merge branch 'mh/git-svn-automkdirs'
Browse files Browse the repository at this point in the history
* mh/git-svn-automkdirs:
  git-svn: add an option to skip the creation of empty directories
  • Loading branch information
Junio C Hamano committed Apr 27, 2011
2 parents 95fd6e2 + 55f9d7a commit 698a9ab
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 2 deletions.
10 changes: 10 additions & 0 deletions Documentation/git-svn.txt
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,8 @@ Any other arguments are passed directly to 'git log'
Empty directories are automatically recreated when using
"git svn clone" and "git svn rebase", so "mkdirs" is intended
for use after commands like "git checkout" or "git reset".
(See the svn-remote.<name>.automkdirs config file option for
more information.)

'commit-diff'::
Commits the diff of two tree-ish arguments from the
Expand Down Expand Up @@ -680,6 +682,14 @@ svn.pathnameencoding::
locales to avoid corrupted file names with non-ASCII characters.
Valid encodings are the ones supported by Perl's Encode module.

svn-remote.<name>.automkdirs::
Normally, the "git svn clone" and "git svn rebase" commands
attempt to recreate empty directories that are in the
Subversion repository. If this option is set to "false", then
empty directories will only be created if the "git svn mkdirs"
command is run explicitly. If unset, 'git svn' assumes this
option to be "true".

Since the noMetadata, rewriteRoot, rewriteUUID, useSvnsyncProps and useSvmProps
options all affect the metadata generated and used by 'git svn'; they
*must* be set in the configuration file before any history is imported
Expand Down
17 changes: 15 additions & 2 deletions git-svn.perl
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,15 @@ sub cmd_find_rev {
print "$result\n" if $result;
}

sub auto_create_empty_directories {
my ($gs) = @_;
my $var = eval { command_oneline('config', '--get', '--bool',
"svn-remote.$gs->{repo_id}.automkdirs") };
# By default, create empty directories by consulting the unhandled log,
# but allow setting it to 'false' to skip it.
return !($var && $var eq 'false');
}

sub cmd_rebase {
command_noisy(qw/update-index --refresh/);
my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');
Expand All @@ -807,7 +816,9 @@ sub cmd_rebase {
$_fetch_all ? $gs->fetch_all : $gs->fetch;
}
command_noisy(rebase_cmd(), $gs->refname);
$gs->mkemptydirs;
if (auto_create_empty_directories($gs)) {
$gs->mkemptydirs;
}
}

sub cmd_show_ignore {
Expand Down Expand Up @@ -1245,7 +1256,9 @@ sub post_fetch_checkout {
command_noisy(qw/read-tree -m -u -v HEAD HEAD/);
print STDERR "Checked out HEAD:\n ",
$gs->full_url, " r", $gs->last_rev, "\n";
$gs->mkemptydirs($gs->last_rev);
if (auto_create_empty_directories($gs)) {
$gs->mkemptydirs($gs->last_rev);
}
}

sub complete_svn_url {
Expand Down
17 changes: 17 additions & 0 deletions t/t9146-git-svn-empty-dirs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,23 @@ test_expect_success 'empty directories exist' '
)
'

test_expect_success 'option automkdirs set to false' '
(
git svn init "$svnrepo" cloned-no-mkdirs &&
cd cloned-no-mkdirs &&
git config svn-remote.svn.automkdirs false &&
git svn fetch &&
for i in a b c d d/e d/e/f "weird file name"
do
if test -d "$i"
then
echo >&2 "$i exists"
exit 1
fi
done
)
'

test_expect_success 'more emptiness' '
svn_cmd mkdir -m "bang bang" "$svnrepo"/"! !"
'
Expand Down

0 comments on commit 698a9ab

Please sign in to comment.