Wed, 05 Nov 2014 01:36:38 +0200
 fixed: .cset didn't operate properly with dates
0  1  #!/usr/bin/env python 
2  '''  
25
9fa1df6113c4
 changed the copyright line to use my proper legal name instead of my common calling name
Santeri Piippo <crimsondusk64@gmail.com>
parents:
24
diff
changeset

3  Copyright 2014 Teemu Piippo 
0  4  All rights reserved. 
5  
6  Redistribution and use in source and binary forms, with or without  
7  modification, are permitted provided that the following conditions  
8  are met:  
9  
10  1. Redistributions of source code must retain the above copyright  
11  notice, this list of conditions and the following disclaimer.  
12  2. Redistributions in binary form must reproduce the above copyright  
13  notice, this list of conditions and the following disclaimer in the  
14  documentation and/or other materials provided with the distribution.  
15  3. The name of the author may not be used to endorse or promote products  
16  derived from this software without specific prior written permission.  
17  
18  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR  
19  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  
20  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  
21  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,  
22  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT  
23  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  
24  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  
25  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  
26  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF  
27  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
28  '''  
29  
30  import asyncore  
31  import socket  
32  import time  
33  import sys  
34  import traceback  
35  import re  
36  import json  
2
1a24dd2d598e
 added a basic /idgames search
Santeri Piippo <crimsondusk64@gmail.com>
parents:
1
diff
changeset

37  import urllib 
1a24dd2d598e
 added a basic /idgames search
Santeri Piippo <crimsondusk64@gmail.com>
parents:
1
diff
changeset

38  import urllib2 
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

39  import hgapi 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

40  import os 
15
e7999383db5a
 don't crash if utf parsing yields an UnicodeDecodeError
Santeri Piippo <crimsondusk64@gmail.com>
parents:
14
diff
changeset

41  import suds 
23
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

42  import math 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

43  from datetime import datetime 
62
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

44  import commandhandler as CommandHandler 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

45  
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

46  CommandHandler.init_data() 
0  47  
48  try:  
20
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

49  uid = os.geteuid() 
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

50  except: 
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

51  uid = 1 
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

52  
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

53  if uid == 0 and raw_input ('Do you seriously want to run cobalt as root? [y/N] ') != 'y': 
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

54  quit() 
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

55  
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

56  print 'Loading configuration...' 
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

57  try: 
0  58  with open ('cobalt.json', 'r') as fp: 
59  g_config = json.loads (fp.read())  
60  except IOError as e:  
61  print 'couldn\'t open cobalt.json: %s' % e  
62  quit()  
63  
64  g_admins = g_config['admins']  
65  g_mynick = g_config['nickname']  
66  
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

67  g_BotActive = False 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

68  g_needCommitsTxtRebuild = True 
2
1a24dd2d598e
 added a basic /idgames search
Santeri Piippo <crimsondusk64@gmail.com>
parents:
1
diff
changeset

69  
0  70  # 
71  # SOAP stuff  
72  #  
3
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

73  suds_active = False 
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

74  
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

75  try: 
20
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

76  print 'Initializing MantisBT connection...' 
15
e7999383db5a
 don't crash if utf parsing yields an UnicodeDecodeError
Santeri Piippo <crimsondusk64@gmail.com>
parents:
14
diff
changeset

77  suds_import = suds.xsd.doctor.Import ('http://schemas.xmlsoap.org/soap/encoding/', 'http://schemas.xmlsoap.org/soap/encoding/') 
e7999383db5a
 don't crash if utf parsing yields an UnicodeDecodeError
Santeri Piippo <crimsondusk64@gmail.com>
parents:
14
diff
changeset

78  suds_client = suds.client.Client ('https://zandronum.com/tracker/api/soap/mantisconnect.php?wsdl', plugins=[suds.xsd.doctor.ImportDoctor (suds_import)]) 
3
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

79  suds_active = True 
20
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

80  except Exception as e: 
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

81  print 'Failed to establish MantisBT connection: ' + `e` 
3
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

82  pass 
0  83  
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

84  btannounce_active = False 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

85  btannounce_timeout = 0 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

86  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

87  def save_config(): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

88  with open ('cobalt.json', 'w') as fp: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

89  json.dump (g_config, fp, sort_keys = True, indent = 4) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

90  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

91  def cfg (key, default): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

92  if not hasattr (g_config, key): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

93  g_config[key] = default 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

94  save_config() 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

95  return default 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

96  return g_config[key] 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

97  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

98  def bt_updatechecktimeout(): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

99  global btannounce_timeout 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

100  btannounce_timeout = time.time() + (cfg ('btlatest_checkinterval', 5) * 60) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

101  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

102  if suds_active: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

103  try: 
20
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

104  sys.stdout.write ('Retrieving latest tracker ticket... ') 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

105  btannounce_id = suds_client.service.mc_issue_get_biggest_id (g_config['trackeruser'], g_config['trackerpassword'], 0) 
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

106  btannounce_active = True 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

107  bt_updatechecktimeout() 
20
2603faf5f91b
 don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents:
19
diff
changeset

108  print btannounce_id 
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

109  except Exception as e: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

110  pass 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

111  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

112  def bt_getissue(ticket): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

113  global suds_client 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

114  global g_config 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

115  return suds_client.service.mc_issue_get (g_config['trackeruser'], g_config['trackerpassword'], ticket) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

116  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

117  def bt_checklatest(): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

118  global btannounce_timeout 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

119  global btannounce_id 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

120  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

121  if time.time() >= btannounce_timeout: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

122  bt_updatechecktimeout() 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

123  newid = btannounce_id 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

124  try: 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

125  newid = suds_client.service.mc_issue_get_biggest_id (g_config['trackeruser'], g_config['trackerpassword'], 0) 
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

126  except Exception as e: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

127  pass 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

128  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

129  while newid > btannounce_id: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

130  try: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

131  btannounce_id += 1 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

132  data = bt_getissue (btannounce_id) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

133  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

134  for client in g_clients: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

135  client.announce_ticket (data) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

136  except Exception as e: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

137  pass 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

138  
0  139  # 
140  # irc_client flags  
141  #  
142  CLIF_CONNECTED = (1 << 1)  
143  
144  #  
145  # List of all clients  
146  #  
147  g_clients = []  
148  
149  class channel (object):  
150  name = ""  
151  password = ""  
152  
153  def __init__ (self, name):  
154  self.name = name  
155  
156  #  
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

157  # Prints a line to log channel(s) 
0  158  # 
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

159  def chanlog (line): 
0  160  for client in g_clients: 
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

161  if not client.flags & CLIF_CONNECTED: 
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

162  continue 
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

163  
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

164  for channel in client.channels: 
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

165  if channel['logchannel']: 
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

166  client.write ("PRIVMSG %s :%s" % (channel['name'], line)) 
0  167  
168  #  
169  # Exception handling  
170  #  
171  def handle_exception(excType, excValue, trace):  
172  excepterm (traceback.format_exception(excType, excValue, trace))  
173  
174  def excepterm(data):  
175  for segment in data:  
176  for line in segment.splitlines():  
177  print line  
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

178  chanlog (line) 
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

179  
0  180  for client in g_clients: 
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

