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

« back to all changes in this revision

Viewing changes to bin/ivle-refreshfilesystem

Merge a more thorough filesystem housekeeper (ivle-refreshfilesystem).

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
"""Refresh parts of the filesystem that are generated from the database.
20
20
 
21
 
In particular, the Subversion authorisation files are rewritten.
 
21
In particular:
 
22
 - missing user jails are created
 
23
 - missing user and group Subversion repositories are created
 
24
 - the Subversion password file is updated
 
25
 - the Subversion authorisation files are rewritten
22
26
"""
23
27
 
 
28
import datetime
 
29
import os
 
30
import os.path
 
31
import shutil
24
32
import sys
25
33
 
26
34
from ivle.config import Config
27
 
from ivle.database import get_store
 
35
from ivle.database import get_store, ProjectGroup, User
28
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 = (
 
41
    '-removed-%s' % datetime.datetime.now().strftime('%Y%m%d-%H%M%S'))
 
42
 
 
43
def get_junk_dir(path):
 
44
    return os.path.normpath(path) + junk_directory_suffix
 
45
 
 
46
def junk(parent, name):
 
47
    """Move the named directory into a junk directory alongside the parent."""
 
48
    os.makedirs(get_junk_dir(parent))
 
49
    shutil.move(
 
50
        os.path.join(parent, name),
 
51
        os.path.join(get_junk_dir(parent), name))
 
52
 
29
53
 
30
54
config = Config()
31
55
store = get_store(config)
32
56
 
 
57
active_users = store.find(User, state=u'enabled').order_by(User.login)
 
58
 
 
59
print >>sys.stderr, "Refreshing active user jails..."
 
60
for user in active_users:
 
61
    ivle.makeuser.make_jail(user, config)
 
62
 
 
63
present_jails = set(
 
64
    login for login in os.listdir(config['paths']['jails']['src'])
 
65
    if not (login.startswith('__') and login.endswith('__')))
 
66
 
 
67
print >>sys.stderr, "Junking extra user jails..."
 
68
for jail in present_jails - set(user.login for user in active_users):
 
69
    print ' - %s' % jail
 
70
    junk(config['paths']['jails']['src'], jail)
 
71
 
 
72
repo_root = config['paths']['svn']['repo_path']
 
73
 
 
74
print >>sys.stderr, "Creating missing Subversion user repositories..."
 
75
present_user_repos= set(
 
76
    login for login in os.listdir(os.path.join(repo_root, 'users')))
 
77
 
 
78
for repo in set(user.login for user in active_users) - present_user_repos:
 
79
    print ' - %s' % repo
 
80
    ivle.makeuser.make_svn_repo(
 
81
        os.path.join(repo_root, 'users', repo), throw_on_error=True)
 
82
 
 
83
print >>sys.stderr, "Junking extra Subversion user repositories..."
 
84
for repo in present_user_repos - set(user.login for user in active_users):
 
85
    print ' - %s' % repo
 
86
    junk(os.path.join(repo_root, 'users'), repo)
 
87
 
 
88
 
 
89
print >>sys.stderr, "Creating missing Subversion group repositories..."
 
90
present_group_repos = set(
 
91
    group for group in os.listdir(os.path.join(repo_root, 'groups')))
 
92
 
 
93
active_group_identifiers = set("_".join(
 
94
    [group.project_set.offering.subject.short_name,
 
95
     group.project_set.offering.semester.year,
 
96
     group.project_set.offering.semester.semester,
 
97
     group.name]) for group in store.find(ProjectGroup))
 
98
 
 
99
for repo in active_group_identifiers - present_group_repos:
 
100
    print ' - %s' % repo
 
101
    ivle.makeuser.make_svn_repo(
 
102
        os.path.join(repo_root, 'groups', repo), throw_on_error=True)
 
103
 
 
104
print >>sys.stderr, "Junking extra Subversion user repositories..."
 
105
for repo in present_group_repos - active_group_identifiers:
 
106
    print ' - %s' % repo
 
107
    junk(os.path.join(repo_root, 'groups'), repo)
 
108
 
 
109
 
33
110
print >>sys.stderr, "Rebuilding Subversion user configuration..."
34
111
ivle.makeuser.rebuild_svn_config(store, config)
35
112
print >>sys.stderr, "Rebuilding Subversion group configuration..."