1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
import re
import urllib2
import supybot.conf as conf
import supybot.world as world
import supybot.ircutils as ircutils
import supybot.registry as registry
import globals
def registryValue(plugin, name, channel=None, value=True):
group = conf.supybot.plugins.get(plugin)
names = registry.split(name)
for name in names:
group = group.get(name)
if channel is not None:
if ircutils.isChannel(channel):
group = group.get(channel)
else:
self.log.debug('registryValue got channel=%r', channel)
if value:
return group()
else:
return group
def configValue(name, channel=None, repo=None, type=None, module=None):
if globals.configOverrides and name in globals.configOverrides:
return globals.configOverrides[name]
return registryValue("Github", name, channel)
def addConfigOverride(name, value):
if not 'override' in name.lower():
globals.configOverrides[name] = value
def resetConfigOverrides():
globals.configOverrides = {}
def plural(number, s, p):
if number != 1:
return p
return s
def maxLen(msg, maxn=400, splitLines=True):
"""Cut down a string if its longer than `maxn` chars"""
if splitLines is True:
lines = msg.splitlines()
line = lines[0]
else:
line = msg
if len(line) > maxn:
ret = "%s..." % (line[0:(maxn-3)])
elif splitLines is True and len(lines) > 1:
ret = "%s..." % (line)
else:
ret = msg
return ret
def colorAction(action):
"""Give an action string (e.g. created, edited) and get a nice IRC colouring"""
if action in [ "created", "opened", "tagged", "success", "passed", "fixed" ]:
return ircutils.bold(ircutils.mircColor(action, "green"))
if action in [ "deleted" ,"closed", "re-tagged", "deleted tag",
"failed", "errored", "failure", "still failing",
"broken" ]:
return ircutils.bold(ircutils.mircColor(action, "red"))
if action in [ "assigned", "merged" ]:
return ircutils.bold(ircutils.mircColor(action, "light blue"))
if action in [ "reopened", "pending" ]:
return ircutils.bold(ircutils.mircColor(action, "blue"))
if action in [ "forced the creation of", "forced the deletion of" ]:
return ircutils.bold(ircutils.mircColor(action,"brown"))
return action
def getShortURL(longurl):
""" Returns a short URL generated by git.io"""
if configValue("shortURL") is False:
url = longurl
else:
data = 'url=%s' % (longurl)
req = urllib2.Request("http://git.io", data)
response = urllib2.urlopen(req)
url = response.info().getheader('Location')
return ircutils.mircColor(url, "purple")
def saveMessages(msgs):
""" Saves the last messages so that the plugin can be easily tested """
if not world.testing:
return
globals.messageList = msgs
def clean(string):
"""Strips IRC control characters from a string"""
regex = re.compile("(([\x02\x1f\x16\x0f])|(\x03(?:\d{1,2}(?:,\d{1,2})?)?))", re.UNICODE)
return regex.sub('', string)
def isYes(string):
"""Returns True if the string represents a yes, False, if it represents
no, and another string if it represents something else"""
value = string.strip().lower()
if value in ['yes', 'always', 'on', 'true']:
return True
if value in ['no', 'never', 'off', 'false', 'null']:
return False
if value in ['changed', 'change', 'on_change', 'diff']:
return 'change'
def isStatusVisible(repo, status):
"""Returns whether the build status message should be shown"""
config = isYes(configValue('showSuccessfulBuildMessages'))
changed = False
if status != "passed":
changed = True
elif type(config) is bool:
changed = config
elif repo not in globals.travisStatuses or status != globals.travisStatuses[repo]:
# Config is 'on_change'
changed = True
globals.travisStatuses[repo] = status
return changed
# Possible colours:
# white, black, (light/dark) blue, (light) green, red, brown, purple,
# orange, yellow, teal, pink, light/dark gray/grey
|