181  if len(data) > 0: 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

182  client.exceptdie() 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

183  else: 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

184  client.quit_irc() 
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

185  
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

186  if g_BotActive: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

187  restart_self() 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

188  else: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

189  quit() 
0  190  
191  sys.excepthook = handle_exception  
192  
1
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

193  def check_admin (sender, ident, host, command): 
16
6672cecf3ed1
 don't crash if unicode parsing fails, don't require nickname for admin masks
Santeri Piippo <crimsondusk64@gmail.com>
parents:
15
diff
changeset

194  if not "%s@%s" % (ident, host) in g_admins: 
1
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

195  raise logical_exception (".%s requires admin access" % command) 
0  196  
1
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

197  class logical_exception (Exception): 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

198  def __init__ (self, value): 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

199  self.value = value 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

200  def __str__ (self): 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

201  return self.value 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

202  
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

203  # from http://www.daniweb.com/softwaredevelopment/python/code/260268/restartyourpythonprogram 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

204  def restart_self(): 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

205  python = sys.executable 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

206  os.execl (python, python, * sys.argv) 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

207  
59
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

208  def make_commits_txt(): 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

209  global g_needCommitsTxtRebuild 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

210  
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

211  if g_needCommitsTxtRebuild == False: 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

212  return 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

213  
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

214  print 'Building commits.txt...' 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

215  # Update zandronumeverything 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

216  repo = hgapi.Repo ('zandronumeverything') 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

217  repo.hg_command ('pull', '../zandronumsandbox') 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

218  repo.hg_command ('pull', '../zandronumsandboxstable') 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

219  
63
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

220  data = repo.hg_command ('log', 'template', '{node} {datehgdate}\n') 
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

221  
59
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

222  f = open ('commits.txt', 'w') 
63
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

223  
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

224  for line in data.split ('\n'): 
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

225  if line == '': 
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

226  continue 
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

227  
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

228  words = line.split (' ') 
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

229  timestamp = int (words[1]) 
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

230  f.write ('%s %s\n' % (words[0], datetime.utcfromtimestamp (timestamp).strftime ('%y%m%d%H%M'))) 
59
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

231  f.close() 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

232  g_needCommitsTxtRebuild = False 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

233  #enddef 
6a7199a714a1
 make_commits_txt must be higher up..
Teemu Piippo <crimsondusk64@gmail.com>
parents:
58
diff
changeset

234  
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

235  ' Check if a repository exists ' 
48
dbef418cc1c8
 now clones sandbox correctly
Teemu Piippo <crimsondusk64@gmail.com>
parents:
47
diff
changeset

236  def check_repo_exists (repo_name, repo_owner): 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

237  print 'Checking that %s exists...' % repo_name 
48
dbef418cc1c8
 now clones sandbox correctly
Teemu Piippo <crimsondusk64@gmail.com>
parents:
47
diff
changeset

238  repo_url = 'https://bitbucket.org/%s/%s' % (repo_owner, repo_name) 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

239  zanrepo = hgapi.Repo (repo_name) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

240  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

241  try: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

242  zanrepo.hg_command ('id', '.') 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

243  except hgapi.hgapi.HgException: 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

244  # If the repo does not exist, clone it. zandronumeverything can be spawned off other repos though 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

245  if repo_name == 'zandronumeverything': 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

246  if not os.path.exists (repo_name): 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

247  os.makedirs (repo_name) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

248  
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

249  global g_needCommitsTxtRebuild 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

250  g_needCommitsTxtRebuild = True 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

251  print 'Init %s' % repo_name 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

252  zanrepo.hg_command ('init') 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

253  print 'Cloning zandronumsandbox into %s' % repo_name 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

254  zanrepo.hg_command ('pull', '../zandronumsandbox') 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

255  print 'Cloning zandronumsandboxstable into %s' % repo_name 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

256  zanrepo.hg_command ('pull', '../zandronumsandboxstable') 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

257  print 'Done' 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

258  make_commits_txt() 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

259  return 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

260  #fi 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

261  
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

262  try: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

263  print 'Cloning %s...' % repo_name 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

264  zanrepo.hg_clone (repo_url, repo_name) 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

265  print 'Cloning done.' 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

266  except Exception as e: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

267  print 'Unable to clone %s from %s: %s' % (repo_name, repo_url, str (`e`)) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

268  quit(1) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

269  #tried 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

270  #enddef 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

271  
48
dbef418cc1c8
 now clones sandbox correctly
Teemu Piippo <crimsondusk64@gmail.com>
parents:
47
diff
changeset

272  check_repo_exists ('zandronum', 'Torr_Samaho') 
dbef418cc1c8
 now clones sandbox correctly
Teemu Piippo <crimsondusk64@gmail.com>
parents:
47
diff
changeset

273  check_repo_exists ('zandronumstable', 'Torr_Samaho') 
dbef418cc1c8
 now clones sandbox correctly
Teemu Piippo <crimsondusk64@gmail.com>
parents:
47
diff
changeset

274  check_repo_exists ('zandronumsandbox', 'crimsondusk') 
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

275  check_repo_exists ('zandronumsandboxstable', 'crimsondusk') 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

276  check_repo_exists ('zandronumeverything', '') 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

277  
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

278  repocheck_timeout = {'zandronum':(time.time()) + 15, 'zandronumstable':(time.time() + 15), 'zandronumsandbox':(time.time()) + 15, 'zandronumsandboxstable':(time.time()) + 15} 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

279  
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

280  def get_commit_data (zanrepo, rev, template): 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

281  return zanrepo.hg_command ('log', 'l', '1', 'r', rev, 'template', template) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

282  #enddef 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

283  
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

284  def decipher_hgapi_error (e): 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

285  # Blah, hgapi, why must your error messages be so mangled? 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

286  try: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

287  rawmsg = e.message.replace('\n', '').replace('" +','').replace('\t','') 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

288  errmsg = re.compile (r'.*: tErr: (.*)Out:.*').match (rawmsg).group (1) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

289  return [True, errmsg] 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

290  except: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

291  return [False, ''] 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

292  #endtry 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

293  #enddef 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

294  
46
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

295  def bbcodify(commit_diffstat): 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

296  result='' 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

297  for line in commit_diffstat.split('\n'): 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

298  # Add green colortags for the ++++++++++ stream 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

299  rex = re.compile (r'^(.*)\(.*) (\+*)(*)(.*)$') 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

300  match = rex.match (line) 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

301  if match: 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

302  line = '%s%s [color=#5F7]%s[/color][color=#F53]%s[/color]%s\n' \ 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

303  % (match.group (1), match.group (2), match.group (3), match.group (4), match.group (5)) 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

304  
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

305  # Tracker doesn't seem to like empty color tags 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

306  line = line.replace ('[color=#5F7][/color]', '').replace ('[color=#F53][/color]', '') 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

307  #else: 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

308  #rex = re.compile (r'^(.*) ([09]+) insertions\(\+\), ([09]+) deletions\(\\)$') 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

309  #match = rex.match (line) 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

310  #if match: 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

311  #line = '%s [b][color=green]%s[/color][/b] insertions, [b][color=red]%s[/color][/b] deletions\n' \ 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

