--- a/commitsdb.py Sun Apr 19 19:45:42 2015 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -class CommitsDb (object): - def __init__(self): - needNew = not os.path.isfile ('commits.db') - self.db = sqlite3.connect ('commits.db') - - if needNew: - self.create_new() - - def create_new (self): - self.db.executescript (''' - DROP TABLE IF EXISTS COMMITS; - DROP TABLE IF EXISTS REPOS; - DROP TABLE IF EXISTS REPOCOMMITS; - CREATE TABLE IF NOT EXISTS COMMITS - ( - Node text NOT NULL, - Dateversion text NOT NULL, - PRIMARY KEY (Node) - ); - CREATE TABLE IF NOT EXISTS REPOS - ( - Name text NOT NULL, - PRIMARY KEY (Name) - ); - CREATE TABLE IF NOT EXISTS REPOCOMMITS - ( - Reponame text, - Node text, - FOREIGN KEY (Reponame) REFERENCES REPOS(Name), - FOREIGN KEY (Node) REFERENCES COMMITS(Node) - ); - ''') - - print 'Building commits.db...' - for repo in all_repo_names(): - print 'Adding commits from %s...' % repo - - data = subprocess.check_output (['hg', '--cwd', repo, 'log', '--template', - '{node} {date|hgdate}\n']).splitlines() - - for line in data: - changeset, timestamp, tz = line.split(' ') - self.add_commit (repo, changeset, int (timestamp)) - - self.commit() - - def add_commit (self, repo, changeset, timestamp): - dateversion = datetime.utcfromtimestamp (timestamp).strftime ('%y%m%d-%H%M') - self.db.execute (''' - INSERT OR IGNORE INTO REPOS - VALUES (?) - ''', (repo,)) - - self.db.execute (''' - INSERT OR IGNORE INTO COMMITS - VALUES (?, ?) - ''', (changeset, dateversion)) - - self.db.execute (''' - INSERT INTO REPOCOMMITS - VALUES (?, ?) - ''', (repo, changeset)) - - def get_commit_repos (self, node): - cursor = self.db.execute (''' - SELECT Reponame - FROM REPOCOMMITS - WHERE Node LIKE ? - ''', (node + '%',)) - - results = cursor.fetchall() - return list (set (zip (*results)[0])) if results else [] - - def find_commit_by_dateversion (self, dateversion): - cursor = self.db.execute (''' - SELECT Node - FROM COMMITS - WHERE Dateversion = ? - ''', (dateversion,)) - result = cursor.fetchone() - return result[0] if result else None - - def commit(self): - self.db.commit() \ No newline at end of file