blob: 8c85195beefc8eac9045909bff55b5c50121516d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
#!/bin/bash
dbquery() {
mysql -s -s -e "$*" trac
}
# main function
main() {
echo
# project_name may not be an empty string and must be >= 3 characters
while [[ ${#project_name} -lt 3 ]]
do
eask_str "a project name (min 3 chars)"
project_name=${REPLY}
done
if [[ -n $(dbquery "SELECT id FROM project WHERE project_name = '${project_name}'") ]]
then
eerror "Project ${project_name} already exists."
fi
# who requests the project ?
while [[ -z ${user_name} ]]
do
eask_str "username of applicant"
user_name=${REPLY}
done
user_email=$(dbquery "SELECT email FROM user WHERE login = '${user_name}'")
if [[ -z ${user_email} ]]
then
eerror "Username ${user_name} does not exist."
fi
einfo
einfo "$(color yellow)public project:$(color) read access for everyone with a spline-dev account." \
"write access only for project members. this is the default."
einfo "$(color yellow)private project:$(color) read and write access only for project members."
einfo
eask_bool "Should the project be private?" n
project_closed=${REPLY}
svn_home=${SVN_ROOT}/${project_name}
trac_home=${TRAC_ROOT}/${project_name}
trac_db=trac_${project_name}
eheading "creating new subversion directory"
eexec svnadmin create ${svn_home}
tmpdir=$(mktemp -d)
eexec mkdir -p ${tmpdir}/{trunk,tags,branches}
eexec svn -q import -m "initial import for project ${project_name}" ${tmpdir} file://${svn_home}
eexec chown -R apache:apache ${svn_home}
eexec rm -rf ${tmpdir}
eheading "creating new trac project"
eexec mysqladmin create ${trac_db}
eexec trac-admin ${trac_home} initenv --inherit=${TRAC_INI} ${project_name} "mysql://${MYSQL_USER}:${MYSQL_PASS}@${MYSQL_HOST}/${trac_db}" svn ${svn_home}
if [[ ${project_closed} == y ]]
then
for perm in BROWSER_VIEW CHANGESET_VIEW FILE_VIEW LOG_VIEW MILESTONE_VIEW \
REPORT_SQL_VIEW REPORT_VIEW ROADMAP_VIEW SEARCH_VIEW TICKET_VIEW \
TIMELINE_VIEW WIKI_VIEW
do
eexec trac-admin ${trac_home} permission remove anonymous ${perm}
done
fi
for perm in TICKET_CREATE TICKET_MODIFY WIKI_CREATE WIKI_MODIFY
do
eexec trac-admin ${trac_home} permission remove authenticated ${perm}
done
eexec trac-admin ${trac_home} permission add authenticated TRAC_ADMIN
eexec trac-admin ${trac_home} wiki import WikiStart WikiStart.txt
eexec trac-admin ${trac_home} wiki import GettingStarted GettingStarted.txt
eexec chown apache:apache ${trac_home}/conf/trac.ini
eheading "setting up apache2"
eexec sed -i -e "\$a\\# ${project_name} (added on $(date -R))\\" ${APACHE_PROJECT_CONF}
eexec sed -i -e "\$a\\Use TracProject ${project_name}\\" ${APACHE_PROJECT_CONF}
if [[ ${project_closed} == y ]]
then
eexec sed -i -e "\$a\\Use SVNProjectClosed ${project_name}\\" ${APACHE_PROJECT_CONF}
else
eexec sed -i -e "\$a\\Use SVNProject ${project_name}\\" ${APACHE_PROJECT_CONF}
fi
echo >> ${APACHE_PROJECT_CONF}
eexec /etc/init.d/apache2 reload
eheading "committing changes to our git-repository in /etc"
pushd /etc > /dev/null
eexec git add ${APACHE_PROJECT_CONF/\/etc\/}
eexec git commit -m "added new project ${project_name}"
popd > /dev/null
eheading "adding initial project member to the database"
eexec dbquery "INSERT INTO project (project_name) VALUES ('${project_name}')"
eexec dbquery "INSERT INTO member (user_id, project_id) VALUES (" \
"(SELECT id FROM user WHERE login = '${user_name}')," \
"(SELECT id FROM project WHERE project_name = '${project_name}'))"
eheading "requesting new mailinglist for the project"
# register mailinglist (owner is user_email) for the new project
eexec wget -q -O /dev/null --no-check-certificate --post-data "name=commit-${project_name}&email=${user_email}" \
https://lists.spline.inf.fu-berlin.de/cgi-bin/neueliste.pl
eheading "sending confirmation email to applicant"
sendmail -t <<-EOF
From: dev@spline.de
Subject: your new project has been approved
To: ${user_email}
Dear ${user_name},
your project (${project_name}) has been created and can be found at
https://dev.spline.de/trac/${project_name}
Yours,
the dev.spline.de team
EOF
einfo "mail to ${user_email} has been sent"
echo
einfo
einfo "done! success! jipii! neeeat!"
einfo "you can find the project at $(color yellow)https://dev.spline.de/trac/${project_name}$(color)"
einfo
echo
}
# go to script dir
pushd $(dirname $0) > /dev/null
# get global functions
source "./functions.sh"
# load configuration
source "./config.sh"
# exit on errors
set -e
# start main program
main "$@"
# leave script dir
popd > /dev/null
|