---
name: "Git::SVN::Fetcher"
section: "3pm"
platform: "linux"
package: "git-svn"
version: "1:2.11.0-3+deb9u7"
release: "Debian 9 (Stretch)"
platforms: ["linux"]
url: "https://new.carta.tech/Git::SVN::Fetcher"
---

# Git::SVN::Fetcher(3pm)

tree delta consumer for "git svn fetch"

## NAME

Git::SVN::Fetcher - tree delta consumer for "git svn fetch"

## SYNOPSIS

```
    use SVN::Core;
    use SVN::Ra;
    use Git::SVN;
    use Git::SVN::Fetcher;
    use Git;
    my $gs = Git::SVN->find_by_url($url);
    my $ra = SVN::Ra->new(url => $url);
    my $editor = Git::SVN::Fetcher->new($gs);
    my $reporter = $ra->do_update($SVN::Core::INVALID_REVNUM, '',
                                  1, $editor);
    $reporter->set_path('', $old_rev, 0);
    $reporter->finish_report;
    my $tree = $gs->tmp_index_do(sub { command_oneline('write-tree') });
    foreach my $path (keys %{$editor->{dir_prop}) {
        my $props = $editor->{dir_prop}{$path};
        foreach my $prop (keys %$props) {
            print "property $prop at $path changed to $props->{$prop}\n";
        }
    }
    foreach my $path (keys %{$editor->{empty}) {
        my $action = $editor->{empty}{$path} ? 'added' : 'removed';
        print "empty directory $path $action\n";
    }
    foreach my $path (keys %{$editor->{file_prop}) { ... }
    foreach my $parent (keys %{$editor->{absent_dir}}) {
        my @children = @{$editor->{abstent_dir}{$parent}};
        print "cannot fetch directory $parent/$_: not authorized?\n"
            foreach @children;
    }
    foreach my $parent (keys %{$editor->{absent_file}) { ... }
```

## DESCRIPTION

This is a subclass of `"SVN::Delta::Editor"`, which means it implements callbacks to act as a consumer of Subversion tree deltas.  This particular implementation of those callbacks is meant to store information about the resulting content which **git svn fetch** could use to populate new commits and new entries for *unhandled.log*. More specifically:

- •

  Additions, removals, and modifications of files are propagated to git-svn's index file *$GIT\_DIR/svn/$refname/index* using **git update-index**.

- •

  Changes in Subversion path properties are recorded in the `"dir_prop"` and `"file_prop"` fields (which are hashes).

- •

  Addition and removal of empty directories are indicated by entries with value 1 and 0 respectively in the `"empty"` hash.

- •

  Paths that are present but cannot be conveyed (presumably due to permissions) are recorded in the `"absent_file"` and `"absent_dirs"` hashes.  For each key, the corresponding value is a list of paths under that directory that were present but could not be conveyed.

The interface is unstable.  Do not use this module unless you are developing git-svn.

## DEPENDENCIES

SVN::Delta from the Subversion perl bindings, the core Carp and File::Basename modules, and git's Git helper module.

`"Git::SVN::Fetcher"` has not been tested using callers other than **git-svn** itself.

## SEE ALSO

SVN::Delta, Git::SVN::Editor.

## INCOMPATIBILITIES

None reported.

## BUGS

None.
