gitlab-fogbugz 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,105 @@
1
+ require "uri"
2
+ require "rexml/document"
3
+ require "rexml/xpath"
4
+ require "cgi"
5
+
6
+ class FogbugzService
7
+ class FogbugzError < RuntimeError; end
8
+ class ClientOutOfDate < FogbugzError; end
9
+ class BadXml < FogbugzError; end
10
+ class BadCredentials < FogbugzError; end
11
+
12
+ attr_reader :root_uri, :api_uri
13
+
14
+ def initialize(root, curl, token=nil)
15
+ @root_uri = root.respond_to?(:scheme) ? root : URI.parse(root)
16
+ @curl = curl
17
+ @token = token
18
+ end
19
+
20
+ def validate!
21
+ document = get(@root_uri.merge("api.xml"))
22
+ raise BadXml, "Did not find the expected root response element. Instead, I found:\n#{document.root}" unless document.root.name == "response"
23
+
24
+ minversion = REXML::XPath.first(document.root, "//minversion/text()").to_s
25
+ raise ClientOutOfDate, "This client expected to find a minversion <= 3 in the api.xml file. Instead it found #{minversion.inspect}" unless minversion.to_i <= 3
26
+
27
+ relative_path = REXML::XPath.first(document.root, "//url/text()")
28
+ @api_uri = @root_uri.merge(relative_path.to_s)
29
+ end
30
+
31
+ def connect
32
+ validate!
33
+ yield self
34
+ end
35
+
36
+ def logon(email, password)
37
+ params = {"cmd" => "logon", "email" => email, "password" => password}
38
+ document = get(@api_uri, params)
39
+ bad_logon = REXML::XPath.first(document.root, "//error")
40
+ raise BadCredentials, "Bad credentials supplied to Fogbugz: #{bad_logon}" if bad_logon
41
+ REXML::XPath.first(document.root, "//token/text()").to_s
42
+ end
43
+
44
+ def implement(data)
45
+ tell_fogbugz(:resolve, data, STATES[:implemented])
46
+ end
47
+
48
+ def fix(data)
49
+ tell_fogbugz(:resolve, data, STATES[:fixed])
50
+ end
51
+
52
+ def complete(data)
53
+ tell_fogbugz(:resolve, data, STATES[:completed])
54
+ end
55
+
56
+ def close(data)
57
+ tell_fogbugz(:close, data)
58
+ end
59
+
60
+ def append_message(data)
61
+ tell_fogbugz(:edit, data)
62
+ end
63
+
64
+ def invalid(data)
65
+ # TODO: This silently ignores any bug id reference (#1234) without a
66
+ # predicate; however I currently don't consider it a good idea to treat this
67
+ # transparently as :reference
68
+ end
69
+
70
+ def reopen(data)
71
+ tell_fogbugz(:reopen, data)
72
+ end
73
+
74
+ def resolve(data)
75
+ tell_fogbugz(:resolve, data)
76
+ end
77
+
78
+ protected
79
+ # Returns an REXML::Document to the specified URI
80
+ def get(uri, params=nil)
81
+ cmd = if params then
82
+ query = params.map {|k, v| "#{CGI::escape(k.to_s)}=#{CGI::escape(v.to_s)}"}.join("&")
83
+ "#{@curl} --data '#{query}' --silent '#{uri.to_s}'"
84
+ else
85
+ "#{@curl} --silent '#{uri.to_s}'"
86
+ end
87
+
88
+ puts cmd
89
+ data = `#{cmd}`
90
+ begin
91
+ REXML::Document.new(data)
92
+ rescue REXML::ParseException
93
+ raise BadXml, "Could not parse response data:\n#{data}"
94
+ end
95
+ end
96
+
97
+ def tell_fogbugz(operation, data, status=nil)
98
+ params = {"cmd" => operation.to_s, "ixBug" => data[:case], "sEvent" => data[:message],
99
+ "token" => @token}
100
+ params["ixStatus"] = status if status
101
+ get(@api_uri, params)
102
+ end
103
+
104
+ STATES = {:fixed => 2, :completed => 15, :implemented => 8}
105
+ end
@@ -0,0 +1,513 @@
1
+
2
+ # line 1 "lib/message_parser_machine.rb"
3
+ class MessageParser
4
+
5
+ # line 28 "lib/message_parser_machine.rb"
6
+
7
+
8
+
9
+ # line 10 "lib/message_parser.rb"
10
+ class << self
11
+ attr_accessor :_message_parser_machine_actions
12
+ private :_message_parser_machine_actions, :_message_parser_machine_actions=
13
+ end
14
+ self._message_parser_machine_actions = [
15
+ 0, 1, 0, 1, 1, 1, 2, 1,
16
+ 3, 1, 4, 1, 5, 1, 6, 1,
17
+ 7, 1, 8, 1, 9, 1, 10, 1,
18
+ 11, 1, 12, 1, 13, 1, 14, 1,
19
+ 15, 1, 16, 1, 17, 1, 18, 1,
20
+ 19, 1, 20, 1, 21
21
+ ]
22
+
23
+ class << self
24
+ attr_accessor :_message_parser_machine_key_offsets
25
+ private :_message_parser_machine_key_offsets, :_message_parser_machine_key_offsets=
26
+ end
27
+ self._message_parser_machine_key_offsets = [
28
+ 0, 2, 8, 10, 12, 14, 16, 18,
29
+ 20, 22, 24, 26, 28, 30, 32, 36,
30
+ 38, 40, 42, 44, 46, 48, 50, 58,
31
+ 64, 66, 68, 70, 72, 74, 76, 78,
32
+ 80, 82, 84, 86, 88, 90, 103, 105,
33
+ 107, 109, 110, 114, 116, 118, 120, 122,
34
+ 124, 126, 128, 130, 132, 134
35
+ ]
36
+
37
+ class << self
38
+ attr_accessor :_message_parser_machine_trans_keys
39
+ private :_message_parser_machine_trans_keys, :_message_parser_machine_trans_keys=
40
+ end
41
+ self._message_parser_machine_trans_keys = [
42
+ 71, 103, 73, 83, 90, 105, 115, 122,
43
+ 68, 100, 73, 105, 79, 111, 83, 115,
44
+ 69, 101, 77, 109, 80, 112, 76, 108,
45
+ 69, 101, 84, 116, 69, 101, 88, 120,
46
+ 68, 83, 100, 115, 80, 112, 76, 108,
47
+ 69, 101, 77, 109, 69, 101, 78, 110,
48
+ 84, 116, 70, 73, 79, 83, 102, 105,
49
+ 111, 115, 69, 73, 83, 101, 105, 115,
50
+ 82, 114, 69, 101, 78, 110, 67, 99,
51
+ 69, 101, 77, 109, 80, 112, 69, 101,
52
+ 78, 110, 79, 111, 76, 108, 86, 118,
53
+ 69, 101, 35, 66, 67, 70, 73, 82,
54
+ 83, 98, 99, 102, 105, 114, 115, 49,
55
+ 57, 48, 57, 85, 117, 58, 76, 79,
56
+ 108, 111, 83, 115, 83, 115, 73, 105,
57
+ 69, 101, 77, 109, 83, 115, 69, 101,
58
+ 83, 115, 83, 115, 83, 115, 79, 111,
59
+ 0
60
+ ]
61
+
62
+ class << self
63
+ attr_accessor :_message_parser_machine_single_lengths
64
+ private :_message_parser_machine_single_lengths, :_message_parser_machine_single_lengths=
65
+ end
66
+ self._message_parser_machine_single_lengths = [
67
+ 2, 6, 2, 2, 2, 2, 2, 2,
68
+ 2, 2, 2, 2, 2, 2, 4, 2,
69
+ 2, 2, 2, 2, 2, 2, 8, 6,
70
+ 2, 2, 2, 2, 2, 2, 2, 2,
71
+ 2, 2, 2, 2, 2, 13, 0, 0,
72
+ 2, 1, 4, 2, 2, 2, 2, 2,
73
+ 2, 2, 2, 2, 2, 2
74
+ ]
75
+
76
+ class << self
77
+ attr_accessor :_message_parser_machine_range_lengths
78
+ private :_message_parser_machine_range_lengths, :_message_parser_machine_range_lengths=
79
+ end
80
+ self._message_parser_machine_range_lengths = [
81
+ 0, 0, 0, 0, 0, 0, 0, 0,
82
+ 0, 0, 0, 0, 0, 0, 0, 0,
83
+ 0, 0, 0, 0, 0, 0, 0, 0,
84
+ 0, 0, 0, 0, 0, 0, 0, 0,
85
+ 0, 0, 0, 0, 0, 0, 1, 1,
86
+ 0, 0, 0, 0, 0, 0, 0, 0,
87
+ 0, 0, 0, 0, 0, 0
88
+ ]
89
+
90
+ class << self
91
+ attr_accessor :_message_parser_machine_index_offsets
92
+ private :_message_parser_machine_index_offsets, :_message_parser_machine_index_offsets=
93
+ end
94
+ self._message_parser_machine_index_offsets = [
95
+ 0, 3, 10, 13, 16, 19, 22, 25,
96
+ 28, 31, 34, 37, 40, 43, 46, 51,
97
+ 54, 57, 60, 63, 66, 69, 72, 81,
98
+ 88, 91, 94, 97, 100, 103, 106, 109,
99
+ 112, 115, 118, 121, 124, 127, 141, 143,
100
+ 145, 148, 150, 155, 158, 161, 164, 167,
101
+ 170, 173, 176, 179, 182, 185
102
+ ]
103
+
104
+ class << self
105
+ attr_accessor :_message_parser_machine_indicies
106
+ private :_message_parser_machine_indicies, :_message_parser_machine_indicies=
107
+ end
108
+ self._message_parser_machine_indicies = [
109
+ 1, 1, 0, 2, 3, 3, 2, 3,
110
+ 3, 0, 4, 4, 0, 2, 2, 0,
111
+ 5, 5, 0, 6, 6, 0, 7, 7,
112
+ 0, 8, 8, 0, 9, 9, 0, 10,
113
+ 10, 0, 11, 11, 0, 12, 12, 0,
114
+ 13, 13, 0, 14, 14, 0, 16, 16,
115
+ 16, 16, 15, 17, 17, 0, 18, 18,
116
+ 0, 19, 19, 0, 20, 20, 0, 21,
117
+ 21, 0, 22, 22, 0, 23, 23, 0,
118
+ 24, 25, 26, 27, 24, 25, 26, 27,
119
+ 0, 28, 29, 30, 28, 29, 30, 0,
120
+ 31, 31, 0, 32, 32, 0, 33, 33,
121
+ 0, 34, 34, 0, 35, 35, 0, 36,
122
+ 36, 0, 37, 37, 0, 38, 38, 0,
123
+ 39, 39, 0, 40, 40, 0, 41, 41,
124
+ 0, 42, 42, 0, 43, 43, 0, 45,
125
+ 46, 47, 48, 49, 50, 51, 46, 47,
126
+ 48, 49, 50, 51, 44, 53, 52, 53,
127
+ 54, 55, 55, 52, 30, 56, 57, 58,
128
+ 57, 58, 52, 60, 60, 59, 62, 62,
129
+ 61, 29, 29, 52, 64, 64, 63, 36,
130
+ 36, 52, 66, 66, 65, 67, 67, 52,
131
+ 30, 30, 56, 69, 69, 68, 71, 71,
132
+ 70, 40, 40, 52, 0
133
+ ]
134
+
135
+ class << self
136
+ attr_accessor :_message_parser_machine_trans_targs
137
+ private :_message_parser_machine_trans_targs, :_message_parser_machine_trans_targs=
138
+ end
139
+ self._message_parser_machine_trans_targs = [
140
+ 37, 1, 2, 3, 41, 5, 6, 43,
141
+ 8, 9, 10, 11, 12, 44, 46, 37,
142
+ 37, 16, 17, 18, 19, 20, 21, 48,
143
+ 23, 29, 30, 33, 24, 13, 37, 25,
144
+ 26, 27, 28, 50, 15, 31, 32, 51,
145
+ 34, 35, 36, 52, 37, 38, 40, 42,
146
+ 45, 47, 49, 53, 37, 39, 37, 0,
147
+ 37, 4, 7, 37, 37, 37, 37, 37,
148
+ 14, 37, 37, 22, 37, 37, 37, 37
149
+ ]
150
+
151
+ class << self
152
+ attr_accessor :_message_parser_machine_trans_actions
153
+ private :_message_parser_machine_trans_actions, :_message_parser_machine_trans_actions=
154
+ end
155
+ self._message_parser_machine_trans_actions = [
156
+ 43, 0, 0, 0, 0, 0, 0, 0,
157
+ 0, 0, 0, 0, 0, 0, 5, 41,
158
+ 13, 0, 0, 0, 0, 0, 0, 0,
159
+ 0, 0, 0, 0, 0, 0, 11, 0,
160
+ 0, 0, 0, 0, 0, 0, 0, 0,
161
+ 0, 0, 0, 0, 21, 0, 5, 5,
162
+ 5, 5, 5, 5, 39, 0, 37, 0,
163
+ 27, 0, 0, 23, 7, 25, 9, 29,
164
+ 0, 33, 17, 0, 31, 15, 35, 19
165
+ ]
166
+
167
+ class << self
168
+ attr_accessor :_message_parser_machine_to_state_actions
169
+ private :_message_parser_machine_to_state_actions, :_message_parser_machine_to_state_actions=
170
+ end
171
+ self._message_parser_machine_to_state_actions = [
172
+ 0, 0, 0, 0, 0, 0, 0, 0,
173
+ 0, 0, 0, 0, 0, 0, 0, 0,
174
+ 0, 0, 0, 0, 0, 0, 0, 0,
175
+ 0, 0, 0, 0, 0, 0, 0, 0,
176
+ 0, 0, 0, 0, 0, 1, 0, 0,
177
+ 0, 0, 0, 0, 0, 0, 0, 0,
178
+ 0, 0, 0, 0, 0, 0
179
+ ]
180
+
181
+ class << self
182
+ attr_accessor :_message_parser_machine_from_state_actions
183
+ private :_message_parser_machine_from_state_actions, :_message_parser_machine_from_state_actions=
184
+ end
185
+ self._message_parser_machine_from_state_actions = [
186
+ 0, 0, 0, 0, 0, 0, 0, 0,
187
+ 0, 0, 0, 0, 0, 0, 0, 0,
188
+ 0, 0, 0, 0, 0, 0, 0, 0,
189
+ 0, 0, 0, 0, 0, 0, 0, 0,
190
+ 0, 0, 0, 0, 0, 3, 0, 0,
191
+ 0, 0, 0, 0, 0, 0, 0, 0,
192
+ 0, 0, 0, 0, 0, 0
193
+ ]
194
+
195
+ class << self
196
+ attr_accessor :_message_parser_machine_eof_trans
197
+ private :_message_parser_machine_eof_trans, :_message_parser_machine_eof_trans=
198
+ end
199
+ self._message_parser_machine_eof_trans = [
200
+ 1, 1, 1, 1, 1, 1, 1, 1,
201
+ 1, 1, 1, 1, 1, 1, 16, 1,
202
+ 1, 1, 1, 1, 1, 1, 1, 1,
203
+ 1, 1, 1, 1, 1, 1, 1, 1,
204
+ 1, 1, 1, 1, 1, 0, 53, 55,
205
+ 53, 57, 53, 60, 62, 53, 64, 53,
206
+ 66, 53, 57, 69, 71, 53
207
+ ]
208
+
209
+ class << self
210
+ attr_accessor :message_parser_machine_start
211
+ end
212
+ self.message_parser_machine_start = 37;
213
+ class << self
214
+ attr_accessor :message_parser_machine_first_final
215
+ end
216
+ self.message_parser_machine_first_final = 37;
217
+ class << self
218
+ attr_accessor :message_parser_machine_error
219
+ end
220
+ self.message_parser_machine_error = -1;
221
+
222
+ class << self
223
+ attr_accessor :message_parser_machine_en_main
224
+ end
225
+ self.message_parser_machine_en_main = 37;
226
+
227
+
228
+ # line 31 "lib/message_parser_machine.rb"
229
+
230
+ class << self
231
+ def parse(msg, listener)
232
+ data = msg.unpack("C*")
233
+ eof = data.length
234
+
235
+ bugid, action, name = nil
236
+
237
+
238
+ # line 239 "lib/message_parser.rb"
239
+ begin
240
+ p ||= 0
241
+ pe ||= data.length
242
+ cs = message_parser_machine_start
243
+ ts = nil
244
+ te = nil
245
+ act = 0
246
+ end
247
+
248
+ # line 40 "lib/message_parser_machine.rb"
249
+
250
+ # line 251 "lib/message_parser.rb"
251
+ begin
252
+ _klen, _trans, _keys, _acts, _nacts = nil
253
+ _goto_level = 0
254
+ _resume = 10
255
+ _eof_trans = 15
256
+ _again = 20
257
+ _test_eof = 30
258
+ _out = 40
259
+ while true
260
+ _trigger_goto = false
261
+ if _goto_level <= 0
262
+ if p == pe
263
+ _goto_level = _test_eof
264
+ next
265
+ end
266
+ end
267
+ if _goto_level <= _resume
268
+ _acts = _message_parser_machine_from_state_actions[cs]
269
+ _nacts = _message_parser_machine_actions[_acts]
270
+ _acts += 1
271
+ while _nacts > 0
272
+ _nacts -= 1
273
+ _acts += 1
274
+ case _message_parser_machine_actions[_acts - 1]
275
+ when 1 then
276
+ # line 1 "NONE"
277
+ begin
278
+ ts = p
279
+ end
280
+ # line 281 "lib/message_parser.rb"
281
+ end # from state action switch
282
+ end
283
+ if _trigger_goto
284
+ next
285
+ end
286
+ _keys = _message_parser_machine_key_offsets[cs]
287
+ _trans = _message_parser_machine_index_offsets[cs]
288
+ _klen = _message_parser_machine_single_lengths[cs]
289
+ _break_match = false
290
+
291
+ begin
292
+ if _klen > 0
293
+ _lower = _keys
294
+ _upper = _keys + _klen - 1
295
+
296
+ loop do
297
+ break if _upper < _lower
298
+ _mid = _lower + ( (_upper - _lower) >> 1 )
299
+
300
+ if data[p] < _message_parser_machine_trans_keys[_mid]
301
+ _upper = _mid - 1
302
+ elsif data[p] > _message_parser_machine_trans_keys[_mid]
303
+ _lower = _mid + 1
304
+ else
305
+ _trans += (_mid - _keys)
306
+ _break_match = true
307
+ break
308
+ end
309
+ end # loop
310
+ break if _break_match
311
+ _keys += _klen
312
+ _trans += _klen
313
+ end
314
+ _klen = _message_parser_machine_range_lengths[cs]
315
+ if _klen > 0
316
+ _lower = _keys
317
+ _upper = _keys + (_klen << 1) - 2
318
+ loop do
319
+ break if _upper < _lower
320
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
321
+ if data[p] < _message_parser_machine_trans_keys[_mid]
322
+ _upper = _mid - 2
323
+ elsif data[p] > _message_parser_machine_trans_keys[_mid+1]
324
+ _lower = _mid + 2
325
+ else
326
+ _trans += ((_mid - _keys) >> 1)
327
+ _break_match = true
328
+ break
329
+ end
330
+ end # loop
331
+ break if _break_match
332
+ _trans += _klen
333
+ end
334
+ end while false
335
+ _trans = _message_parser_machine_indicies[_trans]
336
+ end
337
+ if _goto_level <= _eof_trans
338
+ cs = _message_parser_machine_trans_targs[_trans]
339
+ if _message_parser_machine_trans_actions[_trans] != 0
340
+ _acts = _message_parser_machine_trans_actions[_trans]
341
+ _nacts = _message_parser_machine_actions[_acts]
342
+ _acts += 1
343
+ while _nacts > 0
344
+ _nacts -= 1
345
+ _acts += 1
346
+ case _message_parser_machine_actions[_acts - 1]
347
+ when 2 then
348
+ # line 1 "NONE"
349
+ begin
350
+ te = p+1
351
+ end
352
+ when 3 then
353
+ # line 18 "lib/message_parser_machine.rb"
354
+ begin
355
+ te = p+1
356
+ begin listener.close end
357
+ end
358
+ when 4 then
359
+ # line 19 "lib/message_parser_machine.rb"
360
+ begin
361
+ te = p+1
362
+ begin listener.complete end
363
+ end
364
+ when 5 then
365
+ # line 20 "lib/message_parser_machine.rb"
366
+ begin
367
+ te = p+1
368
+ begin listener.reference end
369
+ end
370
+ when 6 then
371
+ # line 21 "lib/message_parser_machine.rb"
372
+ begin
373
+ te = p+1
374
+ begin listener.fix end
375
+ end
376
+ when 7 then
377
+ # line 22 "lib/message_parser_machine.rb"
378
+ begin
379
+ te = p+1
380
+ begin listener.reopen end
381
+ end
382
+ when 8 then
383
+ # line 23 "lib/message_parser_machine.rb"
384
+ begin
385
+ te = p+1
386
+ begin listener.implement end
387
+ end
388
+ when 9 then
389
+ # line 24 "lib/message_parser_machine.rb"
390
+ begin
391
+ te = p+1
392
+ begin listener.resolve end
393
+ end
394
+ when 10 then
395
+ # line 26 "lib/message_parser_machine.rb"
396
+ begin
397
+ te = p+1
398
+ end
399
+ when 11 then
400
+ # line 18 "lib/message_parser_machine.rb"
401
+ begin
402
+ te = p
403
+ p = p - 1; begin listener.close end
404
+ end
405
+ when 12 then
406
+ # line 19 "lib/message_parser_machine.rb"
407
+ begin
408
+ te = p
409
+ p = p - 1; begin listener.complete end
410
+ end
411
+ when 13 then
412
+ # line 20 "lib/message_parser_machine.rb"
413
+ begin
414
+ te = p
415
+ p = p - 1; begin listener.reference end
416
+ end
417
+ when 14 then
418
+ # line 21 "lib/message_parser_machine.rb"
419
+ begin
420
+ te = p
421
+ p = p - 1; begin listener.fix end
422
+ end
423
+ when 15 then
424
+ # line 22 "lib/message_parser_machine.rb"
425
+ begin
426
+ te = p
427
+ p = p - 1; begin listener.reopen end
428
+ end
429
+ when 16 then
430
+ # line 23 "lib/message_parser_machine.rb"
431
+ begin
432
+ te = p
433
+ p = p - 1; begin listener.implement end
434
+ end
435
+ when 17 then
436
+ # line 24 "lib/message_parser_machine.rb"
437
+ begin
438
+ te = p
439
+ p = p - 1; begin listener.resolve end
440
+ end
441
+ when 18 then
442
+ # line 25 "lib/message_parser_machine.rb"
443
+ begin
444
+ te = p
445
+ p = p - 1; begin listener.case(data[ts+1...te].pack("C*")) end
446
+ end
447
+ when 19 then
448
+ # line 26 "lib/message_parser_machine.rb"
449
+ begin
450
+ te = p
451
+ p = p - 1; end
452
+ when 20 then
453
+ # line 21 "lib/message_parser_machine.rb"
454
+ begin
455
+ begin p = ((te))-1; end
456
+ begin listener.fix end
457
+ end
458
+ when 21 then
459
+ # line 26 "lib/message_parser_machine.rb"
460
+ begin
461
+ begin p = ((te))-1; end
462
+ end
463
+ # line 464 "lib/message_parser.rb"
464
+ end # action switch
465
+ end
466
+ end
467
+ if _trigger_goto
468
+ next
469
+ end
470
+ end
471
+ if _goto_level <= _again
472
+ _acts = _message_parser_machine_to_state_actions[cs]
473
+ _nacts = _message_parser_machine_actions[_acts]
474
+ _acts += 1
475
+ while _nacts > 0
476
+ _nacts -= 1
477
+ _acts += 1
478
+ case _message_parser_machine_actions[_acts - 1]
479
+ when 0 then
480
+ # line 1 "NONE"
481
+ begin
482
+ ts = nil; end
483
+ # line 484 "lib/message_parser.rb"
484
+ end # to state action switch
485
+ end
486
+ if _trigger_goto
487
+ next
488
+ end
489
+ p += 1
490
+ if p != pe
491
+ _goto_level = _resume
492
+ next
493
+ end
494
+ end
495
+ if _goto_level <= _test_eof
496
+ if p == eof
497
+ if _message_parser_machine_eof_trans[cs] > 0
498
+ _trans = _message_parser_machine_eof_trans[cs] - 1;
499
+ _goto_level = _eof_trans
500
+ next;
501
+ end
502
+ end
503
+ end
504
+ if _goto_level <= _out
505
+ break
506
+ end
507
+ end
508
+ end
509
+
510
+ # line 41 "lib/message_parser_machine.rb"
511
+ end
512
+ end
513
+ end
@@ -0,0 +1,43 @@
1
+ class MessageParser
2
+ %%{
3
+ machine message_parser_machine;
4
+
5
+ bugid = ('#' [1-9] [0-9]*);
6
+
7
+ closes = (/close/i ([sS])?);
8
+ completes = (/complete/i ([sS])?);
9
+ references = (/reference/i ([sS])?);
10
+ refs = (/refs/i);
11
+ bugzid = (/bug/i ([zZsS])? /id/i ([:])?);
12
+ fixes = ((/re/i)? /fix/i (/ed/i | (/es/i))?);
13
+ reopens = (/reopen/i ([sS])?);
14
+ implements = ((/re/i)? /implement/i ([sS])?);
15
+ resolves = ((/re/i)? /solve/i ([sS])?);
16
+ keywords = (closes | completes | references | refs | fixes | reopens | implements | bugzid | resolves);
17
+ main := |*
18
+ (closes) => { listener.close };
19
+ (completes) => { listener.complete };
20
+ (references|bugzid|refs) => { listener.reference };
21
+ (fixes) => { listener.fix };
22
+ (reopens) => { listener.reopen };
23
+ (implements) => { listener.implement };
24
+ (resolves) => { listener.resolve };
25
+ (bugid) => { listener.case(data[ts+1...te].pack("C*")) };
26
+ (any - (bugid | keywords));
27
+ *|;
28
+ }%%
29
+
30
+ %%write data;
31
+
32
+ class << self
33
+ def parse(msg, listener)
34
+ data = msg.unpack("C*")
35
+ eof = data.length
36
+
37
+ bugid, action, name = nil
38
+
39
+ %%write init;
40
+ %%write exec;
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,12 @@
1
+ require 'net/http'
2
+ require 'cgi'
3
+
4
+
5
+ url = URI.parse('http://localhost:4567/repo_url')
6
+ req = Net::HTTP::Get.new(url.path)
7
+ req.set_form_data(:type => "diff", :repo => "cvs", :file => "filename.rb", :r1 => "123", :r2 => "124")
8
+ res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
9
+
10
+
11
+ req.set_form_data(:type => "log", :repo => "gitlab-fbtest", :file => "4.7/filename.rb", :r1 => "123", :r2 => "124")
12
+ res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
@@ -0,0 +1,33 @@
1
+ require 'net/http'
2
+
3
+ payload = %Q{
4
+ {"commits":
5
+ { "a72c48d7335486b50b29ef31bb3f694febb9cc62":
6
+ { "removed":["ghook.rb"],
7
+ "author":{"name":"John Reilly","email":"jr@trms.com"},
8
+ "added":[".gitignore","config.yml.example","github-fogbugz.rb"],
9
+ "timestamp":"2008-04-23T12:46:10-07:00",
10
+ "modified":[],
11
+ "message":"bugzid: 3083 slight refactoring",
12
+ "url":"http:\/\/github.com\/johnreilly\/fbtest\/commit\/a72c48d7335486b50b29ef31bb3f694febb9cc62"},
13
+ "ae0b864ad73325c4e8f5c195cd9a9a33cd73e46b":
14
+ { "removed":[],
15
+ "author":{"name":"John Reilly","email":"jr@trms.com"},
16
+ "added":["github-fogbugz-test.rb"],
17
+ "timestamp":"2008-04-23T13:30:12-07:00",
18
+ "modified":["github-fogbugz.rb"],
19
+ "message":"bugzid: 3083 adding some tests",
20
+ "url":"http:\/\/github.com\/johnreilly\/fbtest\/commit\/ae0b864ad73325c4e8f5c195cd9a9a33cd73e46b"}},
21
+ "after":"ae0b864ad73325c4e8f5c195cd9a9a33cd73e46b",
22
+ "before":"6254706d8facde1191f2a96e27200f6057ccc14e",
23
+ "ref":"refs\/heads\/master",
24
+ "repository":
25
+ { "name":"fbtest",
26
+ "owner":{"name":"johnreilly","email":"jr@trms.com"},
27
+ "url":"http:\/\/github.com\/johnreilly\/fbtest"}}}
28
+
29
+ url = URI.parse('http://localhost:4567/')
30
+ req = Net::HTTP::Post.new(url.path)
31
+ req.set_form_data({'payload' => payload})
32
+ res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
33
+ puts res