Update of /cvsroot/fink/fink/perlmod/Fink
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28829/perlmod/Fink

Modified Files:
        ChangeLog Engine.pm PkgVersion.pm 
Log Message:
DATABASE FORMAT CHANGE! trees switcheroo

Index: PkgVersion.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/PkgVersion.pm,v
retrieving revision 1.537
retrieving revision 1.538
diff -u -d -r1.537 -r1.538
--- PkgVersion.pm       20 Mar 2006 05:14:11 -0000      1.537
+++ PkgVersion.pm       21 Mar 2006 22:57:57 -0000      1.538
@@ -154,7 +154,7 @@
 {
        # Some things we don't want to load, if we'd rather keep what's already 
in
        # the database.
-       my %dont_load = map { $_ => 1 } qw(_trees);
+       my %dont_load = map { $_ => 1 } qw(_full_trees);
        
        sub load_fields {
                my $self = shift;
@@ -224,7 +224,7 @@
 {
        # Fields required to add a package to $packages
        my @keepfields = qw(_name _epoch _version _revision _filename
-               _pkglist_provides essential _trees);
+               _pkglist_provides essential _full_trees);
                
        sub get_init_fields {
                my $self = shift;
@@ -539,6 +539,7 @@
        # path handling
        if ($filename) {
                @parts = split(/\//, $filename);
+               shift @parts if $parts[0] eq ''; # scrap detritus from leading /
                pop @parts;             # remove filename
                $self->{_patchpath} = join("/", @parts);
                for ($finkinfo_index = $#parts;
@@ -552,7 +553,7 @@
                        $self->{_section}  = 'unknown';
                        $self->{_debpath}  = '/tmp';
                        $self->{_debpaths} = ['/tmp'];
-                       $self->{_trees}    = [ 'unknown' ];
+                       $self->{_full_trees}    = [ [ 'unknown' ] ];
                } else {
                        # compute the "section" of this package, e.g. "net", 
"devel", "crypto"...
                        $section = $parts[$finkinfo_index-1]."/";
@@ -568,9 +569,8 @@
                                push @{$self->{_debpaths}}, join("/", 
@parts[0..$i]);
                        }
                        
-                       # determine the package tree ("stable", "unstable", 
etc.)
-                       @parts = split(/\//, 
substr($filename,length("$basepath/fink/dists/")));
-                       $self->{_trees} = [ $parts[0] ];
+                       # determine the full package tree, eg: [ qw(stable 
main) ]
+                       $self->{_full_trees} = [ [ @parts[3..$finkinfo_index-1] 
] ];
                }
        } else {
                # for dummy descriptions generated from dpkg status data alone
@@ -580,7 +580,7 @@
                $self->{_debpaths}  = [];
                
                # assume "binary" tree
-               $self->{_trees} = [ "binary" ];
+               $self->{_full_trees} = [ [ "binary" ] ];
        }
 
        # some commonly used stuff
@@ -1103,12 +1103,12 @@
 
 sub merge {
        my ($self, $old) = @_;
-       
        # Insert new trees
        {
-               my %seen = map { $_ => 1 } $self->get_trees;
-               foreach my $tree ($old->get_trees) {
-                       unshift @{$self->{_trees}}, $tree unless $seen{$tree}++;
+               my %seen = map { $_ => 1 } $self->get_full_trees;
+               foreach my $tree (@{$old->{_full_trees}}) {
+                       my $txt = join('/', @$tree);
+                       unshift @{$self->{_full_trees}}, $tree unless 
$seen{$txt}++;
                }
        }
        
@@ -1316,6 +1316,7 @@
   my $tree = $pv->get_tree;
 
 Get the last (highest priority) tree in which this package can be found.
+This refers to just the "archive" component of the tree, eg: 'main'.
 
 =cut
 
@@ -1323,7 +1324,7 @@
 
 sub get_tree {
        my $self = shift;
-       return( ($self->get_trees)[-1] );
+       return ( ($self->get_trees)[-1] );
 }
 
 =item get_trees
@@ -1336,7 +1337,7 @@
 
 sub get_trees {
        my $self = shift;
-       return @{$self->{_trees}};
+       return map { $_->[0] } @{$self->{_full_trees}};
 }
 
 =item in_tree
@@ -5214,6 +5215,29 @@
        return lock_wait("$lockfile", exclusive => 1, no_block => 1);
 }
 
+=item get_full_trees
+
+  my @trees = $pv->get_full_trees;
+
+Get the fink.conf trees in which this package is located. This includes both
+the 'Archive' and 'Component', eg: 'stable/main'.
+
+=item get_full_tree
+
+  my $trees = $pv->get_full_tree;
+
+Get the highest priority tree in which this package is located.
+
+=cut
+
+sub get_full_trees {
+       my ($self) = @_;
+       return map { join('/', @$_) } @{$self->{_full_trees}};
+}
+sub get_full_tree {
+       return ($_[0]->get_full_trees)[-1];
+}
+
 =back
 
 =cut

Index: Engine.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/Engine.pm,v
retrieving revision 1.358
retrieving revision 1.359
diff -u -d -r1.358 -r1.359
--- Engine.pm   19 Mar 2006 09:27:48 -0000      1.358
+++ Engine.pm   21 Mar 2006 22:57:53 -0000      1.359
@@ -2214,7 +2214,7 @@
                                printf "%s:\n", $_;
                                print map { " $_=".$value->{$_}."\n" } sort 
keys %$value;
                        } elsif ($_ eq 'trees') {
-                               printf "%s: %s\n", $_, join(' ', 
$pkg->get_trees);
+                               printf "%s: %s\n", $_, join(' ', 
$pkg->get_full_trees);
                        } else {
                                die "Unknown field $_\n";
                        }

Index: ChangeLog
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/ChangeLog,v
retrieving revision 1.1282
retrieving revision 1.1283
diff -u -d -r1.1282 -r1.1283
--- ChangeLog   21 Mar 2006 21:05:35 -0000      1.1282
+++ ChangeLog   21 Mar 2006 22:57:53 -0000      1.1283
@@ -1,5 +1,15 @@
 2006-03-21  Dave Vasilevsky  <[EMAIL PROTECTED]>
 
+       * PkgVersion.pm:
+               - Store the full tree ("stable/main") instead of just the first
+               component ("stable").
+               - Remove in_tree, it's unused.
+       * Engine.pm: Use the full tree in dumpinfo.
+       
+       *** THIS IS A DB FORMAT CHANGE, RUN index -f OR EXPECT BREAKAGE ***
+
+2006-03-21  Dave Vasilevsky  <[EMAIL PROTECTED]>
+
        * Scanpackages.pm: Use CLI::capture to shut up Fink::Package.
 
 2006-03-21  Dave Vasilevsky  <[EMAIL PROTECTED]>



-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Fink-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to