]> xenbits.xensource.com Git - people/aperard/emesinae.git/commitdiff
Refactor
authorIan Campbell <ijc@hellion.org.uk>
Sat, 20 Oct 2012 17:29:06 +0000 (18:29 +0100)
committerIan Campbell <ijc@hellion.org.uk>
Sat, 20 Oct 2012 17:29:06 +0000 (18:29 +0100)
.gitignore [new file with mode: 0644]
Bugs/Message.pm
createbugs.pl [deleted file]
createdb.sql
insertbugs.pl [new file with mode: 0755]
insertmail.pl
thread-to-mbox.pl

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..b25c15b
--- /dev/null
@@ -0,0 +1 @@
+*~
index 080f5de71530c60bb3216b7ad59a1cc955407751..308fa2b028f1bf8ad4a51e807ec989061f7f3444 100644 (file)
@@ -3,88 +3,108 @@ package Bugs::Message;
 use strict;
 use warnings;
 
-sub new {
+sub lookup_id {
     my $class = shift;
     my $dbh = shift;
-    my %args = @_;
+    my $id = shift;
+
+    my $sth = $dbh->prepare(q{
+        SELECT messageid,present,subject FROM messages WHERE id = ?
+    });
 
-    my ($msgid, $id);
+    $sth->execute($id);
 
-    my $fresh = 0;
-    my $sth;
+    my ($msgid,$present,$subj) = @{$sth->fetch};
 
-    die "MessageID or Headers" if exists $args{MessageID} && exists $args{Headers};
+    $sth->finish;
 
-    # ID -- from ID
-    # MessageID -- message id to lookup
-    # Insert -- True if we should create, created if non-present
-    # Header -- If given then fill in details. Must be non-pressent (or just Inserted)
+    my $self = { dbh     => $dbh,
+                present => $present eq "true",
+                id      => $id,
+                msgid   => $msgid,
+                subject => $subj
+    };
+
+    bless $self, $class;
+    return $self;    
+}
+
+sub lookup_msgid {
+    my $class = shift;
+    my $dbh = shift;
+    my $msgid = shift;
+    my %args = @_;
 
     $args{Insert} = 0 unless exists $args{Insert};
 
-    if ( exists $args{ID} ) {
-       $id = $args{ID};
-       $sth = $dbh->prepare(q{
-           SELECT messageid FROM messages WHERE id = ?
+    my $sth = $dbh->prepare(q{
+        SELECT id,present,subject FROM messages WHERE messageid = ?
+    });
+
+    $sth->execute($msgid);
+
+    my $row = $sth->fetch;
+
+    $sth->finish;
+
+    my ($id,$present,$subj);
+    if ( defined $row ) {
+       ($id,$present,$subj) = @{$row};
+    } elsif ( $args{Insert} ) {
+       my $sth = $dbh->prepare(q{
+           INSERT into messages (messageid) VALUES (?)
         });
-       $sth->execute($id);
-       my $r = $sth->fetch;
-       $sth->finish;
-       $msgid = $r->[0];
-       #print STDERR "Create ID $id with msgid $msgid\n";
+       $sth->execute($msgid) or die "Inserting new message";
+       $id = $dbh->sqlite_last_insert_rowid();
+       $present = 0;
     } else {
-       if ( exists $args{MessageID} ) {
-           $msgid = $args{MessageID};
-           #print STDERR "Create from Message-ID " . $msgid . "\n";
-       } elsif ( exists $args{Header} ) {
-           my $header = $args{Header};
-           chomp($msgid = $header->get('message-id'));
-           #print STDERR "Create from Headers " . $msgid . "\n";
-       } else { die "MessageID or Header"; }
-       
-       $sth = $dbh->prepare(q{
-           SELECT id,present,messageid FROM messages WHERE messageid = ?
-        });
-       $sth->execute($msgid);
-       my $row = $sth->fetch;
-       $sth->finish;
-
-       if ( defined $row ) {
-           $id = $row->[0];
-           my $present = $row->[1] eq "true";
-           $fresh = ! $present;
-       } elsif ( $args{Insert} || exists $args{Header} ) {
-           my $sth = $dbh->prepare(q{
-               INSERT into messages (messageid) VALUES (?)
-            });
-           $sth->execute($msgid) or die "Inserting new message";
-           $id = $dbh->sqlite_last_insert_rowid();
-           #print STDERR "New ID is $id\n";
-           $fresh = 1;
-       }
-       
-       if ( exists $args{Header} ) {
-           my $header = $args{Header};
-           die "NOT FRESH" unless $fresh;
-           $sth = $dbh->prepare(q{UPDATE messages SET present="true" WHERE id = ?});
-           $sth->execute($id) or die "UPDATE";
-           $sth->finish or die "FINISH";
+       die "lookup_msgid $msgid";
+    }
+
+    my $self = { dbh     => $dbh,
+                present => $present eq "true",
+                id      => $id,
+                msgid   => $msgid,
+                subject => $subj
+    };
+
+    bless $self, $class;
+    return $self;    
+}
+
+sub update {
+    my $self = shift;
+    my $header = shift;
+
+    die "NOT FRESH" unless ! $self->{present};
+
+    chomp(my $subj = $header->get('subject'));
+
+    my $sth = $self->{dbh}->prepare(q{UPDATE messages SET present="true",subject=?2 WHERE id = ?1});
+    $sth->execute($self->{id},$subj) or die "execute insert";
+    $sth->finish or die "finish insert";
            
-           foreach ( $header->get('references') ) {
-               foreach our $r ( split(/\s/) ) {
-                   my $refto = Bugs::Message->new($dbh, MessageID => $r, Insert => 1);
-                   #print STDERR "Reference $id -> ".$refto->{id}."\n";
-                   #print STDERR "  ".$msgid." => ".$refto->{msgid}."\n";
-                   $sth = $dbh->prepare(q{INSERT INTO refs (srcid,dstid) VALUES (?1,?2)});
-                   $sth->execute($refto->{id},$id);
-               }
-           }
+    foreach ( $header->get('references') ) {
+       foreach our $r ( split(/\s/) ) {
+           my $refto = Bugs::Message->lookup_msgid($self->{dbh}, $r, Insert => 1);
+           $sth = $self->{dbh}->prepare(q{INSERT INTO refs (srcid,dstid) VALUES (?1,?2)});
+           $sth->execute($refto->{id},$self->{id});
        }
     }
 
-    my $self = { dbh=>$dbh, id=>$id, msgid=>$msgid };
+    $self->{present} = 1;
+    $self->{subject} = $subj;
+}
 
-    bless $self, $class;
+sub insert {
+    my $class = shift;
+    my $dbh = shift;
+    my $header = shift;
+
+    chomp(my $msgid = $header->get('message-id'));
+
+    my $self = lookup_msgid($class, $dbh, $msgid, Insert => 1);
+    $self->update($header);
     return $self;    
 }
 
@@ -104,7 +124,7 @@ sub _subthread {
        my $id = $r->[0];
        next if exists $refs->{$id};
        $refs->{$id} = 1;
-       my $m = Bugs::Message->new($self->{dbh}, ID => $id);
+       my $m = Bugs::Message->lookup_id($self->{dbh}, $id);
        #print "REF: $id = " . $m->{msgid} . "\n";
        $m->_subthread($refs)
     }
@@ -118,7 +138,7 @@ sub subthread {
     $refs{$self->{id}} = 1;
     $self->_subthread(\%refs);
     for my $r ( keys %refs ) {
-       my $m = Bugs::Message->new($self->{dbh}, ID => $r);
+       my $m = Bugs::Message->lookup_id($self->{dbh}, $r);
        #print "Ref ".$m->{msgid}."\n";
        open F, "xen-devel.ml/" . $m->{msgid} or die "OPEN";
        print for ( <F> ) ;
diff --git a/createbugs.pl b/createbugs.pl
deleted file mode 100755 (executable)
index fc6260a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-
-our $db = DBI->connect("dbi:SQLite:dbname=/tmp/bugs.sqlite","","");
-$db->{AutoCommit} = 1;
-
-for our $msgid ( qw(<6035A0D088A63A46850C3988ED045A4B299F74F8@BITCOM1.int.sbss.com.au>) ) {
-    print $msgid . "\n";
-
-our $sth = $dbh->prepare
index 6011bb9c3316acf4fbcb702f3761c1267303a48f..648ea90daf5a42f0211b2eb9b4d079fb6cae76d5 100644 (file)
@@ -19,7 +19,9 @@ create table refs (
 );
 
 create table bugs ( 
-       id integer primary key autoincrement
+       id integer primary key autoincrement,
+       title varchar
+       -- xxx other fields
 );
 
 create table bug2message (
diff --git a/insertbugs.pl b/insertbugs.pl
new file mode 100755 (executable)
index 0000000..339da85
--- /dev/null
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use DBI;
+use Bugs::Message;
+
+our $dbh = DBI->connect("dbi:SQLite:dbname=/tmp/bugs.sqlite","","");
+$dbh->{AutoCommit} = 1;
+
+for our $msgid ( qw(<6035A0D088A63A46850C3988ED045A4B299F74F8@BITCOM1.int.sbss.com.au>) ) {
+    print $msgid . "\n";
+    our $m = Bugs::Message->lookup_msgid($dbh, $msgid);
+    print "Subject: ". $m->{subject} . "\n";
+
+    our $sth = $dbh->prepare(q{INSERT INTO bugs (title) VALUES (?)});
+    $sth->execute($m->{subject});
+    my $id = $dbh->sqlite_last_insert_rowid();
+
+    $sth = $dbh->prepare(q{INSERT INTO bug2message (bugid, messageid, include) VALUES (?,?,"true")});
+    $sth->execute($id, $m->{id});
+}
index 525f700f6efa7184e22f5f16be63119a518aa712..4898cb8e294a6c5684e7ebbb2d76c9f543d8aff1 100755 (executable)
@@ -21,5 +21,5 @@ $head->unfold();
 our $dbh = DBI->connect("dbi:SQLite:dbname=/tmp/bugs.sqlite","","");
 $dbh->{AutoCommit} = 1;
 
-our $msg = Bugs::Message->new($dbh, Header => $head);
+our $msg = Bugs::Message->insert($dbh, $head);
 #print "\n";
index 1c96a8ddfd0587355905502cc8dfbaf86987212b..90f359c83b5e0c68cb23afbef99c980726f5f98a 100755 (executable)
@@ -10,7 +10,7 @@ our $db = DBI->connect("dbi:SQLite:dbname=/tmp/bugs.sqlite","","");
 
 our $msgid = $ARGV[0];
 
-our $msg = Bugs::Message->new($db, MessageID => $msgid);
+our $msg = Bugs::Message->lookup_msgid($db, $msgid);
 our $id = $msg->id;
 
 print STDERR "Message is $id\n";