~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to bin/ivle-loadsampledata

  • Committer: William Grant
  • Date: 2009-12-09 00:02:49 UTC
  • mto: This revision was merged to the branch mainline in revision 1384.
  • Revision ID: grantw@unimelb.edu.au-20091209000249-y1teiw7yxkyhuhvd
Indicate when there is nobody assigned to a project, and link to the page to fix that.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
 
24
24
import sys
25
25
import os
26
 
import shutil
27
26
import optparse
28
27
import subprocess
29
28
import logging
30
29
import readline
31
 
import warnings
32
 
 
33
 
import psycopg2
34
30
 
35
31
from ivle.config import Config
36
 
import ivle.svn
37
32
 
38
33
logging.basicConfig(
39
34
    format='%(asctime)s %(levelname)s %(message)s',
44
39
    Return None if the program had a 0 return code.
45
40
    Return the string stderr if the program failed.
46
41
    """
47
 
    kwargs['stderr'] = subprocess.PIPE
48
 
 
49
 
    proc = subprocess.Popen(*popenargs, **kwargs)
 
42
    proc = subprocess.Popen(*popenargs, stderr=subprocess.PIPE, **kwargs)
50
43
    _, stderr = proc.communicate()
51
44
    if proc.returncode == 0:
52
45
        return None
105
98
 
106
99
        # Unmount all the jails
107
100
        logging.info("Unmounting all users.")
108
 
        subprocess.check_call(["ivle-mountallusers", "-u"])
 
101
        subprocess.check_call(["bin/ivle-mountallusers", "-u"])
109
102
 
110
103
        # Drop database
111
104
        logging.info("Dropping database \"%s\"." % dbconfig["name"])
127
120
 
128
121
# Populate with database schema
129
122
logging.info("Populating database with schema.")
130
 
ivleconn = psycopg2.connect(
131
 
    host='localhost', database=dbconfig['name'], user=dbconfig['username'],
132
 
    password=dbconfig['password'])
133
 
ivlecursor = ivleconn.cursor()
134
 
logging.info("Populating database with schema.")
135
 
schemafile = open("userdb/users.sql")
136
 
ivlecursor.execute(schemafile.read())
137
 
schemafile.close()
 
123
file = open("userdb/users.sql")
 
124
proc = subprocess.Popen(["psql", "-h", "localhost", "-W", dbconfig["name"],
 
125
                           dbconfig["username"]], stdin=file)
 
126
if proc.wait() != 0:
 
127
    file.close()
 
128
    sys.exit(1)
 
129
file.close()
138
130
 
139
131
# Build or rebuild all of the users' filesystems and subversion repos
140
132
logging.info("Creating data directories.")
141
 
subprocess.check_call(["ivle-createdatadirs"])
 
133
subprocess.check_call(["bin/ivle-createdatadirs"])
142
134
 
143
135
# Move all of the users' filesystems and subversion repos out of the way
144
136
# (This will clean out the user dirs because there are no users in the DB.)
145
137
logging.info("Moving existing user filesystems and repos out of the way.")
146
 
subprocess.check_call(["ivle-refreshfilesystem"])
 
138
subprocess.check_call(["bin/ivle-refreshfilesystem"])
147
139
 
148
140
# Populate with sample data
149
141
logging.info("Populating database with sample data.")
158
150
# Build all of the users' filesystems and subversion repos
159
151
# (This will create fresh user dirs and repos because the jails were empty.)
160
152
logging.info("Building sample users' filesystems and repos.")
161
 
subprocess.check_call(["ivle-refreshfilesystem"])
162
 
 
163
 
config = Config()
164
 
dbconfig = config['database']
165
 
 
166
 
# Populate some of the users' Subversion repos
167
 
def temp_checkout(svnclient, username):
168
 
    """Checkout user `username`'s repo to a temporary directory.
169
 
    @return: The temporary workspace directory.
170
 
    """
171
 
    # Do the checkout over HTTP, since we then use the user's own credentials
172
 
    repourl = config['urls']['svn_addr'] + '/users/' + username
173
 
    # Ignore warnings about the use of tempnam
174
 
    warnings.simplefilter('ignore')
175
 
    tempdir = os.tempnam()
176
 
    warnings.resetwarnings()
177
 
    svnclient.checkout(repourl, tempdir)
178
 
    return tempdir
179
 
 
180
 
logging.info("Populating student repositories")
181
 
def svnload(dumpfile, repo):
182
 
    """Run svnadmin load.
183
 
    @param dumpfile: Dump file to load from, relative to examples/userrepos.
184
 
    @param repo: Repo to write to, relative to /var/lib/ivle/svn/repositories.
185
 
    """
186
 
    f = open(os.path.join("examples/userrepos", dumpfile), "rb")
187
 
    repo = os.path.join(config['paths']['svn']['repo_path'], repo)
188
 
    errmsg = runprog_stderr(["sudo", "-u", "www-data", "svnadmin", "load",
189
 
                             repo], stdin=f)
190
 
    if errmsg is not None:
191
 
        logging.error(errmsg)
192
 
    f.close()
193
 
 
194
 
# Load the known SVN dump files
195
 
svnload("studenta.dump", "users/studenta")
196
 
svnload("group1.dump", "groups/ivle-102_2009_2_group1")
 
153
subprocess.check_call(["bin/ivle-refreshfilesystem"])