1#!perl
2
3use strict;
4use warnings;
5
6use Fatal qw( waitpid close );
7use English qw( -no_match_vars );
8
9my %manifest;
10
11## no critic (InputOutput::RequireBriefOpen)
12
13open my $manifest, '<', '../MANIFEST'
14    or Carp::croak("open of MANIFEST failed: $ERRNO");
15
16FILE: while ( my $line = <$manifest> ) {
17    chomp $line;
18    $line =~ s/ \s* [#] .* \z//xms;
19    $manifest{$line} = 1;
20}
21
22close $manifest;
23
24my $pid = open my $rdr, q{-|}, 'svn', 'list', '-R', q{..}
25    or Carp::croak("open of svn list pipe failed: $ERRNO");
26waitpid $pid, 0;
27
28FILE: while ( my $line = <$rdr> ) {
29    chomp $line;
30    next FILE if $line =~ m{ [/] \z }xms;
31    next FILE if -d $line;
32    next FILE if $manifest{$line};
33    print "$line\n" or Carp::croak("Cannot print: $ERRNO");
34}
35