#!/usr/bin/perl use strict; use warnings; use DBI; ################################################# my $mode = "date"; my $input = 'testers.db'; my $output = "cpan_full_with_".$mode.".gexf"; ################################################ open(OUTPUT,">",$output); print OUTPUT "\n\t\n\t\trtgi\n\t \t \t\t \t\t\t \t\t\t \t\t\t \t\t\t \t\t\n"; my @drivers = DBI->available_drivers(); die "Error, please install DBI::SQLite" unless (grep { $_ eq "SQLite" } @drivers); my $dbh = DBI->connect("dbi:SQLite:dbname=$input","","", { AutoCommit => 0, PrintError => 1 }); print OUTPUT "\t\t"; my $minimalDate = "0"; if ($mode eq "date") { $minimalDate = "1997-01-01"; } print OUTPUT "\n\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t"; my $distrib_query = "select id, dist, package, vname, version, released from dist order by dist"; my $sth = $dbh->prepare($distrib_query); $sth->execute; if ($dbh->err()) { die "$DBI::errstr\n"; } my $distributions = {}; my $n = 0; while (my ($id, $dname, $package, $vname, $version, $date) = $sth->fetchrow) { my $from = "0"; $vname = $dname unless $version; $version = 0 unless $version; $date = "1997-01-01 00:00:00" unless $date; if ($mode eq "date") { # day-based epoch $date = substr($date, 0, 10); } elsif ($mode eq "step") { # day-based epoch $date = (int(substr($date, 0, 4))-1996) * 365 + int(substr($date, 5, 2)) * 31 + int(substr($date, 8, 2)); } $distributions->{$id} = $date; print OUTPUT " \t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t"; $n++; } $sth->finish; print "\nfetched $n distributions.\n\n"; print OUTPUT "\n\t\t\n\t\t"; my $prereq_query = "select id, dist, requires, in_dist from prereq order by dist"; $sth = $dbh->prepare($prereq_query); $sth->execute; if ($dbh->err()) { die "$DBI::errstr\n"; } my $e = 0; while (my ($id, $source_id, $target_dname, $target_id) = $sth->fetchrow) { $target_id = 0 unless $target_id; my $from = $distributions->{$target_id}; print OUTPUT " \t\t\t \t\t\t\t \t\t\t"; $e++; } $sth->finish; print OUTPUT "\n\t\t\n\t\n"; $dbh->disconnect;