#!/usr/bin/perl
#
# Tidies up the output of svn2cl to clean it up a touch.
# It is fancier than before, but probably no better written.
#     (though there are noticably more comments!)


my $inFileList = 0;
my $stuff      = "";
my $prefix     = "trunk/net-snmp/";

if ( $ARGV[0] =~ /^V/ ) {
    $b = shift @ARGV;
    $prefix    = "branches/$b/net-snmp/";
}

$line1 = <>;
if ( $line1 !~ /^svn/ ) { print $line1; }
while (<>) {
    s/^\t/ /;
    #
    # Note when we're just starting to look at
    #   the list of files....
    #
    if (/^ *\*/) {
        $_ =~ s/^ *\* //;
        $inFileList = 1;
        $stuff = "";
    }
    if ( $inFileList ) { 
        #
        #  ... and filter out just those from the branch
        #      that we're working with.
        #
        if (/$prefix/) { 
            #
            #  XXX: This code implicitly assumes that each entry
            #       appears on a separate line.  Which is *probably*
            #       true given the folding done by svn2cl.
            #         But short paths (e.g. top-level files) may
            #       break this assumption, as would extending the
            #       folding point for svn2cl
            # ToDo:   Strip the prefix (or skip the entry) for
            #       each token individually, rather than per-line.
            #
            $z = $_;
            $z =~ s/[ \t]*$prefix/ /;
            $stuff .= $z;
        } else {
            $stuff .= " ".$_;
        }
        if ( /:/ ) {
            #
            # At the end of this list, we need to reformat it
            #   so that the lines aren't too long or too short
            #
            # Flatten things into a single line,
            #   and make sure it ends in a colon
            $stuff =~ s/\n//g;
            if ( $stuff =~ /,$/) { $stuff =~ s/,$/:/; }

            #
            #  If the line is too long, then start re-folding it
            #
            if ( $stuff =~ /.{70}/ ) {
                @z = split /\s/, $stuff;
                $line = "*";
                while ($#z >= 0) {
                    $z = shift @z;
                    if ( "$line $z" =~ /.{70}/ ) {
                        print "   $line\n";
                        $line = "   $z";
                    } else {
                        $line .= " $z";
                    }
                }
                print "   $line\n\n";
            } else {
                #
                #  Otherwise, print the list as it stands
                #
                print "   *$stuff\n\n";
            }
            $stuff = "";
            $inFileList = 0;
        }
    } else {

        #
        # If we're not processing the list of files,
        #   then just pass things through.
        print $_;
    }
}
