1.1 --- a/moinsetup.py Sat Sep 17 01:27:01 2011 +0200
1.2 +++ b/moinsetup.py Sun Sep 18 21:37:22 2011 +0200
1.3 @@ -19,7 +19,8 @@
1.4 this program. If not, see <http://www.gnu.org/licenses/>.
1.5 """
1.6
1.7 -from os.path import abspath, exists, extsep, isdir, join, normpath, split
1.8 +from os.path import abspath, exists, extsep, isdir, islink, join, normpath, split
1.9 +from os import chdir, chmod, listdir, mkdir, makedirs, remove, rename, rmdir
1.10 from getpass import getpass
1.11 from glob import glob
1.12 from zipfile import ZipFile
1.13 @@ -299,11 +300,12 @@
1.14 "add_superuser",
1.15 "make_site_files",
1.16 "make_post_install_script",
1.17 - "reconfigure_moin",
1.18 - "set_auth_method",
1.19
1.20 # Post-installation activities.
1.21
1.22 + "reconfigure_moin",
1.23 + "set_auth_method",
1.24 + "migrate_instance",
1.25 "install_theme",
1.26 "install_extension_package",
1.27 "install_plugins",
1.28 @@ -495,14 +497,14 @@
1.29 if self.moin_distribution:
1.30 this_dir = os.getcwd()
1.31 try:
1.32 - os.chdir(self.moin_distribution)
1.33 + chdir(self.moin_distribution)
1.34 version = self.get_moin_version_from_package_info() or \
1.35 self.get_moin_version_from_import()
1.36 if version:
1.37 return version
1.38
1.39 finally:
1.40 - os.chdir(this_dir)
1.41 + chdir(this_dir)
1.42
1.43 else:
1.44 return self.get_moin_version_from_import()
1.45 @@ -580,7 +582,7 @@
1.46
1.47 for d in (self.common_dir, self.web_app_dir, self.web_static_dir, self.web_site_dir):
1.48 if d is not None and not exists(d):
1.49 - os.makedirs(d)
1.50 + makedirs(d)
1.51
1.52 def get_theme_directories(self, theme_name=None):
1.53
1.54 @@ -589,7 +591,7 @@
1.55 or for a single theme if the optional 'theme_name' is specified.
1.56 """
1.57
1.58 - filenames = theme_name and [theme_name] or os.listdir(self.htdocs_dir)
1.59 + filenames = theme_name and [theme_name] or listdir(self.htdocs_dir)
1.60 directories = []
1.61
1.62 for filename in filenames:
1.63 @@ -645,7 +647,7 @@
1.64 raise SetupException, "Cannot install MoinMoin without a 'moin_distribution' setting being defined."
1.65
1.66 this_dir = os.getcwd()
1.67 - os.chdir(self.moin_distribution)
1.68 + chdir(self.moin_distribution)
1.69
1.70 log_filename = "install-%s.log" % split(self.common_dir)[-1]
1.71
1.72 @@ -656,7 +658,7 @@
1.73
1.74 os.system("python setup.py --quiet %s %s --force" % (install_cmd, options))
1.75
1.76 - os.chdir(this_dir)
1.77 + chdir(this_dir)
1.78
1.79 def install_data(self):
1.80
1.81 @@ -674,11 +676,11 @@
1.82
1.83 for d in ("data", "underlay"):
1.84 source = join(moin_data, d)
1.85 - source_tar = source + os.path.extsep + "tar"
1.86 + source_tar = source + extsep + "tar"
1.87
1.88 - if os.path.exists(source):
1.89 + if exists(source):
1.90 shutil.copytree(source, join(self.common_dir, d))
1.91 - elif os.path.exists(source_tar):
1.92 + elif exists(source_tar):
1.93
1.94 note("Copying archive %s instead of directory %s. Running...\n"
1.95 "make pagepacks\n"
1.96 @@ -694,18 +696,22 @@
1.97 "Install static Web data if appropriate."
1.98
1.99 if not exists(self.htdocs_dir):
1.100 - os.mkdir(self.htdocs_dir)
1.101 + mkdir(self.htdocs_dir)
1.102
1.103 - for item in os.listdir(self.htdocs_dir_source):
1.104 + for item in listdir(self.htdocs_dir_source):
1.105 path = join(self.htdocs_dir_source, item)
1.106 if isdir(path):
1.107 shutil.copytree(path, join(self.htdocs_dir, item))
1.108 else:
1.109 shutil.copy(path, join(self.htdocs_dir, item))
1.110
1.111 - def configure_moin(self):
1.112 + def configure_moin(self, reset=0):
1.113
1.114 - "Edit the Wiki configuration file."
1.115 + """
1.116 + Edit the Wiki configuration file. If the optional 'reset' parameter is
1.117 + specified as a true value, a default configuration will be copied from
1.118 + the distribution if appropriate.
1.119 + """
1.120
1.121 moin_data = self.get_moin_data()
1.122
1.123 @@ -730,7 +736,9 @@
1.124
1.125 else:
1.126 wikiconfig_py = join(self.common_dir, "wikiconfig.py")
1.127 - shutil.copyfile(join(moin_data, "config", "wikiconfig.py"), wikiconfig_py)
1.128 +
1.129 + if not exists(wikiconfig_py) or reset:
1.130 + shutil.copyfile(join(moin_data, "config", "wikiconfig.py"), wikiconfig_py)
1.131
1.132 status("Editing configuration from %s..." % wikiconfig_py)
1.133
1.134 @@ -923,7 +931,7 @@
1.135 have_setfacl = os.system("setfacl -m user:%(web_user)s:r %(file)s > /dev/null 2>&1" % {
1.136 "web_user" : self.web_user, "file" : temp_filename}) == 0
1.137
1.138 - os.remove(temp_filename)
1.139 + remove(temp_filename)
1.140
1.141 # Create the scripts.
1.142
1.143 @@ -944,7 +952,7 @@
1.144 s += extra % vars
1.145
1.146 writefile(postinst_script, s)
1.147 - os.chmod(postinst_script, 0755)
1.148 + chmod(postinst_script, 0755)
1.149
1.150 if have_setfacl:
1.151 note("Run %s to set file ownership and permissions.\n"
1.152 @@ -1054,6 +1062,63 @@
1.153 finally:
1.154 wikiconfig.close()
1.155
1.156 + def migrate_instance(self, test=0):
1.157 +
1.158 + """
1.159 + Migrate the Wiki to the currently supported layout. If 'test' is
1.160 + specified and set to a true value, only print whether the migration can
1.161 + be performed.
1.162 + """
1.163 +
1.164 + conf_dir = join(self.common_dir, "conf")
1.165 + if exists(conf_dir):
1.166 + for filename in listdir(conf_dir):
1.167 + pathname = join(conf_dir, filename)
1.168 + print "Move", filename, "from conf directory."
1.169 + if not test:
1.170 + rename(pathname, join(self.common_dir, filename))
1.171 + else:
1.172 + print "No conf directory."
1.173 +
1.174 + wikidata = join(self.common_dir, "wikidata")
1.175 + if exists(wikidata):
1.176 + htdocs = join(wikidata, "share", "moin", "htdocs")
1.177 + if exists(htdocs):
1.178 + print "Move htdocs from wikidata directory."
1.179 + if not test:
1.180 + rename(htdocs, join(self.common_dir, "htdocs"))
1.181 + else:
1.182 + print "No wikidata directory."
1.183 +
1.184 + # Remove links and directories.
1.185 +
1.186 + for name in ("conf", "wikidata"):
1.187 + d = join(self.common_dir, name)
1.188 + if islink(d):
1.189 + print "Remove %s symbolic link." % name
1.190 + if not test:
1.191 + remove(d)
1.192 +
1.193 + if isdir(conf_dir):
1.194 + print "Remove conf directory."
1.195 + if not test:
1.196 + rmdir(conf_dir)
1.197 +
1.198 + # Add any missing htdocs directory.
1.199 +
1.200 + if not exists(self.htdocs_dir):
1.201 + print "Copy htdocs into the instance."
1.202 + if not test:
1.203 + self.install_static_data()
1.204 +
1.205 + # Now attempt to reconfigure the Wiki.
1.206 +
1.207 + print "Reconfigure the Wiki, the Web script and the site files."
1.208 + if not test:
1.209 + self.configure_moin()
1.210 + self.edit_moin_web_script()
1.211 + self.make_site_files()
1.212 +
1.213 def install_theme(self, theme_dir, theme_name=None):
1.214
1.215 """
1.216 @@ -1078,7 +1143,7 @@
1.217 resources_dir = join(self.htdocs_dir, theme_name)
1.218
1.219 if not exists(resources_dir):
1.220 - os.mkdir(resources_dir)
1.221 + mkdir(resources_dir)
1.222
1.223 status("Copying theme resources to %s..." % resources_dir)
1.224
1.225 @@ -1109,12 +1174,12 @@
1.226 "Install any libraries from 'extension_dir' using a setup script."
1.227
1.228 this_dir = os.getcwd()
1.229 - os.chdir(extension_dir)
1.230 + chdir(extension_dir)
1.231
1.232 options = "install --install-lib=%s" % self.prefix_site_packages
1.233
1.234 os.system("python setup.py %s" % options)
1.235 - os.chdir(this_dir)
1.236 + chdir(this_dir)
1.237
1.238 def install_plugins(self, plugins_dir, plugin_type):
1.239
1.240 @@ -1269,7 +1334,7 @@
1.241 try:
1.242 script = ["MoinMoinPackage|1"]
1.243
1.244 - for filename in os.listdir(page_directory):
1.245 + for filename in listdir(page_directory):
1.246 pathname = join(page_directory, filename)
1.247
1.248 # Add files as pages having the filename as page name.
1.249 @@ -1286,7 +1351,7 @@
1.250
1.251 # Add each file as an attachment.
1.252
1.253 - for attachment in os.listdir(pathname):
1.254 + for attachment in listdir(pathname):
1.255 zipname = "%s_%s" % (filename, attachment)
1.256 package.write(join(pathname, attachment), zipname)
1.257 script.append("AddAttachment|%s|%s|%s||" % (zipname, attachment, parent))