312  #% (match.group (1), match.group (2), match.group (3)) 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

313  
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

314  result += line 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

315  #done 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

316  
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

317  return result 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

318  #enddef 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

319  
50  320  def find_developer_by_email (commit_email): 
49
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

321  for developer, emails in g_config['developer_emails'].iteritems(): 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

322  for email in emails: 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

323  if commit_email == email: 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

324  return developer 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

325  #fi 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

326  #done 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

327  #done 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

328  
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

329  return '' 
49
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

330  #enddef 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

331  
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

332  ' Retrieves and processes commits for zandronum repositories ' 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

333  ' Ensure both repositories are OK before using this! ' 
34
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

334  def process_zan_repo_updates (repo_name): 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

335  global repocheck_timeout 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

336  global suds_client 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

337  global g_config 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

338  global g_clients 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

339  
34
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

340  usestable = repo_name == 'zandronumstable' 
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

341  usesandbox = repo_name == 'zandronumsandbox' or repo_name == 'zandronumsandboxstable' 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

342  repo_owner = 'Torr_Samaho' if not usesandbox else 'crimsondusk' 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

343  repo_url = 'https://bitbucket.org/%s/%s' % (repo_owner, repo_name) 
34
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

344  num_commits = 0 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

345  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

346  if time.time() < repocheck_timeout[repo_name]: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

347  return 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

348  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

349  repocheck_timeout[repo_name] = time.time() + (cfg ('hg_checkinterval', 15) * 60) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

350  zanrepo = hgapi.Repo (repo_name) 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

351  commit_data = [] 
42
adbf42ede463
 use a specific delimeter string '@@@@@@@@@@@' for hg incoming data as some commit messages are multiline
Teemu Piippo <crimsondusk64@gmail.com>
parents:
41
diff
changeset

352  delimeter = '@@@@@@@@@@' 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

353  
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

354  try: 
42
adbf42ede463
 use a specific delimeter string '@@@@@@@@@@@' for hg incoming data as some commit messages are multiline
Teemu Piippo <crimsondusk64@gmail.com>
parents:
41
diff
changeset

355  data = zanrepo.hg_command ('incoming', 'quiet', 'template', 
adbf42ede463
 use a specific delimeter string '@@@@@@@@@@@' for hg incoming data as some commit messages are multiline
Teemu Piippo <crimsondusk64@gmail.com>
parents:
41
diff
changeset

356  '{nodeshort} {desc}' + delimeter) 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

357  except hgapi.hgapi.HgException as e: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

358  deciphered = decipher_hgapi_error (e) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

359  
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

360  if deciphered[0] and len(deciphered[1]) > 0: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

361  chanlog ("error while using hg import on %s: %s" % (repo_name, deciphered[1])) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

362  #fi 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

363  
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

364  return 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

365  except Exception as e: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

366  chanlog ("%s" % `e`) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

367  return 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

368  #tried 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

369  
42
adbf42ede463
 use a specific delimeter string '@@@@@@@@@@@' for hg incoming data as some commit messages are multiline
Teemu Piippo <crimsondusk64@gmail.com>
parents:
41
diff
changeset

370  for line in data.split (delimeter): 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

371  if line == '': 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

372  continue 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

373  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

374  
43
637cee1d89f0
 removed line delimeters from hg incoming regex parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
42
diff
changeset

375  rex = re.compile (r'([^ ]+) (.+)') 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

376  match = rex.match (line) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

377  failed = False 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

378  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

379  if not match: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

380  chanlog ('malformed hg data: %s' % line) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

381  continue 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

382  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

383  
32
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

384  commit_node = match.group (1) 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

385  commit_message = match.group (2) 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

386  commit_data.append ([commit_node, commit_message]) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

387  #done 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

388  
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

389  if len (commit_data) > 0: 
53  390  pull_args = []; 
391  
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

392  for commit in commit_data: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

393  pull_args.append ('r'); 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

394  pull_args.append (commit[0]); 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

395  #done 
32
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

396  
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

397  try: 
52  398  zanrepo.hg_command ('pull', *pull_args) 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

399  
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

400  # Also pull these commits to the zandronum main repository 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

401  if usestable: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

402  devrepo = hgapi.Repo ('zandronum') 
52  403  devrepo.hg_command ('pull', '../zandronumstable', *pull_args) 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

404  #fi 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

405  
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

406  # Pull everything into sandboxes too 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

407  if not usesandbox: 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

408  devrepo = hgapi.Repo ('zandronumsandbox') 
52  409  devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args) 
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

410  
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

411  devrepo = hgapi.Repo ('zandronumsandboxstable') 
52  412  devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args) 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

413  #fi 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

414  
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

415  devrepo = hgapi.Repo ('zandronumeverything') 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

416  devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

417  
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

418  global g_needCommitsTxtRebuild 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

419  g_needCommitsTxtRebuild = True 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

420  except Exception as e: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

421  chanlog ('Warning: unable to pull: %s' % `e`) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

422  return 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

423  #tried 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

424  #fi 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

425  
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

426  for commit in commit_data: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

427  commit_node = commit[0] 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

428  commit_message = commit[1] 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

429  
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

430  try: 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

431  if usesandbox: 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

432  commit_author = get_commit_data (zanrepo, commit_node, '{author}') 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

433  commit_url = '%s/commits/%s' % (repo_url, commit_node) 
49
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

434  commit_email = '' 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

435  
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

436  # Remove the email address from the author if possible 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

437  rex = re.compile (r'^(.+) <([^>]+)>$.*') 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

438  match = rex.match (commit_author) 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

439  if match: 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

440  commit_author = match.group (1) 
49
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

441  commit_email = match.group (2) 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

442  #fi 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

443  
49
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

444  commit_trackeruser = find_developer_by_email (commit_email) 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

445  committer = commit_trackeruser if commit_trackeruser != '' else commit_author 
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

446  
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

447  for irc_client in g_clients: 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

448  for channel in irc_client.cfg['channels']: 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

449  if 'btprivate' in channel and channel['btprivate'] == True: 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

450  irc_client.privmsg (channel['name'], 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

451  "%s: new commit %s by %s: %s" 
49
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

452  % (repo_name, commit_node, committer, commit_url)) 
47
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

453  
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

454  for line in commit_message.split ('\n'): 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

455  irc_client.privmsg (channel['name'], line) 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

456  #fi 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

457  #done 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

458  #done 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

459  
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

460  num_commits += 1 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

461  continue 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

462  #fi 
103f184951bb
 added sandbox support
Teemu Piippo <crimsondusk64@gmail.com>
parents:
46
diff
changeset

463  
54
180ae24d46f2
 also check for 'should fix' in commit messages
Teemu Piippo <crimsondusk64@gmail.com>
parents:
53
diff
changeset

464  rex = re.compile (r'^.*(fixesresolvesaddressesshould fix) ([09]+).*$') 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

465  match = rex.match (commit_message) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

466  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

467  if not match: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

468  continue # no "fixes" message in the commit 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

469  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

470  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

471  ticket_id = int (match.group (2)) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

472  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

473  # Acquire additional data 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

