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

« back to all changes in this revision

Viewing changes to bin/ivle-loadsampledata

  • Committer: William Grant
  • Date: 2012-06-28 01:52:02 UTC
  • Revision ID: me@williamgrant.id.au-20120628015202-f6ru7o367gt6nvgz
Hah

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
26
27
import optparse
27
28
import subprocess
28
29
import logging
29
30
import readline
 
31
import warnings
30
32
 
31
33
import psycopg2
32
34
 
33
35
from ivle.config import Config
 
36
import ivle.svn
34
37
 
35
38
logging.basicConfig(
36
39
    format='%(asctime)s %(levelname)s %(message)s',
41
44
    Return None if the program had a 0 return code.
42
45
    Return the string stderr if the program failed.
43
46
    """
44
 
    proc = subprocess.Popen(*popenargs, stderr=subprocess.PIPE, **kwargs)
 
47
    kwargs['stderr'] = subprocess.PIPE
 
48
 
 
49
    proc = subprocess.Popen(*popenargs, **kwargs)
45
50
    _, stderr = proc.communicate()
46
51
    if proc.returncode == 0:
47
52
        return None
100
105
 
101
106
        # Unmount all the jails
102
107
        logging.info("Unmounting all users.")
103
 
        subprocess.check_call(["bin/ivle-mountallusers", "-u"])
 
108
        subprocess.check_call(["ivle-mountallusers", "-u"])
104
109
 
105
110
        # Drop database
106
111
        logging.info("Dropping database \"%s\"." % dbconfig["name"])
133
138
 
134
139
# Build or rebuild all of the users' filesystems and subversion repos
135
140
logging.info("Creating data directories.")
136
 
subprocess.check_call(["bin/ivle-createdatadirs"])
 
141
subprocess.check_call(["ivle-createdatadirs"])
137
142
 
138
143
# Move all of the users' filesystems and subversion repos out of the way
139
144
# (This will clean out the user dirs because there are no users in the DB.)
140
145
logging.info("Moving existing user filesystems and repos out of the way.")
141
 
subprocess.check_call(["bin/ivle-refreshfilesystem"])
 
146
subprocess.check_call(["ivle-refreshfilesystem"])
142
147
 
143
148
# Populate with sample data
144
149
logging.info("Populating database with sample data.")
153
158
# Build all of the users' filesystems and subversion repos
154
159
# (This will create fresh user dirs and repos because the jails were empty.)
155
160
logging.info("Building sample users' filesystems and repos.")
156
 
subprocess.check_call(["bin/ivle-refreshfilesystem"])
 
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")