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

« back to all changes in this revision

Viewing changes to bin/ivle-refreshfilesystem

Clean up ivle-refreshfilesystem a little.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
"""
27
27
 
28
28
import datetime
 
29
import logging
29
30
import os
30
31
import os.path
31
32
import shutil
32
 
import sys
33
33
 
34
34
from ivle.config import Config
35
35
from ivle.database import get_store, ProjectGroup, User
36
36
import ivle.makeuser
37
 
# Python 2.5's shutil.rmtree follows symlinks!
38
 
from ivle.util import safe_rmtree
39
 
 
40
 
junk_directory_suffix = (
 
37
 
 
38
 
 
39
logging.basicConfig(
 
40
    format='%(asctime)s %(levelname)s %(message)s',
 
41
    level=logging.INFO)
 
42
 
 
43
 
 
44
JUNK_DIRECTORY_SUFFIX = (
41
45
    '-removed-%s' % datetime.datetime.now().strftime('%Y%m%d-%H%M%S'))
42
46
 
 
47
 
43
48
def get_junk_dir(path):
44
 
    return os.path.normpath(path) + junk_directory_suffix
 
49
    return os.path.normpath(path) + JUNK_DIRECTORY_SUFFIX
 
50
 
45
51
 
46
52
def junk(parent, name):
47
53
    """Move the named directory into a junk directory alongside the parent."""
52
58
        os.path.join(get_junk_dir(parent), name))
53
59
 
54
60
 
55
 
config = Config()
56
 
store = get_store(config)
57
 
 
58
 
active_users = store.find(User, state=u'enabled').order_by(User.login)
59
 
 
60
 
print >>sys.stderr, "Refreshing active user jails..."
61
 
for user in active_users:
62
 
    ivle.makeuser.make_jail(user, config)
63
 
 
64
 
present_jails = set(
65
 
    login for login in os.listdir(config['paths']['jails']['src'])
66
 
    if not (login.startswith('__') and login.endswith('__')))
67
 
 
68
 
print >>sys.stderr, "Junking extra user jails..."
69
 
for jail in present_jails - set(user.login for user in active_users):
70
 
    print ' - %s' % jail
71
 
    junk(config['paths']['jails']['src'], jail)
72
 
 
73
 
repo_root = config['paths']['svn']['repo_path']
74
 
 
75
 
print >>sys.stderr, "Creating missing Subversion user repositories..."
76
 
present_user_repos= set(
77
 
    login for login in os.listdir(os.path.join(repo_root, 'users')))
78
 
 
79
 
for repo in set(user.login for user in active_users) - present_user_repos:
80
 
    print ' - %s' % repo
81
 
    ivle.makeuser.make_svn_repo(
82
 
        os.path.join(repo_root, 'users', repo), throw_on_error=True)
83
 
 
84
 
print >>sys.stderr, "Junking extra Subversion user repositories..."
85
 
for repo in present_user_repos - set(user.login for user in active_users):
86
 
    print ' - %s' % repo
87
 
    junk(os.path.join(repo_root, 'users'), repo)
88
 
 
89
 
 
90
 
print >>sys.stderr, "Creating missing Subversion group repositories..."
91
 
present_group_repos = set(
92
 
    group for group in os.listdir(os.path.join(repo_root, 'groups')))
93
 
 
94
 
active_group_identifiers = set("_".join(
95
 
    [group.project_set.offering.subject.short_name,
96
 
     group.project_set.offering.semester.year,
97
 
     group.project_set.offering.semester.semester,
98
 
     group.name]) for group in store.find(ProjectGroup))
99
 
 
100
 
for repo in active_group_identifiers - present_group_repos:
101
 
    print ' - %s' % repo
102
 
    ivle.makeuser.make_svn_repo(
103
 
        os.path.join(repo_root, 'groups', repo), throw_on_error=True)
104
 
 
105
 
print >>sys.stderr, "Junking extra Subversion user repositories..."
106
 
for repo in present_group_repos - active_group_identifiers:
107
 
    print ' - %s' % repo
108
 
    junk(os.path.join(repo_root, 'groups'), repo)
109
 
 
110
 
 
111
 
print >>sys.stderr, "Rebuilding Subversion user configuration..."
112
 
ivle.makeuser.rebuild_svn_config(store, config)
113
 
print >>sys.stderr, "Rebuilding Subversion group configuration..."
114
 
ivle.makeuser.rebuild_svn_group_config(store, config)
115
 
 
116
 
 
 
61
def refresh_filesystem(config, store):
 
62
    active_users = store.find(User, state=u'enabled').order_by(User.login)
 
63
 
 
64
    logging.info("Refreshing active user jails.")
 
65
    for user in active_users:
 
66
        ivle.makeuser.make_jail(user, config)
 
67
 
 
68
    present_jails = set(
 
69
        login for login in os.listdir(config['paths']['jails']['src'])
 
70
        if not (login.startswith('__') and login.endswith('__')))
 
71
 
 
72
    logging.info("Junking extra user jails...")
 
73
    for jail in present_jails - set(user.login for user in active_users):
 
74
        logging.info(' - %s' % jail)
 
75
        junk(config['paths']['jails']['src'], jail)
 
76
 
 
77
    repo_root = config['paths']['svn']['repo_path']
 
78
 
 
79
    logging.info("Creating missing Subversion user repositories.")
 
80
    present_user_repos = set(
 
81
        login for login in os.listdir(os.path.join(repo_root, 'users')))
 
82
 
 
83
    for repo in set(user.login for user in active_users) - present_user_repos:
 
84
        logging.info(' - %s' % repo)
 
85
        ivle.makeuser.make_svn_repo(
 
86
            os.path.join(repo_root, 'users', repo), throw_on_error=True)
 
87
 
 
88
    logging.info("Junking extra Subversion user repositories.")
 
89
    for repo in present_user_repos - set(user.login for user in active_users):
 
90
        logging.info(' - %s' % repo)
 
91
        junk(os.path.join(repo_root, 'users'), repo)
 
92
 
 
93
 
 
94
    logging.info("Creating missing Subversion group repositories.")
 
95
    present_group_repos = set(
 
96
        group for group in os.listdir(os.path.join(repo_root, 'groups')))
 
97
 
 
98
    active_group_identifiers = set("_".join(
 
99
        [group.project_set.offering.subject.short_name,
 
100
         group.project_set.offering.semester.year,
 
101
         group.project_set.offering.semester.semester,
 
102
         group.name]) for group in store.find(ProjectGroup))
 
103
 
 
104
    for repo in active_group_identifiers - present_group_repos:
 
105
        logging.info(' - %s' % repo)
 
106
        ivle.makeuser.make_svn_repo(
 
107
            os.path.join(repo_root, 'groups', repo), throw_on_error=True)
 
108
 
 
109
    logging.info("Junking extra Subversion user repositories.")
 
110
    for repo in present_group_repos - active_group_identifiers:
 
111
        logging.info(' - %s' % repo)
 
112
        junk(os.path.join(repo_root, 'groups'), repo)
 
113
 
 
114
 
 
115
    logging.info("Rebuilding Subversion user configuration.")
 
116
    ivle.makeuser.rebuild_svn_config(store, config)
 
117
    logging.info("Rebuilding Subversion group configuration.")
 
118
    ivle.makeuser.rebuild_svn_group_config(store, config)
 
119
 
 
120
 
 
121
if __name__ == '__main__':
 
122
    config = Config()
 
123
    store = get_store(config)
 
124
    refresh_filesystem(config, store)