committed by
Adam
5 changed files with 1 additions and 413 deletions
@ -1,24 +0,0 @@ |
|||
2014-10-02 |
|||
-Move the sql from the *.tmpl files |
|||
-Add anidb indexer |
|||
-Add supplemental data from anidb during postprocessing |
|||
-Fix grabbing non-propers as propers for certain air-by-date shows |
|||
-Add prefer torrents/usenet and allow custom delay between grabs from torrents/usenet |
|||
-Better postprocessing handling for torrents |
|||
|
|||
2014-10-07 |
|||
-Add release groups/require words/ignore words to add show page |
|||
-Add 'add show and add another show' button to add show page |
|||
-Change the hardcoded global ignore words to optional |
|||
|
|||
2014-10-08 |
|||
-Add login page for http auth as opposed to browser dialog box |
|||
|
|||
2014-10-13 |
|||
-Fix broken backlog |
|||
-Fix season searches |
|||
|
|||
2014-10-21 |
|||
-Remove qtip from config providers and go back to tab |
|||
-Find out why superfish & supersubs js breaks provider sorting |
|||
-Ability to save poster sorting and asc/desc in config |
@ -1,282 +0,0 @@ |
|||
import re |
|||
import urllib |
|||
import ConfigParser |
|||
import sys |
|||
import os |
|||
import shutil |
|||
import zipfile |
|||
import subprocess |
|||
import fnmatch |
|||
import googlecode_upload |
|||
|
|||
from distutils.core import setup |
|||
|
|||
try: |
|||
import py2exe |
|||
except: |
|||
print "The Python module py2exe is required" |
|||
sys.exit(1) |
|||
|
|||
try: |
|||
import pygithub.github |
|||
except: |
|||
print "The Python module pyGitHub is required" |
|||
sys.exit(1) |
|||
|
|||
# mostly stolen from the SABnzbd package.py file |
|||
name = 'SickGear' |
|||
version = '0.1' |
|||
|
|||
release = name + '-' + version |
|||
|
|||
Win32ConsoleName = 'SickBeard-console.exe' |
|||
Win32WindowName = 'SickBeard.exe' |
|||
|
|||
|
|||
def findLatestBuild(): |
|||
regex = "http\://SickGear\.googlecode\.com/files/SickGear\-win32\-alpha\-build(\d+)(?:\.\d+)?\.zip" |
|||
|
|||
svnFile = urllib.urlopen("http://code.google.com/p/SickGear/downloads/list") |
|||
|
|||
for curLine in svnFile.readlines(): |
|||
match = re.search(regex, curLine) |
|||
if match: |
|||
groups = match.groups() |
|||
return int(groups[0]) |
|||
|
|||
return None |
|||
|
|||
|
|||
def recursive_find_data_files(root_dir, allowed_extensions=('*')): |
|||
to_return = {} |
|||
for (dirpath, dirnames, filenames) in os.walk(root_dir): |
|||
if not filenames: |
|||
continue |
|||
|
|||
for cur_filename in filenames: |
|||
|
|||
matches_pattern = False |
|||
for cur_pattern in allowed_extensions: |
|||
if fnmatch.fnmatch(cur_filename, '*.' + cur_pattern): |
|||
matches_pattern = True |
|||
if not matches_pattern: |
|||
continue |
|||
|
|||
cur_filepath = os.path.join(dirpath, cur_filename) |
|||
to_return.setdefault(dirpath, []).append(cur_filepath) |
|||
|
|||
return sorted(to_return.items()) |
|||
|
|||
|
|||
def find_all_libraries(root_dirs): |
|||
libs = [] |
|||
|
|||
for cur_root_dir in root_dirs: |
|||
for (dirpath, dirnames, filenames) in os.walk(cur_root_dir): |
|||
if '__init__.py' not in filenames: |
|||
continue |
|||
|
|||
libs.append(dirpath.replace(os.sep, '.')) |
|||
|
|||
return libs |
|||
|
|||
|
|||
def allFiles(dir): |
|||
files = [] |
|||
for file in os.listdir(dir): |
|||
fullFile = os.path.join(dir, file) |
|||
if os.path.isdir(fullFile): |
|||
files += allFiles(fullFile) |
|||
else: |
|||
files.append(fullFile) |
|||
|
|||
return files |
|||
|
|||
# save the original arguments and replace them with the py2exe args |
|||
oldArgs = [] |
|||
if len(sys.argv) > 1: |
|||
oldArgs = sys.argv[1:] |
|||
del sys.argv[1:] |
|||
|
|||
sys.argv.append('py2exe') |
|||
|
|||
# clear the dist dir |
|||
if os.path.isdir('dist'): |
|||
shutil.rmtree('dist') |
|||
|
|||
# root source dir |
|||
compile_dir = os.path.dirname(os.path.normpath(os.path.abspath(sys.argv[0]))) |
|||
|
|||
if not 'nopull' in oldArgs: |
|||
# pull new source from git |
|||
print 'Updating source from git' |
|||
p = subprocess.Popen('git pull origin master', shell=True, cwd=compile_dir) |
|||
o, e = p.communicate() |
|||
|
|||
# figure out what build this is going to be |
|||
latestBuild = findLatestBuild() |
|||
if 'test' in oldArgs: |
|||
currentBuildNumber = str(latestBuild) + 'a' |
|||
else: |
|||
currentBuildNumber = latestBuild + 1 |
|||
|
|||
# set up the compilation options |
|||
data_files = recursive_find_data_files('data', ['gif', 'png', 'jpg', 'ico', 'js', 'css', 'tmpl']) |
|||
|
|||
options = dict( |
|||
name=name, |
|||
version=release, |
|||
author='SickGear', |
|||
author_email='SickGear@outlook.com', |
|||
description=name + ' ' + release, |
|||
scripts=['SickBeard.py'], |
|||
packages=find_all_libraries(['sickbeard', 'lib']), |
|||
) |
|||
|
|||
# set up py2exe to generate the console app |
|||
program = [{'script': 'SickBeard.py'}] |
|||
options['options'] = {'py2exe': |
|||
{ |
|||
'bundle_files': 3, |
|||
'packages': ['Cheetah'], |
|||
'excludes': ['Tkconstants', 'Tkinter', 'tcl'], |
|||
'optimize': 2, |
|||
'compressed': 0 |
|||
} |
|||
} |
|||
options['zipfile'] = 'lib/SickGear.zip' |
|||
options['console'] = program |
|||
options['data_files'] = data_files |
|||
|
|||
# compile sickbeard-console.exe |
|||
setup(**options) |
|||
|
|||
# rename the exe to sickbeard-console.exe |
|||
try: |
|||
if os.path.exists("dist/%s" % Win32ConsoleName): |
|||
os.remove("dist/%s" % Win32ConsoleName) |
|||
os.rename("dist/%s" % Win32WindowName, "dist/%s" % Win32ConsoleName) |
|||
except: |
|||
print "Cannot create dist/%s" % Win32ConsoleName |
|||
# sys.exit(1) |
|||
|
|||
# we don't need this stuff when we make the 2nd exe |
|||
del options['console'] |
|||
del options['data_files'] |
|||
options['windows'] = program |
|||
|
|||
# compile sickbeard.exe |
|||
setup(**options) |
|||
|
|||
# compile sabToSickbeard.exe using the existing setup.py script |
|||
auto_process_dir = os.path.join(compile_dir, 'autoProcessTV') |
|||
p = subprocess.Popen([sys.executable, os.path.join(auto_process_dir, 'setup.py')], cwd=auto_process_dir, shell=True) |
|||
o, e = p.communicate() |
|||
|
|||
# copy autoProcessTV files to the dist dir |
|||
auto_process_files = ['autoProcessTV/sabToSickBeard.py', |
|||
'autoProcessTV/hellaToSickBeard.py', |
|||
'autoProcessTV/autoProcessTV.py', |
|||
'autoProcessTV/autoProcessTV.cfg.sample', |
|||
'autoProcessTV/sabToSickBeard.exe'] |
|||
|
|||
os.makedirs('dist/autoProcessTV') |
|||
|
|||
for curFile in auto_process_files: |
|||
newFile = os.path.join('dist', curFile) |
|||
print "Copying file from", curFile, "to", newFile |
|||
shutil.copy(curFile, newFile) |
|||
|
|||
# compile updater.exe |
|||
setup( |
|||
options={'py2exe': {'bundle_files': 1}}, |
|||
zipfile=None, |
|||
console=['updater.py'], requires=['Cheetah'] |
|||
) |
|||
|
|||
if 'test' in oldArgs: |
|||
print "Ignoring changelog for test build" |
|||
else: |
|||
# start building the CHANGELOG.txt |
|||
print 'Creating changelog' |
|||
gh = github.GitHub() |
|||
|
|||
# read the old changelog and find the last commit from that build |
|||
lastCommit = "" |
|||
try: |
|||
cl = open("CHANGELOG.txt", "r") |
|||
lastCommit = cl.readlines()[0].strip() |
|||
cl.close() |
|||
except: |
|||
print "I guess there's no changelog" |
|||
|
|||
newestCommit = "" |
|||
changeString = "" |
|||
|
|||
# cycle through all the git commits and save their commit messages |
|||
for curCommit in gh.commits.forBranch('SickGear', 'SickGear'): |
|||
if curCommit.id == lastCommit: |
|||
break |
|||
|
|||
if newestCommit == "": |
|||
newestCommit = curCommit.id |
|||
|
|||
changeString += curCommit.message + "\n\n" |
|||
|
|||
# if we didn't find any changes don't make a changelog file |
|||
if newestCommit != "": |
|||
newChangelog = open("CHANGELOG.txt", "w") |
|||
newChangelog.write(newestCommit + "\n\n") |
|||
newChangelog.write("Changelog for build " + str(currentBuildNumber) + "\n\n") |
|||
newChangelog.write(changeString) |
|||
newChangelog.close() |
|||
else: |
|||
print "No changes found, keeping old changelog" |
|||
|
|||
# put the changelog in the compile dir |
|||
if os.path.exists("CHANGELOG.txt"): |
|||
shutil.copy('CHANGELOG.txt', 'dist/') |
|||
|
|||
# figure out what we're going to call the zip file |
|||
print 'Zipping files...' |
|||
zipFilename = 'SickGear-win32-alpha-build' + str(currentBuildNumber) |
|||
if os.path.isfile(zipFilename + '.zip'): |
|||
zipNum = 2 |
|||
while os.path.isfile(zipFilename + '.{0:0>2}.zip'.format(str(zipNum))): |
|||
zipNum += 1 |
|||
zipFilename = zipFilename + '.{0:0>2}'.format(str(zipNum)) |
|||
|
|||
# get a list of files to add to the zip |
|||
zipFileList = allFiles('dist/') |
|||
|
|||
# add all files to the zip |
|||
z = zipfile.ZipFile(zipFilename + '.zip', 'w', zipfile.ZIP_DEFLATED) |
|||
for file in zipFileList: |
|||
z.write(file, file.replace('dist/', zipFilename + '/')) |
|||
z.close() |
|||
|
|||
print "Created zip at", zipFilename |
|||
|
|||
# i store my google code username/pw in a config so i can have this file in public source control |
|||
config = ConfigParser.ConfigParser() |
|||
configFilename = os.path.join(compile_dir, "gc.ini") |
|||
config.read(configFilename) |
|||
|
|||
gc_username = config.get("GC", "username") |
|||
gc_password = config.get("GC", "password") |
|||
|
|||
# upload to google code unless I tell it not to |
|||
if "noup" not in oldArgs and "test" not in oldArgs: |
|||
print "Uploading zip to google code" |
|||
googlecode_upload.upload(os.path.abspath(zipFilename + ".zip"), "SickGear", gc_username, gc_password, |
|||
"Win32 alpha build " + str(currentBuildNumber) + " (unstable/development release)", |
|||
["Featured", "Type-Executable", "OpSys-Windows"]) |
|||
|
|||
if 'nopush' not in oldArgs and 'test' not in oldArgs: |
|||
# tag commit as a new build and push changes to github |
|||
print 'Tagging commit and pushing' |
|||
p = subprocess.Popen('git tag -a "build-' + str(currentBuildNumber) + '" -m "Windows build ' + zipFilename + '"', |
|||
shell=True, cwd=compile_dir) |
|||
o, e = p.communicate() |
|||
p = subprocess.Popen('git push --tags origin windows_binaries', shell=True, cwd=compile_dir) |
|||
o, e = p.communicate() |
@ -1,96 +0,0 @@ |
|||
import subprocess, os, time, sys, os.path, shutil, re |
|||
|
|||
try: |
|||
log_file = open('sb-update.log', 'w') |
|||
except: |
|||
print "Unable to open sb-update.log, not saving output" |
|||
log_file = None |
|||
|
|||
def log(string): |
|||
if log_file: |
|||
log_file.write(string+'\n') |
|||
print string |
|||
|
|||
def isProcRunning(pid): |
|||
"""See if a pid is running or not""" |
|||
|
|||
tasklist_cmd = 'tasklist /FI "PID eq '+str(pid)+'" /FO CSV' |
|||
|
|||
p = subprocess.Popen(tasklist_cmd, stdout=subprocess.PIPE) |
|||
out, err = p.communicate() |
|||
|
|||
results = out.split('\r\n') |
|||
|
|||
regex = '".*\\.exe","'+str(pid)+'",("[^"]*",?){3}' |
|||
|
|||
for cur_line in results: |
|||
if re.match(regex, cur_line, re.I): |
|||
return True |
|||
|
|||
return False |
|||
|
|||
if len(sys.argv) < 3: |
|||
log("Invalid call.") |
|||
sys.exit() |
|||
|
|||
try: |
|||
|
|||
# this should be retrieved from sys.args |
|||
pid = sys.argv[1] |
|||
|
|||
# process to re-launch |
|||
sb_executable = sys.argv[2:] |
|||
|
|||
sb_closed = False |
|||
|
|||
# try 15 times to make sure it's closed |
|||
for i in range(15): |
|||
isRunning = isProcRunning(pid) |
|||
if isRunning: |
|||
time.sleep(5) |
|||
continue |
|||
else: |
|||
sb_closed = True |
|||
break |
|||
|
|||
if not sb_closed: |
|||
log("SickGear didn't close, unable to update. You'll have to manually restart it.") |
|||
sys.exit() |
|||
|
|||
sb_root = os.path.dirname(sb_executable[0]) |
|||
sb_update_dir = os.path.join(sb_root, 'sb-update') |
|||
|
|||
# do the update if applicable |
|||
if os.path.isdir(sb_update_dir): |
|||
# find update dir name |
|||
update_dir_contents = os.listdir(sb_update_dir) |
|||
if len(update_dir_contents) != 1: |
|||
log("Invalid update data, update failed.") |
|||
sys.exit() |
|||
content_dir = os.path.join(sb_update_dir, update_dir_contents[0]) |
|||
|
|||
# copy everything from sb_update_dir to sb_root |
|||
for dirname, dirnames, filenames in os.walk(content_dir): |
|||
dirname = dirname[len(content_dir)+1:] |
|||
for curfile in filenames: |
|||
if curfile == 'updater.exe': |
|||
continue |
|||
old_path = os.path.join(content_dir, dirname, curfile) |
|||
new_path = os.path.join(sb_root, dirname, curfile) |
|||
|
|||
if os.path.isfile(new_path): |
|||
os.remove(new_path) |
|||
os.renames(old_path, new_path) |
|||
|
|||
if os.path.isdir(sb_update_dir): |
|||
shutil.rmtree(sb_update_dir) |
|||
|
|||
# re-launch SB |
|||
p = subprocess.Popen(sb_executable, cwd=os.getcwd()) |
|||
|
|||
except Exception, e: |
|||
log("Exception while updating: "+str(e)) |
|||
raise |
|||
|
|||
if log_file: |
|||
log_file.close() |
Loading…
Reference in new issue