Merge branch 'jc/prune-all'
[gitweb.git] / perl / Git / SVN / Fetcher.pm
index ef8e9ed2a5bf52ba5c14cdfba722bf252ecde6dd..bd174189b98fda05f781697be26db94c9cd53364 100644 (file)
@@ -1,6 +1,7 @@
 package Git::SVN::Fetcher;
-use vars qw/@ISA $_ignore_regex $_preserve_empty_dirs $_placeholder_filename
-            @deleted_gpath %added_placeholder $repo_id/;
+use vars qw/@ISA $_ignore_regex $_include_regex $_preserve_empty_dirs
+            $_placeholder_filename @deleted_gpath %added_placeholder
+            $repo_id/;
 use strict;
 use warnings;
 use SVN::Delta;
@@ -33,6 +34,10 @@ sub new {
        my $v = eval { command_oneline('config', '--get', $k) };
        $self->{ignore_regex} = $v;
 
+       $k = "svn-remote.$repo_id.include-paths";
+       $v = eval { command_oneline('config', '--get', $k) };
+       $self->{include_regex} = $v;
+
        $k = "svn-remote.$repo_id.preserve-empty-dirs";
        $v = eval { command_oneline('config', '--get', '--bool', $k) };
        if ($v && $v eq 'true') {
@@ -57,6 +62,7 @@ sub new {
        $self->{file_prop} = {};
        $self->{absent_dir} = {};
        $self->{absent_file} = {};
+       require Git::IndexInfo;
        $self->{gii} = $git_svn->tmp_index_do(sub { Git::IndexInfo->new });
        $self->{pathnameencoding} = Git::config('svn.pathnameencoding');
        $self;
@@ -82,7 +88,7 @@ sub _mark_empty_symlinks {
        chomp(my $empty_blob = `git hash-object -t blob --stdin < /dev/null`);
        my ($ls, $ctx) = command_output_pipe(qw/ls-tree -r -z/, $cmt);
        local $/ = "\0";
-       my $pfx = defined($switch_path) ? $switch_path : $git_svn->{path};
+       my $pfx = defined($switch_path) ? $switch_path : $git_svn->path;
        $pfx .= '/' if length($pfx);
        while (<$ls>) {
                chomp;
@@ -116,11 +122,18 @@ sub in_dot_git {
 }
 
 # return value: 0 -- don't ignore, 1 -- ignore
+# This will also check whether the path is explicitly included
 sub is_path_ignored {
        my ($self, $path) = @_;
        return 1 if in_dot_git($path);
        return 1 if defined($self->{ignore_regex}) &&
                    $path =~ m!$self->{ignore_regex}!;
+       return 0 if defined($self->{include_regex}) &&
+                   $path =~ m!$self->{include_regex}!;
+       return 0 if defined($_include_regex) &&
+                   $path =~ m!$_include_regex!;
+       return 1 if defined($self->{include_regex});
+       return 1 if defined($_include_regex);
        return 0 unless defined($_ignore_regex);
        return 1 if $path =~ m!$_ignore_regex!o;
        return 0;
@@ -511,6 +524,8 @@ sub stash_placeholder_list {
 1;
 __END__
 
+=head1 NAME
+
 Git::SVN::Fetcher - tree delta consumer for "git svn fetch"
 
 =head1 SYNOPSIS