diff --git a/pelican/tools/pelican_quickstart.py b/pelican/tools/pelican_quickstart.py index f747d048..577a435d 100755 --- a/pelican/tools/pelican_quickstart.py +++ b/pelican/tools/pelican_quickstart.py @@ -160,7 +160,7 @@ Please answer the following questions so this script can generate the files need else: CONF['default_pagination'] = False - mkfile = ask('Do you want to generate a Makefile to easily manage your website?', bool, True) + mkfile = ask('Do you want to generate a Makefile and develop server script to easily manage your website?', bool, True) if mkfile: if ask('Do you want to upload your website using FTP?', answer=bool, default=False): @@ -214,4 +214,13 @@ Please answer the following questions so this script can generate the files need except OSError, e: print('Error: {0}'.format(e)) + try: + with open(os.path.join(CONF['basedir'], 'develop_server.sh'), 'w') as fd: + for line in get_template('develop_server.sh'): + template = string.Template(line) + fd.write(template.safe_substitute(CONF)) + fd.close() + except OSError, e: + print('Error: {0}'.format(e)) + print('Done. Your new project is available at %s' % CONF['basedir']) diff --git a/pelican/tools/templates/Makefile.in b/pelican/tools/templates/Makefile.in index 3a3fe74c..df00ffbf 100644 --- a/pelican/tools/templates/Makefile.in +++ b/pelican/tools/templates/Makefile.in @@ -25,6 +25,7 @@ help: @echo ' make html (re)generate the web site ' @echo ' make clean remove the generated files ' @echo ' make publish generate using production settings ' + @echo ' make serve run develop_server.sh restart ' @echo ' ftp_upload upload the web site via FTP ' @echo ' ssh_upload upload the web site via SSH ' @echo ' dropbox_upload upload the web site via Dropbox ' @@ -45,7 +46,7 @@ regenerate: clean $$(PELICAN) -r $$(INPUTDIR) -o $$(OUTPUTDIR) -s $$(CONFFILE) $$(PELICANOPTS) serve: - cd $$(OUTPUTDIR) && python -m SimpleHTTPServer + $$(BASEDIR)/develop_server.sh restart publish: $$(PELICAN) $$(INPUTDIR) -o $$(OUTPUTDIR) -s $$(PUBLISHCONF) $$(PELICANOPTS) diff --git a/pelican/tools/templates/develop_server.sh.in b/pelican/tools/templates/develop_server.sh.in new file mode 100755 index 00000000..2f8c07dd --- /dev/null +++ b/pelican/tools/templates/develop_server.sh.in @@ -0,0 +1,83 @@ +#!/bin/bash +## +# This section should match your Makefile +## +PELICAN=$pelican +PELICANOPTS=$pelicanopts + +BASEDIR=$$(PWD) +INPUTDIR=$$BASEDIR/content +OUTPUTDIR=$$BASEDIR/output +CONFFILE=$$BASEDIR/pelicanconf.py + +### +# Don't change stuff below here unless you are sure +### + +SRV_PID=$$BASEDIR/srv.pid +PELICAN_PID=$$BASEDIR/pelican.pid + +function usage(){ + echo "usage: $$0 (stop) (start) (restart)" + echo "This starts pelican in debug and reload mode and then launches" + echo "A SimpleHTTP server to help site development. It doesn't read" + echo "your pelican options so you edit any paths in your Makefile" + echo "you will need to edit it as well" + exit 3 +} + +function shut_down(){ + if [[ -f $$SRV_PID ]]; then + PID=$$(cat $$SRV_PID) + PROCESS=$$(ps -p $$PID | tail -n 1 | awk '{print $$4}') + if [[ $$PROCESS == python ]]; then + echo "Killing SimpleHTTPServer" + kill $$PID + else + echo "Stale PID, deleting" + fi + rm $$SRV_PID + else + echo "SimpleHTTPServer PIDFile not found" + fi + + if [[ -f $$PELICAN_PID ]]; then + PID=$$(cat $$PELICAN_PID) + PROCESS=$$(ps -p $$PID | tail -n 1 | awk '{print $$4}') + if [[ $$PROCESS != "" ]]; then + echo "Killing Pelican" + kill $$PID + else + echo "Stale PID, deleting" + fi + rm $$PELICAN_PID + else + echo "Pelican PIDFile not found" + fi +} + +function start_up(){ + echo "Starting up Pelican and SimpleHTTPServer" + shift + $$PELICAN --debug --autoreload -r $$INPUTDIR -o $$OUTPUTDIR -s $$CONFFILE $$PELICANOPTS & + echo $$! > $$PELICAN_PID + cd $$OUTPUTDIR + python -m SimpleHTTPServer & + echo $$! > $$SRV_PID + cd $$BASEDIR +} + +### +# MAIN +### +[[ $$# -ne 1 ]] && usage +if [[ $$1 == "stop" ]]; then + shut_down +elif [[ $$1 == "restart" ]]; then + shut_down + start_up +elif [[ $$1 == "start" ]]; then + start_up +else + usage +fi