Changeset 284

Show
Ignore:
Timestamp:
01/27/2007 06:49:31 PM
Author:
luedi
Message:

added first support for auto_props, see #13
use the --auto_props commandline switch to specify a subversion style configuration file

Currently the code does not work, if the item is "binary" since all automatic properties will be overridden by the binary flag in Node::set_initial_props.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/script/Vss2Svn/Dumpfile.pm

    r280 r284  
    33use Vss2Svn::Dumpfile::Node; 
    44use Vss2Svn::Dumpfile::SanityChecker; 
     5use Vss2Svn::Dumpfile::AutoProps; 
     6 
    57require Time::Local; 
    68 
     
    3335############################################################################### 
    3436sub new { 
    35     my($class, $fh) = @_; 
     37    my($class, $fh, $autoprops) = @_; 
    3638 
    3739    my $self = 
     
    4345         version_cache => [], 
    4446         repository => Vss2Svn::Dumpfile::SanityChecker->new(), 
     47         auto_props => $autoprops, 
    4548        }; 
    4649 
     
    202205    my $node = Vss2Svn::Dumpfile::Node->new(); 
    203206    $node->set_initial_props($itempath, $data); 
     207    if (defined $self->{auto_props}) { 
     208        $node->add_props ($self->{auto_props}->get_props ($itempath)); 
     209    } 
     210     
    204211    $node->{action} = 'add'; 
    205212 
     
    725732        foreach my $prop (@$props) { 
    726733            ($key, $value) = @$prop; 
    727             $propout .= 'K ' . length($key) . "\n$key\nV " . length($value) 
    728                 . "\n$value\n"; 
     734            $propout .= 'K ' . length($key) . "\n$key\n"; 
     735            if (defined $value) { 
     736                $propout .= 'V ' . length($value) . "\n$value\n"; 
     737            } 
     738            else { 
     739                $propout .= "V 0\n\n"; 
     740            } 
    729741        } 
    730742 
  • trunk/script/Vss2Svn/Dumpfile/AutoProps.pm

    r281 r284  
    44use strict; 
    55use Config::Ini; 
     6use Text::Glob; 
    67 
    78############################################################################### 
     
    1920    if (defined $enabled && $enabled eq "yes") 
    2021    { 
    21         my ($autoprops) = $self->{config}->get (['auto-props']); 
     22        $self->{autoprops} = $self->{config}->get (['auto-props']); 
    2223    } 
    2324    
     
    2728}  #  End new 
    2829 
     30############################################################################### 
     31#  get_props 
     32############################################################################### 
     33sub get_props { 
     34    my($self, $path) = @_; 
    2935 
     36    my (@newprops); 
     37 
     38    $path =~ s:^/::; 
     39    my @subdirs = split '/', $path; 
     40    my $item = pop(@subdirs); 
     41 
     42    my ($glob, $autoprops); 
     43    while (($glob, $autoprops) = each %{ $self->{autoprops} }) { 
     44        print $glob, $item, "\n"; 
     45        if (Text::Glob::match_glob($glob, $item)) { 
     46            foreach my $autoprop (@$autoprops) 
     47            { 
     48                my @props = split ';', $autoprop; 
     49                foreach my $prop (@props) 
     50                { 
     51                    my @keyvalue = split '=', $prop; 
     52                    push @newprops, [@keyvalue]; 
     53                } 
     54            } 
     55        } 
     56    } 
     57     
     58    return @newprops; 
     59} 
    3060 
    3161 
  • trunk/script/Vss2Svn/Dumpfile/Node.pm

    r164 r284  
    3131         copyrev => undef, 
    3232         copypath => undef, 
    33          props => []
     33         props => undef
    3434         hideprops => 0, 
    3535         text => undef, 
     
    6565 
    6666############################################################################### 
     67#  add_props 
     68############################################################################### 
     69sub add_props { 
     70    my($self, @props) = @_; 
     71    push @{ $self->{props} }, @props; 
     72}  #  End add_props 
     73 
     74############################################################################### 
    6775#  get_headers 
    6876############################################################################### 
  • trunk/script/vss2svn.pl

    r279 r284  
    834834    $action_sth = $gCfg{dbh}->prepare($sql); 
    835835 
    836     my $dumpfile = Vss2Svn::Dumpfile->new($fh); 
     836    my $autoprops = Vss2Svn::Dumpfile::AutoProps->new() if $gCfg{auto_props}; 
     837    my $dumpfile = Vss2Svn::Dumpfile->new($fh, $autoprops); 
    837838 
    838839REVISION: 
     
    11221123        $rv = 0; 
    11231124    } elsif ($?) { 
    1124         &ThrowWarning(sprintf "FAILED with non-zero exit status %d", $? >> 8); 
     1125        &ThrowWarning(sprintf "FAILED with non-zero exit status %d (cmd: %s)", $? >> 8, $cmd); 
    11251126        die unless $allowfail; 
    11261127 
     
    15771578sub Initialize { 
    15781579    GetOptions(\%gCfg,'vssdir=s','tempdir=s','dumpfile=s','resume','verbose', 
    1579                'debug','timing+','task=s','revtimerange=i','ssphys=s','encoding=s','trunkdir=s'); 
     1580               'debug','timing+','task=s','revtimerange=i','ssphys=s','encoding=s', 
     1581               'trunkdir=s', 'auto_props=s'); 
    15801582 
    15811583    &GiveHelp("Must specify --vssdir") if !defined($gCfg{vssdir}); 
     
    17261728    --trunkdir        : Specify where to map the VSS Project Root in the 
    17271729                        converted repository (default = "/") 
     1730    --auto_props      : Specify an autoprops ini file to use, e.g. 
     1731                        --auto_props="c:/Dokumente und Einstellungen/user/Anwendungsdaten/Subversion/config"  
    17281732EOTXT 
    17291733 

These ads are automatically generated by Google based on the content of this page. Revenue from these ads helps to pay for hosting fees of this site; however, these ads do not constitute an endorsement by PumaCode.org.