mirror of https://github.com/BOINC/boinc.git
108 lines
2.9 KiB
Python
Executable File
108 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
|
|
'''
|
|
Usage: upgrade [options] project_root
|
|
Options:
|
|
--srcdir default: current directory
|
|
--web_only copy only web (PHP) files
|
|
--server_only copy everything except web files
|
|
|
|
Copy source/build files to a project tree,
|
|
overwriting what's already there.
|
|
Run it in the source directory (tools/upgrade).
|
|
|
|
If project_root is an absolute path, it's the project root.
|
|
Otherwise the project root is HOME/projects/project_root.
|
|
|
|
'''
|
|
|
|
import boinc_path_config
|
|
from Boinc import boinc_project_path, tools
|
|
from Boinc.setup_project import *
|
|
import os, getopt
|
|
|
|
def usage():
|
|
print ("Usage: upgrade [--web_only | --server_only] [--srcdir DIR] project_root")
|
|
raise SystemExit
|
|
|
|
def syntax_error(str):
|
|
raise SystemExit('%s; See "%s --help" for help\n' % (str, sys.argv[0]))
|
|
|
|
try:
|
|
opts, args = getopt.getopt(sys.argv[1:], '', ['help', 'web_only', 'server_only', 'srcdir='])
|
|
except getopt.GetoptError as e:
|
|
syntax_error(e)
|
|
|
|
home = os.path.expanduser('~')
|
|
|
|
options.web_only = False
|
|
options.server_only = False
|
|
options.srcdir = None
|
|
|
|
for o,a in opts:
|
|
if o == '--help': usage()
|
|
elif o == '--web_only': options.web_only = True
|
|
elif o == '--server_only': options.server_only = True
|
|
elif o == '--srcdir': options.srcdir = a
|
|
else:
|
|
raise SystemExit('internal error o=%s'%o)
|
|
|
|
if len(args) == 1:
|
|
if os.path.isabs(args[0]):
|
|
INSTALL_DIR = args[0]
|
|
else:
|
|
INSTALL_DIR = os.path.join(home, 'projects', args[0])
|
|
else:
|
|
syntax_error('No project name')
|
|
|
|
if not options.srcdir:
|
|
for dir in ('.', '..'):
|
|
if os.path.exists(os.path.join(dir, 'html', 'project.sample', 'project.inc')):
|
|
options.srcdir = dir
|
|
if not options.srcdir:
|
|
syntax_error('Not running in the source directory and --srcdir was not specified')
|
|
|
|
if not options.web_only:
|
|
print ("Don't forget to do 'make' first!")
|
|
|
|
if not tools.query_noyes("Overwrite files in "+INSTALL_DIR):
|
|
raise SystemExit
|
|
|
|
if not options.web_only:
|
|
if os.system('cd '+INSTALL_DIR+'; ./bin/stop'):
|
|
raise SystemExit("Couldn't stop project!")
|
|
|
|
print ("Upgrading files... ")
|
|
|
|
options.install_method = 'copy'
|
|
init()
|
|
install_boinc_files(INSTALL_DIR, not options.server_only, not options.web_only)
|
|
|
|
print ("Upgrading files... done")
|
|
|
|
print ("Updating translations")
|
|
try:
|
|
os.system('cd '+INSTALL_DIR+'/html/ops; ./update_translations.php -d 1')
|
|
except:
|
|
print ('''Couldn't install translation files''')
|
|
|
|
opt = '';
|
|
if options.server_only:
|
|
opt = ' --server'
|
|
if options.web_only:
|
|
opt = ' --web'
|
|
|
|
print ("Checking for DB updates")
|
|
os.system('cd '+INSTALL_DIR+'/html/ops; ./upgrade_db.php'+opt)
|
|
|
|
if os.path.exists(INSTALL_DIR+'/html/project/project_news.inc'):
|
|
print ('''\
|
|
|
|
html/project/project_news.inc is deprecated.
|
|
Run html/ops/news_convert.php to convert project news to forum format.
|
|
''')
|
|
|
|
if not options.web_only:
|
|
print ("Run `bin/start' to restart the project.")
|