474  moredata = get_commit_data (zanrepo, commit_node, 
46
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

475  '{authornonempty}\n{date(date, \'%A %d %B %Y %T\')}').split('\n') 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

476  
46
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

477  if len (moredata) != 2: 
40
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

478  chanlog ('error while processing %s: malformed hg data' % commit_node) 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

479  continue 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

480  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

481  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

482  commit_author = moredata[0] 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

483  commit_date = moredata[1] 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

484  commit_email = "" 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

485  
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

486  try: 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

487  ticket_data = suds_client.service.mc_issue_get (g_config['trackeruser'], 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

488  g_config['trackerpassword'], ticket_id) 
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

489  except Exception as e: 
40
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

490  chanlog ('error while processing %s: %s' % (commit_node, `e`)) 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

491  continue 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

492  #tried 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

493  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

494  # Remove the email address from the author if possible 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

495  rex = re.compile (r'^(.+) <([^>]+)>$.*') 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

496  match = rex.match (commit_author) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

497  if match: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

498  commit_author = match.group (1) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

499  commit_email = match.group (2) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

500  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

501  
46
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

502  commit_diffstat = zanrepo.hg_command ('diff', 'change', commit_node, 'stat') 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

503  
46
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

504  if len(commit_diffstat) > 0: 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

505  # commit_diffstat = 'Changes in files:\n[code]\n' + commit_diffstat + '\n[/code]' 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

506  commit_diffstat = 'Changes in files:\n' + bbcodify(commit_diffstat) 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

507  else: 
c4d231fdf1c0
 now with a more detailed diffstat, in color!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
45
diff
changeset

508  commit_diffstat = 'No changes in files.' 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

509  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

510  # Compare the email addresses against known developer usernames 
49
2df3d5b2f364
 print username when possible
Teemu Piippo <crimsondusk64@gmail.com>
parents:
48
diff
changeset

511  commit_trackeruser = find_developer_by_email (commit_email) 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

512  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

513  if commit_trackeruser != '': 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

514  commit_author += ' [%s]' % commit_trackeruser 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

515  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

516  
37
3399d716b3ae
 fixed: the [url] tags in BT messages had unnecessary quotes
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset

517  message = 'Issue addressed by commit %s: [b][url=%s/commits/%s]%s[/url][/b]' \ 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

518  % (commit_node, repo_url, commit_node, commit_message) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

519  message += "\nCommitted by %s on %s\n\n%s" \ 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

520  % (commit_author, commit_date, commit_diffstat) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

521  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

522  need_update = False 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

523  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

524  # If not already set, set handler 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

525  if not 'handler' in ticket_data: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

526  ticket_data['handler'] = {'name': commit_trackeruser} 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

527  need_update = True 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

528  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

529  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

530  # Find out the status level of the ticket 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

531  needs_testing_level = 70 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

532  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

533  if ticket_data['status']['id'] < needs_testing_level: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

534  ticket_data.status['id'] = needs_testing_level 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

535  need_update = True 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

536  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

537  
35
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

538  # Set target version if not set 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

539  if not 'target_version' in ticket_data: 
45
fdfcdf405b16
 bump interpreted version number of zandronumstable from 1.3 to 1.4
Teemu Piippo <crimsondusk64@gmail.com>
parents:
44
diff
changeset

540  ticket_data['target_version'] = '1.4' if repo_name == 'zandronumstable' else '2.0' 
35
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

541  need_update = True 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

542  elif (ticket_data['target_version'] == '2.0' or ticket_data['target_version'] == '2.0beta') \ 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

543  and repo_name == 'zandronumstable': 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

544  # Target version was 2.0 but this was just committed to zandronumstable, adjust 
45
fdfcdf405b16
 bump interpreted version number of zandronumstable from 1.3 to 1.4
Teemu Piippo <crimsondusk64@gmail.com>
parents:
44
diff
changeset

545  ticket_data['target_version'] = '1.4' 
35
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

546  need_update = True 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

547  elif ticket_data['target_version'] == '2.0beta': 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

548  # Fix target version from 2.0beta to 2.0 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

549  ticket_data['target_version'] = '2.0' 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

550  need_update = True 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

551  #fi 
237e82bcd02f
 update target version in tickets when acting upon commit data
Teemu Piippo <crimsondusk64@gmail.com>
parents:
34
diff
changeset

552  
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

553  # Announce on IRC 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

554  for irc_client in g_clients: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

555  for channel in irc_client.cfg['channels']: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

556  if 'btannounce' in channel and channel['btannounce'] == True: 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

557  irc_client.privmsg (channel['name'], 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

558  "%s: commit %s fixes issue %d: %s" 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

559  % (repo_name, commit_node, ticket_id, commit_message)) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

560  irc_client.privmsg (channel['name'], 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

561  "Read all about it here: " + irc_client.get_ticket_url (ticket_id)) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

562  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

563  #done 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

564  #done 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

565  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

566  if need_update: 
36
543d7a5e3b8b
 when updating BT tickets, the note data must be cleared in order to not update all the tickets in the ticket. WTF is MantisBT smoking?
Teemu Piippo <crimsondusk64@gmail.com>
parents:
35
diff
changeset

567  # We need to remove the note data, otherwise the ticket notes 
543d7a5e3b8b
 when updating BT tickets, the note data must be cleared in order to not update all the tickets in the ticket. WTF is MantisBT smoking?
Teemu Piippo <crimsondusk64@gmail.com>
parents:
35
diff
changeset

568  # will get unnecessary updates. WTF, MantisBT? 
543d7a5e3b8b
 when updating BT tickets, the note data must be cleared in order to not update all the tickets in the ticket. WTF is MantisBT smoking?
Teemu Piippo <crimsondusk64@gmail.com>
parents:
35
diff
changeset

569  ticket_data.notes = [] 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

570  suds_client.service.mc_issue_update (g_config['trackeruser'], g_config['trackerpassword'], ticket_id, ticket_data) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

571  #fi 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

572  
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

573  suds_client.service.mc_issue_note_add (g_config['trackeruser'], g_config['trackerpassword'], ticket_id, { 'text': message }) 
34
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

574  num_commits += 1 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

575  except Exception as e: 
32
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

576  chanlog ('Error while processing %s: %s' % (commit_node, `e`)) 
39
afd590258a93
 reworked repository watching. Now uses incoming only once to get a list of commits, then pulls, then operates on pulled data. The incoming command doesn't seem to support the 'r' switch properly? Should also be a bit faster now and should use less networking.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
38
diff
changeset

577  continue 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

578  #tried 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

579  #done 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

580  
34
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

581  return num_commits > 0 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

582  #enddef 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

583  
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

584  def plural (a): 
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

585  return '' if a == 1 else 's' 
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

586  
1
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

587  # 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

588  # Main IRC client class 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

589  # 
0  590  class irc_client (asyncore.dispatcher): 
591  def __init__ (self, cfg, flags):  
592  self.name = cfg['name']  
593  self.host = cfg['address']  
594  self.port = cfg['port']  
595  self.password = cfg['password'] if 'password' in cfg else ''  
596  self.channels = cfg['channels']  
597  self.flags = flags  
598  self.send_buffer = list()  
599  self.umode = cfg['umode'] if 'umode' in cfg else ''  
600  self.cfg = cfg  
601  self.mynick = ''  
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

