161 lines
4.7 KiB
Python
Executable File
161 lines
4.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*-python-*-
|
|
#
|
|
# Copyright (C) 1999-2007 The ViewCVS Group. All Rights Reserved.
|
|
#
|
|
# By using this file, you agree to the terms and conditions set forth in
|
|
# the LICENSE.html file which can be found at the top level of the ViewVC
|
|
# distribution or at http://viewvc.org/license-1.html.
|
|
#
|
|
# For more information, visit http://viewvc.org/
|
|
#
|
|
# -----------------------------------------------------------------------
|
|
#
|
|
# administrative program for CVSdb; creates a clean database in
|
|
# MySQL 3.22 or later
|
|
#
|
|
# -----------------------------------------------------------------------
|
|
|
|
import os, sys, string
|
|
import popen2
|
|
|
|
INTRO_TEXT = """\
|
|
This script creates the database and tables in MySQL used by the
|
|
ViewVC checkin database. You will be prompted for: database server
|
|
hostname, database user, database user password, and database name.
|
|
This script will use the 'mysql' program to create the database for
|
|
you. You will then need to set the appropriate parameters in the
|
|
[cvsdb] section of your viewvc.conf file.
|
|
"""
|
|
|
|
DATABASE_SCRIPT="""\
|
|
DROP DATABASE IF EXISTS <dbname>;
|
|
CREATE DATABASE <dbname>;
|
|
|
|
USE <dbname>;
|
|
|
|
DROP TABLE IF EXISTS branches;
|
|
CREATE TABLE branches (
|
|
id mediumint(9) NOT NULL auto_increment,
|
|
branch varchar(64) binary DEFAULT '' NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE branch (branch)
|
|
) TYPE=MyISAM;
|
|
|
|
DROP TABLE IF EXISTS checkins;
|
|
CREATE TABLE checkins (
|
|
type enum('Change','Add','Remove'),
|
|
ci_when datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
|
whoid mediumint(9) DEFAULT '0' NOT NULL,
|
|
repositoryid mediumint(9) DEFAULT '0' NOT NULL,
|
|
dirid mediumint(9) DEFAULT '0' NOT NULL,
|
|
fileid mediumint(9) DEFAULT '0' NOT NULL,
|
|
revision varchar(32) binary DEFAULT '' NOT NULL,
|
|
stickytag varchar(255) binary DEFAULT '' NOT NULL,
|
|
branchid mediumint(9) DEFAULT '0' NOT NULL,
|
|
addedlines int(11) DEFAULT '0' NOT NULL,
|
|
removedlines int(11) DEFAULT '0' NOT NULL,
|
|
descid mediumint(9),
|
|
UNIQUE repositoryid (repositoryid,dirid,fileid,revision),
|
|
KEY ci_when (ci_when),
|
|
KEY whoid (whoid),
|
|
KEY repositoryid_2 (repositoryid),
|
|
KEY dirid (dirid),
|
|
KEY fileid (fileid),
|
|
KEY branchid (branchid)
|
|
) TYPE=MyISAM;
|
|
|
|
DROP TABLE IF EXISTS descs;
|
|
CREATE TABLE descs (
|
|
id mediumint(9) NOT NULL auto_increment,
|
|
description text,
|
|
hash bigint(20) DEFAULT '0' NOT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY hash (hash)
|
|
) TYPE=MyISAM;
|
|
|
|
DROP TABLE IF EXISTS dirs;
|
|
CREATE TABLE dirs (
|
|
id mediumint(9) NOT NULL auto_increment,
|
|
dir varchar(255) binary DEFAULT '' NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE dir (dir)
|
|
) TYPE=MyISAM;
|
|
|
|
DROP TABLE IF EXISTS files;
|
|
CREATE TABLE files (
|
|
id mediumint(9) NOT NULL auto_increment,
|
|
file varchar(255) binary DEFAULT '' NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE file (file)
|
|
) TYPE=MyISAM;
|
|
|
|
DROP TABLE IF EXISTS people;
|
|
CREATE TABLE people (
|
|
id mediumint(9) NOT NULL auto_increment,
|
|
who varchar(128) binary DEFAULT '' NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE who (who)
|
|
) TYPE=MyISAM;
|
|
|
|
DROP TABLE IF EXISTS repositories;
|
|
CREATE TABLE repositories (
|
|
id mediumint(9) NOT NULL auto_increment,
|
|
repository varchar(64) binary DEFAULT '' NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE repository (repository)
|
|
) TYPE=MyISAM;
|
|
|
|
DROP TABLE IF EXISTS tags;
|
|
CREATE TABLE tags (
|
|
repositoryid mediumint(9) DEFAULT '0' NOT NULL,
|
|
branchid mediumint(9) DEFAULT '0' NOT NULL,
|
|
dirid mediumint(9) DEFAULT '0' NOT NULL,
|
|
fileid mediumint(9) DEFAULT '0' NOT NULL,
|
|
revision varchar(32) binary DEFAULT '' NOT NULL,
|
|
UNIQUE repositoryid (repositoryid,dirid,fileid,branchid,revision),
|
|
KEY repositoryid_2 (repositoryid),
|
|
KEY dirid (dirid),
|
|
KEY fileid (fileid),
|
|
KEY branchid (branchid)
|
|
) TYPE=MyISAM;
|
|
"""
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
print INTRO_TEXT
|
|
|
|
# Prompt for necessary information
|
|
host = raw_input("MySQL Hostname [default: localhost]: ") or ""
|
|
user = raw_input("MySQL User: ")
|
|
passwd = raw_input("MySQL Password: ")
|
|
dbase = raw_input("ViewVC Database Name [default: ViewVC]: ") or "ViewVC"
|
|
|
|
# Create the database
|
|
dscript = string.replace(DATABASE_SCRIPT, "<dbname>", dbase)
|
|
host_option = host and "--host=%s" % (host) or ""
|
|
if sys.platform == "win32":
|
|
cmd = "mysql --user=%s --password=%s %s "\
|
|
% (user, passwd, host_option)
|
|
mysql = os.popen(cmd, "w") # popen2.Popen3 is not provided on windows
|
|
mysql.write(dscript)
|
|
status = mysql.close()
|
|
else:
|
|
cmd = "{ mysql --user=%s --password=%s %s ; } 2>&1" \
|
|
% (user, passwd, host_option)
|
|
pipes = popen2.Popen3(cmd)
|
|
pipes.tochild.write(dscript)
|
|
pipes.tochild.close()
|
|
print pipes.fromchild.read()
|
|
status = pipes.wait()
|
|
|
|
if status:
|
|
print "[ERROR] the database did not create sucessfully."
|
|
sys.exit(1)
|
|
|
|
print "Database created successfully."
|
|
except KeyboardInterrupt:
|
|
pass
|
|
sys.exit(0)
|
|
|