mod_hgpoll.py

changeset 116
9e483447654b
parent 115
2bb5c4578ee1
child 117
6c0609395889
--- a/mod_hgpoll.py	Mon Jan 12 02:44:25 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,190 +0,0 @@
-from hgapi import hgapi, Repo
-from datetime import datetime
-import hgpoll as HgPoll
-import re
-import bt as Bt
-from configfile import Config
-from modulecore import command_error
-
-ModuleData = {
-	'commands':
-	[
-		{
-			'name': 'checkhg',
-			'description': 'Polls the zandronum repositories for updates',
-			'args': None,
-			'level': 'admin',
-		},
-		{
-			'name': 'cset',
-			'description': 'Yields changeset information (use a hash or date as key)',
-			'args': '<key>',
-			'level': 'normal',
-		},
-		{
-			'name': 'hg',
-			'description': 'Executes a hg command',
-			'args': '<repo> <command...>',
-			'level': 'admin',
-		},
-		{
-			'name': 'resolves',
-			'description': 'Manually cause a ticket to be resolved by a changeset',
-			'args': '<ticket> <changeset>',
-			'level': 'admin',
-		},
-	]
-}
-
-def plural (a):
-	return '' if a == 1 else 's'
-
-def cmd_checkhg (bot, **rest):
-	HgPoll.force_poll()
-
-def cmd_cset (bot, args, reply, **rest):
-	repo = Repo ('zandronum-everything')
-	data = ""
-	node = args['key']
-
-	# Possibly we're passed a date version instead. Try find the node for this.
-	try:
-		datetime.strptime (args['key'], '%y%m%d-%H%M')
-		HgPoll.make_commits_txt()
-		commits_txt = open ('commits.txt', 'r')
-
-		for line in commits_txt:
-			data = line.replace ('\n', '').split (' ')
-			if data[1] == args['key']:
-				node = data[0]
-				break
-		else:
-			command_error ('couldn\'t find changeset for date %s' % args['key'])
-			return
-	except ValueError:
-		pass
-
-	# zandronum-everything contains all zandronum changesets, so look for changesets in that.
-	try:
-		data = repo.hg_command ("log", "-l1", "-r", node, "--template",
-			"{node|short}@@@@@@@" +
-			"{desc}@@@@@@@" +
-			"{author}@@@@@@@" +
-			"{diffstat}@@@@@@@" +
-			"{date|hgdate}@@@@@@@" +
-			"{bookmarks}@@@@@@@" +
-			"{latesttagdistance}@@@@@@@" +
-			"{latesttag}")
-	except hgapi.HgException:
-		command_error ('couldn\'t find changeset %s' % (node))
-		return
-
-	try:
-		data = data.split ('@@@@@@@')
-		node = data[0]
-		message = data[1]
-		author = data[2]
-		diffstat = data[3]
-		date = datetime.utcfromtimestamp (int (data[4].split (' ')[0]))
-		bookmarks = data[5]
-		latesttagdistance = int (data[6])
-		latesttag = data[7]
-		delta = datetime.utcnow() - date
-		datestring = ''
-
-		if bookmarks:
-			bookmarks = HgPoll.prettify_bookmarks (bookmarks)
-
-		# Find out the Zandronum version of this changeset
-		repo.hg_command ('revert', '-r', node, 'src/version.h')
-		zanversion = '<unknown zandronum version>'
-
-		with open ('zandronum-everything/src/version.h') as version_file:
-			regexps = [ \
-				re.compile (r'#define\s+GAMEVER_STRING\s+"([^"]+)"'), \
-				re.compile (r'#define\s+DOTVERSIONSTR_NOREV\s+"([^"]+)"'), \
-				re.compile (r'#define\s+DOTVERSIONSTR\s+"([^"]+)"')]
-
-			for line in version_file:
-				for rex in regexps:
-					match = rex.match (line)
-					if match != None:
-						zanversion = match.group (1)
-						break
-
-				if match != None:
-					break
-
-
-		repo.hg_command ('revert', '--all')
-
-		# Remove the email address from the author if possible
-		match = re.compile (r'^(.+) <([^>]+)>$.*').match (author)
-		if match:
-			author = match.group (1)
-			email = match.group (2)
-
-		username = Config.find_developer_by_email (email)
-
-		if username != '':
-			author = username
-
-		# Try prettify the diffstat
-		rex = re.compile (r'^([0-9]+): \+([0-9]+)/-([0-9]+)$')
-		match = rex.match (diffstat)
-
-		if match:
-			diffstat = "%s\003:\0033 +%s\003/\0034-%s\003" % (match.group (1), match.group (2), match.group (3))
-
-		if delta.days < 4:
-			if delta.days == 0:
-				if delta.seconds < 60:
-					datestring = 'just now'
-				elif delta.seconds < 3600:
-					minutes = delta.seconds / 60
-					datestring = '%d minute%s ago' % (minutes, plural (minutes))
-				else:
-					hours = delta.seconds / 3600
-					datestring = '%d hour%s ago' % (hours, plural (hours))
-			else:
-				datestring = '%d day%s ago' % (delta.days, plural (delta.days))
-		else:
-			datestring = 'on %s' % (str (date))
-
-		versionstring = ""
-		if latesttagdistance != 0:
-			versionstring = '%s %s, %d hops from %s' % (zanversion, date.strftime ('%y%m%d-%H%M'), latesttagdistance, latesttag)
-		else:
-			versionstring = latesttag
-
-		reply ('changeset\0035 %s%s\003 (%s)\003: committed by\0032 %s\003 %s,\0032 %s' % \
-			(node, bookmarks, versionstring, author, datestring, diffstat))
-
-		for line in message.split ('\n'):
-			reply ('    ' + line)
-	except hgapi.HgException as e:
-		result = HgPoll.decipher_hgapi_error (e)
-
-		if result[0]:
-			command_error (result[1])
-		else:
-			command_error (`e`)
-
-def cmd_hg (bot, args, **rest):
-	try:
-		repo = hgapi.Repo (args['repo'])
-		result = repo.hg_command (*args['command'])
-		reply (replyto, result)
-	except hgapi.hgapi.HgException as e:
-		result = HgPoll.decipher_hgapi_error (e)
-
-		if result[0]:
-			command_error (result[1])
-		else:
-			command_error (`e`)
-
-def cmd_resolves (bot, args, replyto, **rest):
-	try:
-		HgPoll.announce_ticket_resolved (args['ticket'], args['changeset'])
-	except Exception as e:
-		command_error (str (e))

mercurial