602  self.verbose = g_config['verbose'] if 'verbose' in g_config else False 
11
90851b22ab88
 gddmnt, python. you and your type system
Santeri Piippo <crimsondusk64@gmail.com>
parents:
10
diff
changeset

603  self.commandprefix = g_config['commandprefix'][0] if 'commandprefix' in g_config else '.' 
8
dd467db4b18e
 made conflictsuffix configurable
Santeri Piippo <crimsondusk64@gmail.com>
parents:
7
diff
changeset

604  
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

605  for channel in self.channels: 
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

606  if not 'logchannel' in channel: 
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

607  channel['logchannel'] = False 
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

608  channel['namesdone'] = True 
27
ac59b5ae7a78
 disabled unstable/incomplete linkbot code.. I need to learn to stash changes proper
Teemu Piippo <crimsondusk64@gmail.com>
parents:
26
diff
changeset

609  #channel['haslinkbot'] = False 
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

610  
8
dd467db4b18e
 made conflictsuffix configurable
Santeri Piippo <crimsondusk64@gmail.com>
parents:
7
diff
changeset

611  if not 'conflictsuffix' in self.cfg: 
dd467db4b18e
 made conflictsuffix configurable
Santeri Piippo <crimsondusk64@gmail.com>
parents:
7
diff
changeset

612  self.cfg['conflictsuffix'] = '`' 
dd467db4b18e
 made conflictsuffix configurable
Santeri Piippo <crimsondusk64@gmail.com>
parents:
7
diff
changeset

613  
7
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

614  self.desired_name = self.cfg['nickname'] if 'nickname' in self.cfg else g_config['nickname'] 
0  615  g_clients.append (self) 
616  asyncore.dispatcher.__init__ (self)  
617  self.create_socket (socket.AF_INET, socket.SOCK_STREAM)  
618  self.connect ((self.host, self.port))  
619  
7
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

620  def register_to_irc (self): 
0  621  ident = self.cfg['ident'] if 'ident' in self.cfg else g_config['ident'] 
622  gecos = self.cfg['gecos'] if 'gecos' in self.cfg else g_config['gecos']  
623  if 'password' in self.cfg:  
624  self.write ("PASS %s" % self.cfg['password'])  
625  self.write ("USER %s * * :%s" % (ident, gecos))  
7
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

626  self.write ("NICK %s" % self.mynick) 
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

627  
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

628  def handle_connect (self): 
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

629  self.mynick = self.desired_name 
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

630  print "Connected to [%s] %s:%d" % (self.name, self.host, self.port) 
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

631  self.register_to_irc() 
0  632  
17
f604687dd35b
 don't try to send stuff we cannot convert to ascii.. I don't like it but it's better than a crash
Santeri Piippo <crimsondusk64@gmail.com>
parents:
16
diff
changeset

633  def write (self, utfdata): 
f604687dd35b
 don't try to send stuff we cannot convert to ascii.. I don't like it but it's better than a crash
Santeri Piippo <crimsondusk64@gmail.com>
parents:
16
diff
changeset

634  try: 
f604687dd35b
 don't try to send stuff we cannot convert to ascii.. I don't like it but it's better than a crash
Santeri Piippo <crimsondusk64@gmail.com>
parents:
16
diff
changeset

635  self.send_buffer.append ("%s" % utfdata.decode("utf8","ignore").encode("ascii","ignore")) 
f604687dd35b
 don't try to send stuff we cannot convert to ascii.. I don't like it but it's better than a crash
Santeri Piippo <crimsondusk64@gmail.com>
parents:
16
diff
changeset

636  except UnicodeEncodeError: 
f604687dd35b
 don't try to send stuff we cannot convert to ascii.. I don't like it but it's better than a crash
Santeri Piippo <crimsondusk64@gmail.com>
parents:
16
diff
changeset

637  pass 
0  638  
639  def handle_close (self):  
640  print "Connection to [%s] %s:%d terminated." % (self.name, self.host, self.port)  
641  self.close()  
642  
643  def handle_write (self):  
644  self.send_all_now()  
645  
646  def readable (self):  
647  return True  
648  
649  def writable (self):  
650  return len (self.send_buffer) > 0  
651  
652  def send_all_now (self):  
653  for line in self.send_buffer:  
9
0604f6b9f781
 added verbosity setting
Santeri Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset

654  if self.verbose: 
0604f6b9f781
 added verbosity setting
Santeri Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset

655  print "[%s] < %s" % (self.name, line) 
0  656  self.send ("%s\n" % line) 
657  self.send_buffer = []  
658  
659  def handle_read (self):  
660  lines = self.recv (4096).splitlines()  
2
1a24dd2d598e
 added a basic /idgames search
Santeri Piippo <crimsondusk64@gmail.com>
parents:
1
diff
changeset

661  for utfline in lines: 
16
6672cecf3ed1
 don't crash if unicode parsing fails, don't require nickname for admin masks
Santeri Piippo <crimsondusk64@gmail.com>
parents:
15
diff
changeset

662  try: 
17
f604687dd35b
 don't try to send stuff we cannot convert to ascii.. I don't like it but it's better than a crash
Santeri Piippo <crimsondusk64@gmail.com>
parents:
16
diff
changeset

663  line = utfline.decode("utf8","ignore").encode("ascii","ignore") 
16
6672cecf3ed1
 don't crash if unicode parsing fails, don't require nickname for admin masks
Santeri Piippo <crimsondusk64@gmail.com>
parents:
15
diff
changeset

664  except UnicodeDecodeError: 
6672cecf3ed1
 don't crash if unicode parsing fails, don't require nickname for admin masks
Santeri Piippo <crimsondusk64@gmail.com>
parents:
15
diff
changeset

665  continue 
6672cecf3ed1
 don't crash if unicode parsing fails, don't require nickname for admin masks
Santeri Piippo <crimsondusk64@gmail.com>
parents:
15
diff
changeset

666  
9
0604f6b9f781
 added verbosity setting
Santeri Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset

667  if self.verbose: 
0604f6b9f781
 added verbosity setting
Santeri Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset

668  print "[%s] > %s" % (self.name, line) 
0  669  
670  if line.startswith ("PING :"):  
671  self.write ("PONG :%s" % line[6:])  
14
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

672  else: 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

673  words = line.split(" ") 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

674  if len(words) >= 2: 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

675  if words[1] == "001": 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

676  self.flags = CLIF_CONNECTED 
0  677  
14
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

678  for channel in self.cfg['channels']: 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

679  self.write ("JOIN %s %s" % (channel['name'], channel['password'] if 'password' in channel else '')) 
0  680  
14
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

681  if 'umode' in self.cfg: 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

682  self.write ('MODE %s %s' % (self.mynick, self.cfg['umode'])) 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

683  elif words[1] == "PRIVMSG": 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

684  self.handle_privmsg (line) 
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

685  elif words[1] == 'JOIN': 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

686  rex = re.compile (r'^:([^!]+)!([^@]+)@([^ ]+) JOIN :#(.+)') 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

687  match = rex.match (line) 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

