All pastes #77600 Raw Edit

Unnamed

public text v1 · immutable
·published 2006-07-03 05:58 UTC
rendered paste body
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')