added patching utility

now checks for user version; if it doesn't match current version, apply
patches.

current patch reconfigures user directories, moving files out of
public_html and setting up a symlink from user's "publish dir" to
.ttbp/www instead. also moves style.css into .ttbp/config and symlinks
to www/style.css in preparation for style selector.
master
endorphant 2016-05-16 21:42:32 -04:00
parent 6013daad11
commit 2a406d7958
1 changed files with 85 additions and 37 deletions

View File

@ -19,10 +19,13 @@ LIVE = "http://tilde.town/~"
FEEDBACK = os.path.join("/home", "endorphant", "ttbp-mail") FEEDBACK = os.path.join("/home", "endorphant", "ttbp-mail")
FEEDBOX = "endorphant@tilde.town" FEEDBOX = "endorphant@tilde.town"
USERFILE = os.path.join("/home", "endorphant", "projects", "ttbp", "users.txt") USERFILE = os.path.join("/home", "endorphant", "projects", "ttbp", "users.txt")
VERSION = "0.8.6"
p = inflect.engine() p = inflect.engine()
## user globals ## user globals
USER = os.path.basename(os.path.expanduser("~")) USER = os.path.basename(os.path.expanduser("~"))
PATH = os.path.join("/home", USER, ".ttbp") PATH = os.path.join("/home", USER, ".ttbp")
PUBLIC = os.path.join("/home", USER, "public_html") PUBLIC = os.path.join("/home", USER, "public_html")
WWW = os.path.join(PATH, "www") WWW = os.path.join(PATH, "www")
@ -72,6 +75,11 @@ just keep in mind that you might lose anything you've started here.\
print(stop()) print(stop())
return return
## PATCH CHECK HERE
if not updated():
update_version()
##
redraw() redraw()
while 1: while 1:
@ -131,31 +139,15 @@ press <enter> to begin, or <ctrl-c> to get out of here.
headerfile.close() headerfile.close()
subprocess.call(["cp", os.path.join(SOURCE, "config", "defaults", "footer.txt"), CONFIG]) subprocess.call(["cp", os.path.join(SOURCE, "config", "defaults", "footer.txt"), CONFIG])
subprocess.call(["cp", os.path.join(SOURCE, "config", "defaults", "style.css"), CONFIG])
setup() setup()
#subprocess.call(["cp", os.path.join(SOURCE, "config", "defaults", "style.css"), WWW])
core.load() core.load()
raw_input("\nyou're all good to go, "+chatter.say("friend")+"! hit <enter> to continue.\n\n") raw_input("\nyou're all good to go, "+chatter.say("friend")+"! hit <enter> to continue.\n\n")
return "" return ""
def gen_header(): def gen_header():
#header = []
#header.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\">")
#header.append("\n<html>")
#header.append("\n\t<head>")
#header.append("\n\t\t<title>~"+USER+" on TTBP</title>")
#header.append("\n\t\t<link rel=\"stylesheet\" href=\"style.css\" />")
#header.append("\n\t</head>")
#header.append("\n\t<body>")
#header.append("\n\t\t<div id=\"meta\">")
#header.append("\n\t\t\t<h1><a href=\"index.html#\">~"+USER+"</a>@<a href=\"/~endorphant/ttbp\">TTBP</a></h1>")
#header.append("\n\t\t</div>\n")
#header.append("\n\t\t<!---put your custom html here-->\n\n\n\n")
#header.append("\n\t\t<!---don't put anything after this line-->\n")
#header.append("\n\t\t<div id=\"tlogs\">\n")
header =""" header ="""
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\"> <!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\">
<html> <html>
@ -167,7 +159,7 @@ def gen_header():
<div id=\"meta\"> <div id=\"meta\">
<h1><a href=\"index.html#\">~"""+USER+"""</a>@<a href=\"/~endorphant/ttbp\">TTBP</a></h1> <h1><a href=\"index.html#\">~"""+USER+"""</a>@<a href=\"/~endorphant/ttbp\">TTBP</a></h1>
</div> </div>
<!---put your custom html here--> <!---put your custom html here-->
@ -632,20 +624,20 @@ def select_publish_dir():
if not choice: if not choice:
choice = "blog" choice = "blog"
publishing = os.path.join(PUBLIC, choice) publishDir = os.path.join(PUBLIC, choice)
while os.path.exists(publishing): while os.path.exists(publishDir):
second = raw_input("\n"+publishing+" already exists!\nif you're sure you want to use it, hit <enter> to confirm. otherwise, pick another location: ") second = raw_input("\n"+publishDir+" already exists!\nif you're sure you want to use it, hit <enter> to confirm. otherwise, pick another location: ")
if second == "": if second == "":
break break
choice = second choice = second
publishing = os.path.join(PUBLIC, choice) publishDir = os.path.join(PUBLIC, choice)
return choice return choice
def select_publishing(): def select_publishing():
# setup helper for toggling publishing # setup helper for toggling publishing
publishing = input_yn("""\ publish = input_yn("""\
do you want to publish your feels online? do you want to publish your feels online?
if yes, i'll make a directory in your public_html where your blog posts if yes, i'll make a directory in your public_html where your blog posts
@ -657,15 +649,15 @@ you can change this option any time.
please enter\ please enter\
""") """)
return publishing return publish
def unpublish(): def unpublish():
# remove user's published directory, if it exists # remove user's published directory, if it exists
publishing = os.path.join(PUBLIC, SETTINGS.get("publish dir")) publishDir = os.path.join(PUBLIC, SETTINGS.get("publish dir"))
if os.path.exists(publishing): if os.path.exists(publishDir):
subprocess.call(["rm", "-rf", publishing]) subprocess.call(["rm", "-rf", publishDir])
subprocess.call(["rm", WWW]) subprocess.call(["rm", WWW])
return return
@ -673,19 +665,75 @@ def unpublish():
def make_publish_dir(dir): def make_publish_dir(dir):
# setup helper to create publishing directory # setup helper to create publishing directory
publishing = os.path.join(PUBLIC, dir) if not os.path.exists(WWW):
if not os.path.exists(publishing): subprocess.call(["mkdir", WWW])
subprocess.call(["mkdir", publishing]) subprocess.call(["ln", "-s", os.path.join(CONFIG, "style.css"), os.path.join(WWW, "style.css")])
subprocess.call(["touch", os.path.join(publishing, "index.html")]) subprocess.call(["touch", os.path.join(WWW, "index.html")])
index = open(os.path.join(publishing, "index.html"), "w") index = open(os.path.join(WWW, "index.html"), "w")
index.write("<h1>ttbp blog placeholder</h1>") index.write("<h1>ttbp blog placeholder</h1>")
index.close() index.close()
if os.path.exists(WWW):
subprocess.call(["rm", WWW]) publishDir = os.path.join(PUBLIC, dir)
subprocess.call(["ln", "-s", publishing, WWW]) if os.path.exists(publishDir):
subprocess.call(["cp", os.path.join(SOURCE, "config", "defaults", "style.css"), WWW]) subprocess.call(["rm", publishDir])
subprocess.call(["ln", "-s", WWW, publishDir])
print("\n\tpublishing to "+LIVE+USER+"/"+SETTINGS.get("publish dir")+"/\n\n") print("\n\tpublishing to "+LIVE+USER+"/"+SETTINGS.get("publish dir")+"/\n\n")
##### PATCHES
def updated():
# checks to see if current user is up to the same version as system
versionFile = os.path.join(PATH, "version")
if not os.path.exists(versionFile):
return False
ver = open(versionFile, "r").read()
if ver == VERSION:
return True
return False
def update_version():
# updates current user to current version
versionFile = os.path.join(PATH, "version")
print(versionFile)
# from 0.8.5 to 0.8.6:
if not os.path.isfile(versionFile):# and publishing():
#print("hi let's fix this")
# change style.css location
if os.path.exists(os.path.join(WWW, "style.css")):
subprocess.call(["mv", os.path.join(WWW, "style.css"), CONFIG])
# change www symlink
if os.path.exists(WWW):
subprocess.call(["rm", WWW])
subprocess.call(["mkdir", WWW])
subprocess.call(["ln", "-s", os.path.join(CONFIG, "style.css"), os.path.join(WWW, "style.css")])
publishDir = os.path.join(PUBLIC, SETTINGS.get("publish dir"))
#print(publishDir)
if os.path.exists(publishDir):
#print("removing "+publishDir)
subprocess.call(["rm", "-rf", publishDir])
subprocess.call(["ln", "-s", WWW, os.path.join(PUBLIC, SETTINGS.get("publish dir"))])
# repopulate html files
core.load_files()
core.write("index.html")
# increment user versionfile
open(versionFile, "w").write(VERSION)
##### #####
start()
#start()
print("ttbp beta is out to lunch. bbl.")