688  
27
ac59b5ae7a78
 disabled unstable/incomplete linkbot code.. I need to learn to stash changes proper
Teemu Piippo <crimsondusk64@gmail.com>
parents:
26
diff
changeset

689  #if match and match.group(1).toLower() == 'linkbot': 
ac59b5ae7a78
 disabled unstable/incomplete linkbot code.. I need to learn to stash changes proper
Teemu Piippo <crimsondusk64@gmail.com>
parents:
26
diff
changeset

690  #channel_by_name (match.group(4))['haslinkbot'] = True 
14
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

691  elif words[1] == 'QUIT': 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

692  rex = re.compile (r'^:([^!]+)!([^@]+)@([^ ]+) QUIT') 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

693  match = rex.match (line) 
0  694  
14
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

695  # Try reclaim our nickname if possible 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

696  if match and match.group(1) == self.desired_name: 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

697  self.mynick = self.desired_name 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

698  self.write ("NICK %s" % self.mynick) 
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

699  
27
ac59b5ae7a78
 disabled unstable/incomplete linkbot code.. I need to learn to stash changes proper
Teemu Piippo <crimsondusk64@gmail.com>
parents:
26
diff
changeset

700  #if match and match.group(1).toLower() == 'linkbot': 
ac59b5ae7a78
 disabled unstable/incomplete linkbot code.. I need to learn to stash changes proper
Teemu Piippo <crimsondusk64@gmail.com>
parents:
26
diff
changeset

701  #for channel in self.channels: 
ac59b5ae7a78
 disabled unstable/incomplete linkbot code.. I need to learn to stash changes proper
Teemu Piippo <crimsondusk64@gmail.com>
parents:
26
diff
changeset

702  #channels['haslinkbot'] = False 
14
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

703  elif words[1] == "433": 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

704  #:irc.localhost 433 * cobalt :Nickname is already in use. 
558379fd6d6a
 heartbeat the issue announcer even if we just get a ping
Santeri Piippo <crimsondusk64@gmail.com>
parents:
13
diff
changeset

705  self.mynick = '%s%s' % (self.mynick, self.cfg['conflictsuffix']) 
7
438dc247ceb9
 handle nickname shenanigans: handle 433 message and try reclaim nickname if someone who has taken it (possibly our own ghost) disconnected
Santeri Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset

706  self.write ("NICK %s" % self.mynick) 
0  707  
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

708  # Check for new issues on the bugtracker 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

709  bt_checklatest() 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

710  
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

711  # Check for new commits in the repositories 
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

712  for n in ['zandronumstable', 'zandronum', 'zandronumsandbox', 'zandronumsandboxstable']: 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

713  process_zan_repo_updates (n) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

714  
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

715  def channel_by_name (self, name): 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

716  for channel in self.channels: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

717  if channel['name'].upper() == args[0].upper(): 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

718  return channel 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

719  else: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

720  raise logical_exception ('unknown channel ' + args[0]) 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

721  
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

722  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

723  # 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

724  # Handle a PRIVMSG line from the IRC server 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

725  # 
0  726  def handle_privmsg (self, line): 
727  rex = re.compile (r'^:([^!]+)!([^@]+)@([^ ]+) PRIVMSG ([^ ]+) :(.+)$')  
728  match = rex.match (line)  
729  if match:  
730  sender = match.group (1)  
731  user = match.group (2)  
732  host = match.group (3)  
733  channel = match.group (4)  
734  message = match.group (5)  
735  replyto = channel if channel != g_mynick else sender  
736  
737  # Check for tracker url in the message  
738  http_regex = re.compile (r'.*http(s?)://%s/view\.php\?id=([09]+).*' % g_config['trackerurl'])  
739  http_match = http_regex.match (line)  
740  
741  # Check for command.  
10
1b726db7b0ec
 respect the commandprefix option
Santeri Piippo <crimsondusk64@gmail.com>
parents:
9
diff
changeset

742  if len(message) >= 2 and message[0] == self.commandprefix and message[1] != self.commandprefix: 
0  743  stuff = message[1:].split(' ') 
744  command = stuff[0]  
745  args = stuff[1:]  
746  try:  
62
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

747  self.handle_command (sender, user, host, replyto, command, args, message) 
21
8c389f46a056
 handle hg errors better
Santeri Piippo <crimsondusk64@gmail.com>
parents:
20
diff
changeset

748  except logical_exception as e: 
8c389f46a056
 handle hg errors better
Santeri Piippo <crimsondusk64@gmail.com>
parents:
20
diff
changeset

749  for line in e.value.split ('\n'): 
8c389f46a056
 handle hg errors better
Santeri Piippo <crimsondusk64@gmail.com>
parents:
20
diff
changeset

750  if len(line) > 0: 
8c389f46a056
 handle hg errors better
Santeri Piippo <crimsondusk64@gmail.com>
parents:
20
diff
changeset

751  self.privmsg (replyto, "error: %s" % line) 
0  752  elif http_match: 
753  self.get_ticket_data (replyto, http_match.group (2), False)  
754  else:  
19
ca618214fd07
 control connections turned into log channels
Santeri Piippo <crimsondusk64@gmail.com>
parents:
18
diff
changeset

755  chanlog ("Recieved bad PRIVMSG: %s" % line) 
0  756  
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

757  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

758  # 
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

759  # Get the URL for a specified ticket 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

760  # 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

761  def get_ticket_url (self, ticket): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

762  return 'https://%s/view.php?id=%s' % (g_config['trackerurl'], ticket) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

763  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

764  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

765  # 
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

766  # Retrieve a ticket from mantisbt 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

767  # 
0  768  def get_ticket_data (self, replyto, ticket, withlink): 
3
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

769  if suds_active == False: 
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

770  return 
53486417a8e5
 handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents:
2
diff
changeset

771  
0  772  data = {} 
773  try:  
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

774  data = bt_getissue (ticket) 
0  775  except Exception, e: 
776  self.privmsg (replyto, "Failed to get info for issue %s: %s" % (ticket, `e`))  
777  
778  if data:  
32
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

779  if data['view_state']['name'] == 'private': 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

780  allowprivate = False 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

781  
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

782  for channel in self.channels: 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

783  if channel['name'] == replyto and 'btprivate' in channel and channel['btprivate'] == True: 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

784  allowprivate = True 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

785  break 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

786  #fi 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

787  #done 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

788  
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

789  if not allowprivate: 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

790  self.privmsg (replyto, 'Error: ticket %s is private' % ticket) 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

791  return 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

792  #fi 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

793  #fi 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

794  
0  795  self.privmsg (replyto, "Issue %s: %s: Reporter: %s, assigned to: %s, status: %s (%s)" % \ 
796  (ticket, \  
797  data.summary, \  
4
bd9508f8a10f
 don't crash if ticket data doesn't have a reporter name (can happen if the reporter is banned)
Santeri Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset

798  data.reporter.name if hasattr (data.reporter, 'name') else "<unknown>", \ 
0  799  data.handler.name if hasattr (data, 'handler') else "nobody", \ 
800  data.status.name, \  
801  data.resolution.name))  
802  
803  if withlink:  
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

804  self.privmsg (replyto, "Read all about it here: " + self.get_ticket_url (ticket)) 
32
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

