import pysvn
import os
import zipfile
import re
import shutil
import sys
all_addons = ['AbacusLib', 'BabbleLib', 'CrayonLib', 'FuBar', 'FuBar_AmmoFu', 'FuBar_BagFu', 'FuBar_ClockFu', 'FuBar_DebugFu', 'FuBar_DurabilityFu', 'FuBar_ExperienceFu', 'FuBar_ExpRepGlueFu', 'FuBar_HonorFu', 'FuBar_LocationFu', 'FuBar_MicroMenuFu', 'FuBar_MoneyFu', 'FuBar_PerformanceFu', 'FuBar_RestFu', 'FuBar_TopScoreFu', 'FuBar-compat-1.0', 'FuBarPlugin-1.2', 'GloryLib', 'JostleLib', 'TabletLib', 'TouristLib']
addons = sys.argv[1:]
if not addons:
addons = all_addons
starter_pack = ['FuBar_AmmoFu', 'FuBar_BagFu', 'FuBar_ClockFu', 'FuBar_DurabilityFu', 'FuBar_ExperienceFu', 'FuBar_HonorFu', 'FuBar_LocationFu', 'FuBar_MoneyFu', 'FuBar_PerformanceFu']
starter_pack_version = 0
client = pysvn.Client()
last_rev = 3362 # keep this
main_author = 'ckknight'
for f in os.listdir('.'):
if f.startswith('FuBar-StarterPack-') and f.endswith('.zip'):
os.remove(f)
break
for dir in addons:
for f in os.listdir('.'):
if f.startswith(dir + '-') and f.endswith('.zip'):
os.remove(f)
for f in os.listdir('.'):
if f.startswith(dir + '-') and f.endswith('-CHANGELOG.txt'):
os.remove(f)
if not os.access(dir, 0):
print 'Checking out', dir
client.checkout('http://svn.wowace.com/root/trunk/' + dir, dir)
else:
print 'Updating', dir
client.update(dir)
minor_version = client.info(dir).commit_revision.number
for dirpath, dirnames, filenames in os.walk(dir):
if ".svn" not in dirpath:
for d in dirnames:
if d != ".svn":
mv = client.info(os.path.join(dirpath, d)).commit_revision.number
if mv > minor_version:
minor_version = mv
if dir in starter_pack:
zip = zipfile.ZipFile('FuBar-StarterPack.zip', os.access('FuBar-StarterPack.zip', 0) and 'a' or 'w', compression=8)
for dirpath, dirnames, filenames in os.walk(dir):
if not '.svn' in dirpath:
for f in filenames:
zip.write(os.path.join(dirpath, f))
zip.close()
if minor_version > starter_pack_version:
starter_pack_version = minor_version
if minor_version < last_rev:
print('No change')
continue
f = file(os.path.join(dir, 'README.txt'))
line = f.readline()
f.close()
major_version = re.match('.*? v(\d+\.\d+) \$.*', line).groups()[0]
print 'Done updating', dir, major_version + '.' + str(minor_version)
changelog = ""
start = client.log(dir, limit=1)[0]['revision'].number
if last_rev > start:
start = last_rev
try:
logs = client.log(dir, revision_end=pysvn.Revision( pysvn.opt_revision_kind.number, -1 ), revision_start=pysvn.Revision( pysvn.opt_revision_kind.number, last_rev ))
except pysvn._pysvn.ClientError:
logs = client.log(dir)
for l in logs:
author = l['author']
m = l['message']
for b in (dir + ' -', dir + ':'):
if m.startswith(b):
m = m[len(b):].strip()
break
if author != main_author:
m = m.strip() + " (" + author + ")"
changelog += m.strip() + '\n'
changelog = major_version + '.' + str(minor_version) + ':\n' + changelog
f = file(dir + '-' + major_version + '.' + str(minor_version) + '-CHANGELOG.txt', 'w')
f.write(changelog)
f.close()
zip = zipfile.ZipFile(dir + '-' + major_version + '.' + str(minor_version) + '.zip', 'w', compression=8)
for dirpath, dirnames, filenames in os.walk(dir):
if not '.svn' in dirpath:
for f in filenames:
if f.endswith('.txt'):
shutil.copy2(os.path.join(dirpath, f), os.path.join(dirpath, f) + '.bak')
p = file(os.path.join(dirpath, f), 'r')
lines = [x.rstrip() for x in p.readlines()]
p.close()
p = file(os.path.join(dirpath, f), 'w')
p.write('\r\n'.join(lines))
p.close()
zip.write(os.path.join(dirpath, f))
shutil.move(os.path.join(dirpath, f) + '.bak', os.path.join(dirpath, f))
else:
zip.write(os.path.join(dirpath, f))
zip.close()
if starter_pack_version > 0:
if os.access('FuBar-StarterPack-1.2.' + str(starter_pack_version) + '.zip', 0):
os.remove('FuBar-StarterPack-1.2.' + str(starter_pack_version) + '.zip')
os.rename('FuBar-StarterPack.zip', 'FuBar-StarterPack-1.2.' + str(starter_pack_version) + '.zip')