···11+require "sqlite3"
22+33+class Db
44+ def initialize(dbf)
55+ @db = SQLite3::Database.new dbf
66+77+ @db.execute "CREATE TABLE IF NOT EXISTS changesets
88+ (id INTEGER PRIMARY KEY, date INTEGER, author TEXT, commitid TEXT,
99+ log TEXT)"
1010+ @db.execute "CREATE UNIQUE INDEX IF NOT EXISTS u_commitid ON changesets
1111+ (commitid)"
1212+1313+ @db.execute "CREATE TABLE IF NOT EXISTS files
1414+ (id INTEGER PRIMARY KEY, file TEXT, first_undead_version TEXT)"
1515+ @db.execute "CREATE UNIQUE INDEX IF NOT EXISTS u_file ON files
1616+ (file)"
1717+1818+ @db.execute "CREATE TABLE IF NOT EXISTS revisions
1919+ (id INTEGER PRIMARY KEY, file_id INTEGER, changeset_id INTEGER,
2020+ date INTEGER, version TEXT, author TEXT, commitid TEXT, log TEXT,
2121+ state TEXT)"
2222+ @db.execute "CREATE UNIQUE INDEX IF NOT EXISTS u_revision ON revisions
2323+ (file_id, version)"
2424+ @db.execute "CREATE INDEX IF NOT EXISTS empty_changesets ON revisions
2525+ (changeset_id)"
2626+ @db.execute "CREATE INDEX IF NOT EXISTS cs_by_commitid ON revisions
2727+ (commitid, changeset_id)"
2828+ @db.execute "CREATE INDEX IF NOT EXISTS all_revs_by_author ON revisions
2929+ (author, date)"
3030+ @db.execute "CREATE INDEX IF NOT EXISTS all_revs_by_version_and_state ON
3131+ revisions (version, state)"
3232+3333+ @db.results_as_hash = true
3434+ end
3535+3636+ def execute(*args)
3737+ if block_given?
3838+ @db.execute(*args) do |row|
3939+ yield row
4040+ end
4141+ else
4242+ @db.execute(*args)
4343+ end
4444+ end
4545+end
···11-require "sqlite3"
22-31class Scanner
42 def initialize(dbf, root)
55- @db = SQLite3::Database.new dbf
66-77- @db.execute "CREATE TABLE IF NOT EXISTS changesets
88- (id INTEGER PRIMARY KEY, date INTEGER, author TEXT, commitid TEXT,
99- log TEXT)"
1010- @db.execute "CREATE UNIQUE INDEX IF NOT EXISTS u_commitid ON changesets
1111- (commitid)"
1212-1313- @db.execute "CREATE TABLE IF NOT EXISTS files
1414- (id INTEGER PRIMARY KEY, file TEXT, first_undead_version TEXT)"
1515- @db.execute "CREATE UNIQUE INDEX IF NOT EXISTS u_file ON files
1616- (file)"
1717-1818- @db.execute "CREATE TABLE IF NOT EXISTS revisions
1919- (id INTEGER PRIMARY KEY, file_id INTEGER, changeset_id INTEGER,
2020- date INTEGER, version TEXT, author TEXT, commitid TEXT, log TEXT,
2121- state TEXT)"
2222- @db.execute "CREATE UNIQUE INDEX IF NOT EXISTS u_revision ON revisions
2323- (file_id, version)"
2424- @db.execute "CREATE INDEX IF NOT EXISTS empty_changesets ON revisions
2525- (changeset_id)"
2626- @db.execute "CREATE INDEX IF NOT EXISTS cs_by_commitid ON revisions
2727- (commitid, changeset_id)"
2828- @db.execute "CREATE INDEX IF NOT EXISTS all_revs_by_author ON revisions
2929- (author, date)"
3030- @db.execute "CREATE INDEX IF NOT EXISTS all_revs_by_version_and_state ON
3131- revisions (version, state)"
3232-3333- @db.results_as_hash = true
3434-33+ @db = Db.new dbf
354 @root = (root + "/").gsub(/\/\//, "/")
365 end
376