From 3b95d4aec6334b0e18eed433120fd549eaa5fa36 Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sat, 28 Sep 2013 15:12:03 -0700 Subject: import cpan-explorer --- sqlite2gxf_multi.pl | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 sqlite2gxf_multi.pl (limited to 'sqlite2gxf_multi.pl') diff --git a/sqlite2gxf_multi.pl b/sqlite2gxf_multi.pl new file mode 100644 index 0000000..5d49837 --- /dev/null +++ b/sqlite2gxf_multi.pl @@ -0,0 +1,103 @@ +#!/usr/bin/perl +use strict; +use warnings; +use DBI; + +################################################# +my $mode = "date"; +my $input_date = "090203"; +################################################# +my $input = $input_date."/cpants_all.db"; +my $output = "cpan_".$input_date."_".$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 = "1996-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; -- cgit 1.4.1