805  #fi 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

806  #fi 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

807  #enddef 
0  808  
62
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

809  def save_config (self): 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

810  save_config() 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

811  
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

812  def is_admin (self, ident, host): 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

813  return ("%s@%s" % (ident, host)) in g_admins 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

814  
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

815  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

816  # 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

817  # Process an IRC command 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

818  # 
62
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

819  def handle_command (self, sender, ident, host, replyto, command, args, message): 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

820  kvargs = {'sender': sender, 'ident': ident, 'host': host, 'replyto': replyto, 'cmdname': command, 'message': message} 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

821  
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

822  try: 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

823  result = CommandHandler.call_command (self, **kvargs) 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

824  
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

825  if result: 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

826  return 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

827  else: 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

828  print 'CommandHandler.call_command returned false' 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

829  except CommandHandler.CommandError as e: 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

830  lines = str (e).split ('\n') 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

831  self.privmsg (replyto, 'error: %s' % lines[0]) 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

832  
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

833  for line in lines[1:]: 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

834  self.privmsg (replyto, ' ' + line) 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

835  return 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

836  #tried 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

837  
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

838  if command == 'ticket': 
0  839  if len(args) != 1: 
1
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

840  raise logical_exception ("usage: .%s <ticket>" % command) 
0  841  self.get_ticket_data (replyto, args[0], True) 
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

842  elif command == 'testannounce': 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

843  check_admin (sender, ident, host, command) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

844  if len(args) != 1: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

845  raise logical_exception ("usage: .%s <ticket>" % command) 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

846  self.announce_ticket (bt_getissue (args[0])) 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

847  elif command == 'checkhg': 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

848  check_admin (sender, ident, host, command) 
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

849  global repocheck_timeout 
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

850  repocheck_timeout = {'zandronum':0, 'zandronumstable':0, 'zandronumsandbox':0, 'zandronumsandboxstable':0} 
34
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

851  
51
b0209b707fa2
 now also tracks sandboxstable
Teemu Piippo <crimsondusk64@gmail.com>
parents:
50
diff
changeset

852  for n in ['zandronumstable', 'zandronum', 'zandronumsandbox', 'zandronumsandboxstable']: 
34
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

853  numcommits = process_zan_repo_updates (n) 
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

854  
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

855  if numcommits == 0: 
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

856  self.privmsg (replyto, 'No new commits in ' + n) 
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

857  #fi 
1a1ee9e8bda6
 be more verbose when .checkhg is used
Teemu Piippo <crimsondusk64@gmail.com>
parents:
33
diff
changeset

858  #done 
6  859  elif command == 'die': 
860  check_admin (sender, ident, host, command)  
861  quit()  
23
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

862  elif command == 'convert': 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

863  if len(args) != 3 or args[1] != 'as': 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

864  raise logical_exception ("usage: .%s <value> as <valuetype>" % command) 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

865  
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

866  value = float (args[0]) 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

867  valuetype = args[2] 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

868  
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

869  if valuetype in ['radians', 'degrees']: 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

870  if valuetype == 'radians': 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

871  radvalue = value 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

872  degvalue = (value * 180.) / math.pi 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

873  else: 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

874  radvalue = (value * math.pi) / 180. 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

875  degvalue = value 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

876  
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

877  self.privmsg (replyto, '%s radians, %s degrees (%s)' %(radvalue, degvalue, degvalue % 360.)) 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

878  elif valuetype in ['celsius', 'fahrenheit']: 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

879  if valuetype == 'celsius': 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

880  celvalue = value 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

881  fahrvalue = value * 1.8 + 32 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

882  else: 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

883  celvalue = (value  32) / 1.8 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

884  fahrvalue = value 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

885  
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

886  self.privmsg (replyto, '%s degrees celsius, %s degrees fahrenheit' %(celvalue, fahrvalue)) 
c25944cac3e6
 added .convert with angle and temperature conversions
Santeri Piippo <crimsondusk64@gmail.com>
parents:
21
diff
changeset

887  else: 
24  888  raise logical_exception ('unknown valuetype, expected one of: degrees, radians (angle conversion), ' + 
889  'celsius, fahrenheit (temperature conversion)')  
28
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

890  elif command == 'urban' or command == 'ud': 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

891  try: 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

892  if len(args) < 1: 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

893  raise logical_exception ('usage: %s <word>' % command) 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

894  
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

895  url = 'http://api.urbandictionary.com/v0/define?term=%s' % ('%20'.join (args)) 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

896  response = urllib2.urlopen (url).read() 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

897  data = json.loads (response) 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

898  
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

899  if 'list' in data and len(data['list']) > 0 and 'word' in data['list'][0] and 'definition' in data['list'][0]: 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

900  word = data['list'][0]['word'] 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

901  definition = data['list'][0]['definition'].replace ('\r', ' ').replace ('\n', ' ').replace (' ', ' ') 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

902  up = data['list'][0]['thumbs_up'] 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

903  down = data['list'][0]['thumbs_down'] 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

904  self.privmsg (replyto, "\002%s\002: %s\0033 %d\003 up,\0035 %d\003 down" % (word, definition, up, down)) 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

905  else: 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

906  self.privmsg (replyto, "couldn't find a definition of \002%s\002" % args[0]) 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

907  except logical_exception as e: 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

908  raise e 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

909  except Exception as e: 
30257c78904f
 added urban dictionary lookup
Teemu Piippo <crimsondusk64@gmail.com>
parents:
27
diff
changeset

910  raise logical_exception ('Urban dictionary lookup failed: %s' % `e`) 
40
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

911  elif command == 'hg': 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

912  check_admin (sender, ident, host, command) 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

913  
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

914  if len(args) < 2: 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

915  raise logical_exception ('usage: %s <repo> <command...>' % command) 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

916  
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

917  try: 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

918  repo = hgapi.Repo (args[0]) 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

919  result = repo.hg_command (*args[1:]) 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

920  self.privmsg (replyto, result) 
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

921  except hgapi.hgapi.HgException as e: 
41  922  result = decipher_hgapi_error (e) 
923  
924  if result[0]:  
925  self.privmsg (replyto, 'error: %s' % result[1])  
926  else:  
44
616743868d4a
 post the rawform error if unable to decipher
Teemu Piippo <crimsondusk64@gmail.com>
parents:
43
diff
changeset

927  self.privmsg (replyto, 'error: %s' % `e`) 
41  928  #fi 
40
f6512aacb114
 fine tuning, added .hg command
Teemu Piippo <crimsondusk64@gmail.com>
parents:
39
diff
changeset

929  #tried 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

930  elif command == 'changeset' or command == 'cset' or command == 'rev': 
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

931  if len(args) != 1: 
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

932  raise logical_exception ('usage: %s <changeset>' % command) 
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

933  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

934  repo = hgapi.Repo ('zandronumeverything') 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

935  data = "" 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

936  node = args[0] 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

937  
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

938  # Possibly we're passed a date version instead. Try find the node for this. 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

939  try: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

940  datetime.strptime (args[0], '%y%m%d%H%M') 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

941  make_commits_txt() 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

942  commits_txt = open ('commits.txt', 'r') 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

943  
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

944  for line in commits_txt: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

945  data = line.replace ('\n', '').split (' ') 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

946  if data[1] == args[0]: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

947  node = data[0] 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

948  break 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

949  else: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

950  self.privmsg (replyto, 'couldn\'t find changset for date %s' % args[0]) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

951  return 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

952  #done 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

953  except ValueError: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

954  pass 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

955  #tried 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

956  
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

957  # The sandboxes contain all revisions in zandronum and zandronumstable. 
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

958  # Thus we only need to try find the revision in the sandbox repos. 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

959  try: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

960  repo.hg_command ("log", "r", node, "template", " ") 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

961  except hgapi.hgapi.HgException: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

962  self.privmsg (replyto, 'couldn\'t find changeset %s' % (node)) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

963  return 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

964  #tried 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

965  
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

966  try: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

967  data = repo.hg_command ("log", "r", node, "template", 
63
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

968  "{nodeshort}@@@@@@@{desc}@@@@@@@{author}@@@@@@@{diffstat}@@@@@@@{datehgdate}") 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

969  data = data.split ('@@@@@@@') 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

970  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

971  node = data[0] 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

972  message = data[1] 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

973  author = data[2] 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

974  diffstat = data[3] 
63
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

975  date = datetime.utcfromtimestamp (int (data[4].split (' ')[0])) 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

976  delta = datetime.now()  date 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

977  datestring = '' 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

978  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

979  # Remove the email address from the author if possible 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

980  match = re.compile (r'^(.+) <([^>]+)>$.*').match (author) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

981  if match: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

982  author = match.group (1) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

983  email = match.group (2) 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

984  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

985  username = find_developer_by_email (email) 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

986  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

987  if username != '': 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

988  author = username 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

989  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

990  if delta.days < 4: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

991  if delta.days == 0: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

992  if delta.seconds < 60: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

993  datestring = 'just now' 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

994  elif delta.seconds < 3600: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

995  minutes = delta.seconds / 60 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

996  datestring = '%d minute%s ago' % (minutes, plural (minutes)) 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

997  else: 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

998  hours = delta.seconds / 3600 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

999  datestring = '%d hour%s ago' % (hours, plural (hours)) 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

1000  else: 
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1001  datestring = '%d day%s ago' % (delta.days, plural (delta.days)) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1002  else: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1003  datestring = 'on %s' % (str (date)) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1004  #fi 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

1005  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1006  self.privmsg (replyto, 'changeset %s (%s): committed by %s %s (%s)' % \ 
63
a1a864c25e42
 fixed: .cset didn't operate properly with dates
Teemu Piippo <crimsondusk64@gmail.com>
parents:
62
diff
changeset

1007  (node, date.strftime ('%y%m%d%H%M'), author, datestring, diffstat)) 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

1008  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1009  for line in message.split ('\n'): 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1010  self.privmsg (replyto, ' ' + line) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1011  except hgapi.hgapi.HgException as e: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1012  result = decipher_hgapi_error (e) 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

1013  
58
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1014  if result[0]: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1015  self.privmsg (replyto, 'error: %s' % result[1]) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1016  else: 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1017  self.privmsg (replyto, 'error: %s' % `e`) 
577cecfea94e
 now able to get changeset by date
Teemu Piippo <crimsondusk64@gmail.com>
parents:
57
diff
changeset

1018  #tried 
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

1019  # else: 
55
441a04262cb4
 added the .changeset (aka .cset or .rev) command to get revision info
Teemu Piippo <crimsondusk64@gmail.com>
parents:
54
diff
changeset

1020  # raise logical_exception ("unknown command `.%s`" % command) 
0  1021  
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1022  # 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1023  # Print a ticket announce to appropriate channels 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1024  # 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1025  def announce_ticket (self, data): 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1026  idstring = "%d" % data.id 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1027  while len(idstring) < 7: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1028  idstring = "0" + idstring 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1029  
32
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1030  isprivate = data['view_state']['name'] == 'private' 
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1031  reporter = data['reporter']['name'] if hasattr (data['reporter'], 'name') else '<nobody>' 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1032  
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1033  for channel in self.cfg['channels']: 
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1034  if 'btannounce' in channel and channel['btannounce'] == True: 
32
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1035  if not isprivate or ('btprivate' in channel and channel['btprivate'] == True): 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1036  self.write ("PRIVMSG %s :[%s] New issue %s, reported by %s: %s: %s" % \ 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1037  (channel['name'], data['project']['name'], idstring, reporter, 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1038  data['summary'], self.get_ticket_url (idstring))) 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1039  #fi 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1040  #fi 
88899b43810b
 corrected repository handling on error: print errors with commit node and pull even when processing fails
Teemu Piippo <crimsondusk64@gmail.com>
parents:
31
diff
changeset

1041  #done 
12
e843c08ee51e
 added mantisbt new ticket announcing
Santeri Piippo <crimsondusk64@gmail.com>
parents:
11
diff
changeset

1042  
0  1043  def handle_error(self): 
1044  excepterm (traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))  
1045  
62
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

1046  def restart(self): 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

1047  excepterm('') 
052a8a1e3d7d
 revamped commands, added a much more modular system. not everything migrated yet
Teemu Piippo <crimsondusk64@gmail.com>
parents:
60
diff
changeset

1048  
0  1049  def privmsg (self, channel, msg): 
1050  self.write ("PRIVMSG %s :%s" % (channel, msg))  
1051  
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1052  def close_connection (self, message): 
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

1053  if self.flags & CLIF_CONNECTED: 
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1054  self.write ("QUIT :" + message) 
5
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

1055  self.send_all_now() 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

1056  self.close() 
b6d2b7de0a6d
 added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents:
4
diff
changeset

1057  
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1058  def quit_irc (self): 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1059  self.close_connection ('Leaving') 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1060  
0  1061  def exceptdie (self): 
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1062  self.close_connection ('Caught exception') 
0  1063  
1064  def keyboardinterrupt (self):  
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1065  self.close_connection ('KeyboardInterrupt') 
0  1066  
1
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

1067  # 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

1068  # Main procedure: 
29c7e9d13a30
 fixed up exception handling, no longer connects to every possible connection, rather uses the autoconnect config entry
Santeri Piippo <crimsondusk64@gmail.com>
parents:
0
diff
changeset

1069  # 
0  1070  try: 
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1071  for aconn in g_config['autoconnect']: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1072  for conndata in g_config['connections']: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1073  if conndata['name'] == aconn: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1074  irc_client (conndata, 0) 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1075  break 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1076  else: 
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1077  raise logical_exception ("unknown autoconnect entry %s" % (aconn)) 
29
5767ee263b12
 now is able to track zandronum mercurial repositories and react to 'fixes 0001234' trigger messages in them
Teemu Piippo <crimsondusk64@gmail.com>
parents:
28
diff
changeset

1078  
26
580a2a9fd2e5
 made cobalt die if autoconnect entries cannot be found plus other stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
25
diff
changeset

1079  g_BotActive = True 
0  1080  asyncore.loop() 
1081  except KeyboardInterrupt:  
1082  for client in g_clients:  
1083  client.keyboardinterrupt()  
1084  quit() 