crash-watch 1.1.5 → 1.1.8

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.asc CHANGED
@@ -2,11 +2,11 @@
2
2
  Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQEcBAABAgAGBQJRRcODAAoJECrHRaUKISqMHBwH/3abEoPCgpwaimUouSume8gv
6
- nmmrcgtCk9gdbHS3TYczVSmbKEmQEE2rJluzqSovNA9l4HNn5KrovAWescB4kDDu
7
- E6otc8Esw0CgTL/1q0yR6jwA4u2TqIqNcXuX8nC3lP6G11wev/67lDMkv4eRsgdy
8
- 9L9VnOj2q/0uXLaXeIcGGCIizC/vi0zW4iN9w0qbA48XArfWjPimrftH8/bTNE15
9
- Y+BJ6QDhNcrqurDpbGMRgq6BSTWpe58+EYLNT47Qdw8qAt6mh+tUEAIRfvwUCdAf
10
- 0DKosswqDXKAmBS3dAZEyr2ZwlERJlzYgQdW7DecKPESrJRQWX8uFE6aBbvZszQ=
11
- =MriR
5
+ iQEcBAABAgAGBQJRnnRBAAoJECrHRaUKISqMN28H/3ScjJga1Aqi/5EONbkGd9p0
6
+ LN43oEbYL5Y1dhSfVK+bV9a5oGKFStTPmHcWkUontQjzHJMoT/LlcXd7QLYnfYga
7
+ 7wWC/wv5ro9tybNQm20T2RLcGijkH2UHo5Cod8nolPcBf13IBlcuL2JjOsbS63Z5
8
+ spGky9E43K0nVG61zHN5DVX8R1XhtI7yVZ9B77y3hNezpM0jac5LfVSUL/5+cz9O
9
+ lpe3roWqAzSV8h2kKvm9297qMb0v8rVwxO4nqsgp9xsz3YiDppjLq1w6qdy/CZvc
10
+ N78ijnXnJum7pG0muNoexTD/5Yvwa7Df8fLjEAj5GO9vJ7v31lMfaW9ZEar+XLE=
11
+ =QiiL
12
12
  -----END PGP SIGNATURE-----
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Phusion
1
+ Copyright (c) 2010-2013 Phusion
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.markdown CHANGED
@@ -7,7 +7,9 @@
7
7
 
8
8
  `crash-watch` to the rescue! This little program will monitor a specified process and wait until it crashes. It will then print useful information such as its exit status, what signal caused it to abort, and its backtrace.
9
9
 
10
- ## Installation
10
+ ## Installation with RubyGems
11
+
12
+ Run:
11
13
 
12
14
  gem install crash-watch
13
15
 
@@ -16,12 +18,28 @@ You must also have GDB installed. Mac OS X already has it by default. If you're
16
18
  apt-get install gdb
17
19
  yum install gdb
18
20
 
19
- ## Cryptographic verification
20
-
21
- Our gem is signed using PGP with the [Phusion Software Signing key](http://www.phusion.nl/about/gpg). That key in turn is signed by [the rubygems-openpgp Certificate Authority](http://www.rubygems-openpgp-ca.org/).
21
+ This gem is signed using PGP with the [Phusion Software Signing key](http://www.phusion.nl/about/gpg). That key in turn is signed by [the rubygems-openpgp Certificate Authority](http://www.rubygems-openpgp-ca.org/).
22
22
 
23
23
  You can verify the authenticity of the gem by following [The Complete Guide to Verifying Gems with rubygems-openpgp](http://www.rubygems-openpgp-ca.org/blog/the-complete-guide-to-verifying-gems-with-rubygems-openpgp.html).
24
24
 
25
+ ## Installation on Ubuntu
26
+
27
+ Use our [PPA](https://launchpad.net/~phusion.nl/+archive/misc):
28
+
29
+ sudo add-apt-repository ppa:phusion.nl/misc
30
+ sudo apt-get update
31
+ sudo apt-get install crash-watch
32
+
33
+ ## Installation on Debian
34
+
35
+ Our Ubuntu Lucid packages are compatible with Debian 6.
36
+
37
+ sudo sh -c 'echo deb http://ppa.launchpad.net/phusion.nl/misc/ubuntu lucid main > /etc/apt/sources.list.d/phusion-misc.list'
38
+ sudo sh -c 'echo deb-src http://ppa.launchpad.net/phusion.nl/misc/ubuntu lucid main >> /etc/apt/sources.list.d/phusion-misc.list'
39
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 2AC745A50A212A8C
40
+ sudo apt-get update
41
+ sudo apt-get install crash-watch
42
+
25
43
  ## Sample usage
26
44
 
27
45
  $ crash-watch <PID>
data/Rakefile CHANGED
@@ -1,15 +1,431 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/lib"))
2
2
  require 'crash_watch/version'
3
3
 
4
+ PACKAGE_NAME = "crash-watch"
5
+ PACKAGE_VERSION = CrashWatch::VERSION_STRING
6
+ PACKAGE_SIGNING_KEY = "0x0A212A8C"
7
+ MAINTAINER_NAME = "Hongli Lai"
8
+ MAINTAINER_EMAIL = "hongli@phusion.nl"
9
+
10
+ desc "Run unit tests"
11
+ task :test do
12
+ ruby "-S spec -f s -c test/*_spec.rb"
13
+ end
14
+
4
15
  desc "Build, sign & upload gem"
5
16
  task 'package:release' do
6
- sh "git tag -s release-#{CrashWatch::VERSION_STRING}"
7
- sh "gem build crash-watch.gemspec --sign --key 0x0A212A8C"
17
+ sh "git tag -s release-#{PACKAGE_VERSION}"
18
+ sh "gem build #{PACKAGE_NAME}.gemspec --sign --key #{PACKAGE_SIGNING_KEY}"
8
19
  puts "Proceed with pushing tag to Github and uploading the gem? [y/n]"
9
20
  if STDIN.readline == "y\n"
10
- sh "git push origin release-#{CrashWatch::VERSION_STRING}"
11
- sh "gem push crash-watch-#{CrashWatch::VERSION_STRING}.gem"
21
+ sh "git push origin release-#{PACKAGE_VERSION}"
22
+ sh "gem push #{PACKAGE_NAME}-#{PACKAGE_VERSION}.gem"
12
23
  else
13
24
  puts "Did not upload the gem."
14
25
  end
15
26
  end
27
+
28
+
29
+ ##### Utilities #####
30
+
31
+ def string_option(name, default_value = nil)
32
+ value = ENV[name]
33
+ if value.nil? || value.empty?
34
+ return default_value
35
+ else
36
+ return value
37
+ end
38
+ end
39
+
40
+ def boolean_option(name, default_value = false)
41
+ value = ENV[name]
42
+ if value.nil? || value.empty?
43
+ return default_value
44
+ else
45
+ return value == "yes" || value == "on" || value == "true" || value == "1"
46
+ end
47
+ end
48
+
49
+
50
+ ##### Debian packaging support #####
51
+
52
+ PKG_DIR = string_option('PKG_DIR', "pkg")
53
+ DEBIAN_NAME = PACKAGE_NAME
54
+ ALL_DISTRIBUTIONS = ["raring", "precise", "lucid"]
55
+ ORIG_TARBALL_FILES = lambda do
56
+ require 'crash_watch/packaging'
57
+ Dir[*CRASH_WATCH_FILES] - Dir[*CRASH_WATCH_EXCLUDE_FILES]
58
+ end
59
+
60
+ # Implements a simple preprocessor language:
61
+ #
62
+ # Today
63
+ # #if @today == :fine
64
+ # is a fine day.
65
+ # #elif @today == :good
66
+ # is a good day.
67
+ # #else
68
+ # is a sad day.
69
+ # #endif
70
+ # Let's go walking.
71
+ #
72
+ # When run with...
73
+ #
74
+ # Preprocessor.new.start('input.txt', 'output.txt', :today => :fine)
75
+ #
76
+ # ...will produce:
77
+ #
78
+ # Today
79
+ # is a fine day.
80
+ # Let's go walking.
81
+ #
82
+ # Highlights:
83
+ #
84
+ # * #if blocks can be nested.
85
+ # * Expressions are Ruby expressions, evaluated within the binding of a
86
+ # Preprocessor::Evaluator object.
87
+ # * Text inside #if/#elif/#else are automatically unindented.
88
+ class Preprocessor
89
+ def initialize
90
+ @indentation_size = 4
91
+ @debug = boolean_option('DEBUG')
92
+ end
93
+
94
+ def start(filename, output_filename, variables = {})
95
+ if output_filename
96
+ temp_output_filename = "#{output_filename}._new"
97
+ output = File.open(temp_output_filename, 'w')
98
+ else
99
+ output = STDOUT
100
+ end
101
+ the_binding = create_binding(variables)
102
+ context = []
103
+ @lineno = 1
104
+ @indentation = 0
105
+
106
+ each_line(filename) do |line|
107
+ debug("context=#{context.inspect}, line=#{line.inspect}")
108
+
109
+ name, args_string, cmd_indentation = recognize_command(line)
110
+ case name
111
+ when "if"
112
+ case context.last
113
+ when nil, :if_true, :else_true
114
+ check_indentation(cmd_indentation)
115
+ result = the_binding.eval(args_string, filename, @lineno)
116
+ context.push(result ? :if_true : :if_false)
117
+ inc_indentation
118
+ when :if_false, :else_false, :if_ignore
119
+ check_indentation(cmd_indentation)
120
+ inc_indentation
121
+ context.push(:if_ignore)
122
+ else
123
+ terminate "#if is not allowed in this context"
124
+ end
125
+ when "elif"
126
+ case context.last
127
+ when :if_true
128
+ dec_indentation
129
+ check_indentation(cmd_indentation)
130
+ inc_indentation
131
+ context[-1] = :if_false
132
+ when :if_false
133
+ dec_indentation
134
+ check_indentation(cmd_indentation)
135
+ inc_indentation
136
+ result = the_binding.eval(args_string, filename, @lineno)
137
+ context[-1] = result ? :if_true : :if_false
138
+ when :else_true, :else_false
139
+ terminate "#elif is not allowed after #else"
140
+ when :if_ignore
141
+ dec_indentation
142
+ check_indentation(cmd_indentation)
143
+ inc_indentation
144
+ else
145
+ terminate "#elif is not allowed outside #if block"
146
+ end
147
+ when "else"
148
+ case context.last
149
+ when :if_true
150
+ dec_indentation
151
+ check_indentation(cmd_indentation)
152
+ inc_indentation
153
+ context[-1] = :else_false
154
+ when :if_false
155
+ dec_indentation
156
+ check_indentation(cmd_indentation)
157
+ inc_indentation
158
+ context[-1] = :else_true
159
+ when :else_true, :else_false
160
+ terminate "it is not allowed to have multiple #else clauses in one #if block"
161
+ when :if_ignore
162
+ dec_indentation
163
+ check_indentation(cmd_indentation)
164
+ inc_indentation
165
+ else
166
+ terminate "#else is not allowed outside #if block"
167
+ end
168
+ when "endif"
169
+ case context.last
170
+ when :if_true, :if_false, :else_true, :else_false, :if_ignore
171
+ dec_indentation
172
+ check_indentation(cmd_indentation)
173
+ context.pop
174
+ else
175
+ terminate "#endif is not allowed outside #if block"
176
+ end
177
+ when "", nil
178
+ # Either a comment or not a preprocessor command.
179
+ case context.last
180
+ when nil, :if_true, :else_true
181
+ output.puts(unindent(line))
182
+ else
183
+ # Check indentation but do not output.
184
+ unindent(line)
185
+ end
186
+ else
187
+ terminate "Unrecognized preprocessor command ##{name.inspect}"
188
+ end
189
+
190
+ @lineno += 1
191
+ end
192
+ ensure
193
+ if output_filename && output
194
+ output.close
195
+ stat = File.stat(filename)
196
+ File.chmod(stat.mode, temp_output_filename)
197
+ File.chown(stat.uid, stat.gid, temp_output_filename) rescue nil
198
+ File.rename(temp_output_filename, output_filename)
199
+ end
200
+ end
201
+
202
+ private
203
+ UBUNTU_DISTRIBUTIONS = {
204
+ "lucid" => "10.04",
205
+ "maverick" => "10.10",
206
+ "natty" => "11.04",
207
+ "oneiric" => "11.10",
208
+ "precise" => "12.04",
209
+ "quantal" => "12.10",
210
+ "raring" => "13.04",
211
+ "saucy" => "13.10"
212
+ }
213
+
214
+ # Provides the DSL that's accessible within.
215
+ class Evaluator
216
+ def _infer_distro_table(name)
217
+ if UBUNTU_DISTRIBUTIONS.has_key?(name)
218
+ return UBUNTU_DISTRIBUTIONS
219
+ end
220
+ end
221
+
222
+ def is_distribution?(expr)
223
+ if @distribution.nil?
224
+ raise "The :distribution variable must be set"
225
+ else
226
+ if expr =~ /^(>=|>|<=|<|==|\!=)[\s]*(.+)/
227
+ comparator = $1
228
+ name = $2
229
+ else
230
+ raise "Invalid expression #{expr.inspect}"
231
+ end
232
+
233
+ table1 = _infer_distro_table(@distribution)
234
+ table2 = _infer_distro_table(name)
235
+ raise "Distribution name #{@distribution.inspect} not recognized" if !table1
236
+ raise "Distribution name #{name.inspect} not recognized" if !table2
237
+ v1 = table1[@distribution]
238
+ v2 = table2[name]
239
+
240
+ case comparator
241
+ when ">"
242
+ return v1 > v2
243
+ when ">="
244
+ return v1 >= v2
245
+ when "<"
246
+ return v1 < v2
247
+ when "<="
248
+ return v1 <= v2
249
+ when "=="
250
+ return v1 == v2
251
+ when "!="
252
+ return v1 != v2
253
+ else
254
+ raise "BUG"
255
+ end
256
+ end
257
+ end
258
+ end
259
+
260
+ def each_line(filename)
261
+ File.open(filename, 'r') do |f|
262
+ while true
263
+ begin
264
+ line = f.readline.chomp
265
+ rescue EOFError
266
+ break
267
+ end
268
+ yield line
269
+ end
270
+ end
271
+ end
272
+
273
+ def recognize_command(line)
274
+ if line =~ /^([\s\t]*)#(.+)/
275
+ indentation_str = $1
276
+ command = $2
277
+ name = command.scan(/^\w+/).first
278
+ args_string = command.sub(/^#{Regexp.escape(name)}[\s\t]*/, '')
279
+ return [name, args_string, indentation_str.to_s.size]
280
+ else
281
+ return nil
282
+ end
283
+ end
284
+
285
+ def create_binding(variables)
286
+ object = Evaluator.new
287
+ variables.each_pair do |key, val|
288
+ object.send(:instance_variable_set, "@#{key}", val)
289
+ end
290
+ return object.instance_eval do
291
+ binding
292
+ end
293
+ end
294
+
295
+ def inc_indentation
296
+ @indentation += @indentation_size
297
+ end
298
+
299
+ def dec_indentation
300
+ @indentation -= @indentation_size
301
+ end
302
+
303
+ def check_indentation(expected)
304
+ if expected != @indentation
305
+ terminate "wrong indentation: found #{expected} characters, should be #{@indentation}"
306
+ end
307
+ end
308
+
309
+ def unindent(line)
310
+ line =~ /^([\s\t]*)/
311
+ found = $1.to_s.size
312
+ if found >= @indentation
313
+ return line[@indentation .. -1]
314
+ else
315
+ terminate "wrong indentation: found #{found} characters, should be at least #{@indentation}"
316
+ end
317
+ end
318
+
319
+ def debug(message)
320
+ puts "DEBUG:#{@lineno}: #{message}" if @debug
321
+ end
322
+
323
+ def terminate(message)
324
+ abort "*** ERROR: line #{@lineno}: #{message}"
325
+ end
326
+ end
327
+
328
+ def recursive_copy_files(files, destination_dir, preprocess = false, variables = {})
329
+ require 'fileutils' if !defined?(FileUtils)
330
+ files.each_with_index do |filename, i|
331
+ dir = File.dirname(filename)
332
+ if !File.exist?("#{destination_dir}/#{dir}")
333
+ FileUtils.mkdir_p("#{destination_dir}/#{dir}")
334
+ end
335
+ if !File.directory?(filename)
336
+ if preprocess && filename =~ /\.template$/
337
+ real_filename = filename.sub(/\.template$/, '')
338
+ FileUtils.install(filename, "#{destination_dir}/#{real_filename}")
339
+ Preprocessor.new.start(filename, "#{destination_dir}/#{real_filename}",
340
+ variables)
341
+ else
342
+ FileUtils.install(filename, "#{destination_dir}/#{filename}")
343
+ end
344
+ end
345
+ printf "\r[%5d/%5d] [%3.0f%%] Copying files...", i + 1, files.size, i * 100.0 / files.size
346
+ STDOUT.flush
347
+ end
348
+ printf "\r[%5d/%5d] [%3.0f%%] Copying files...\n", files.size, files.size, 100
349
+ end
350
+
351
+ def create_debian_package_dir(distribution)
352
+ require 'time'
353
+
354
+ variables = {
355
+ :distribution => distribution
356
+ }
357
+
358
+ root = "#{PKG_DIR}/#{distribution}"
359
+ sh "rm -rf #{root}"
360
+ sh "mkdir -p #{root}"
361
+ recursive_copy_files(ORIG_TARBALL_FILES.call, root)
362
+ recursive_copy_files(Dir["debian.template/**/*"], root,
363
+ true, variables)
364
+ sh "mv #{root}/debian.template #{root}/debian"
365
+ changelog = File.read("#{root}/debian/changelog")
366
+ changelog =
367
+ "#{DEBIAN_NAME} (#{PACKAGE_VERSION}-1~#{distribution}1) #{distribution}; urgency=low\n" +
368
+ "\n" +
369
+ " * Package built.\n" +
370
+ "\n" +
371
+ " -- #{MAINTAINER_NAME} <#{MAINTAINER_EMAIL}> #{Time.now.rfc2822}\n\n" +
372
+ changelog
373
+ File.open("#{root}/debian/changelog", "w") do |f|
374
+ f.write(changelog)
375
+ end
376
+ end
377
+
378
+ task 'debian:orig_tarball' do
379
+ if File.exist?("#{PKG_DIR}/#{DEBIAN_NAME}.orig.tar.gz")
380
+ puts "Debian orig tarball #{PKG_DIR}/#{DEBIAN_NAME}_#{PACKAGE_VERSION}.orig.tar.gz already exists."
381
+ else
382
+ sh "rm -rf #{PKG_DIR}/#{DEBIAN_NAME}_#{PACKAGE_VERSION}"
383
+ sh "mkdir -p #{PKG_DIR}/#{DEBIAN_NAME}_#{PACKAGE_VERSION}"
384
+ recursive_copy_files(ORIG_TARBALL_FILES.call, "#{PKG_DIR}/#{DEBIAN_NAME}_#{PACKAGE_VERSION}")
385
+ sh "cd #{PKG_DIR} && tar -c #{DEBIAN_NAME}_#{PACKAGE_VERSION} | gzip --best > #{DEBIAN_NAME}_#{PACKAGE_VERSION}.orig.tar.gz"
386
+ end
387
+ end
388
+
389
+ desc "Build Debian source and binary package(s) for local testing"
390
+ task 'debian:dev' do
391
+ sh "rm -f #{PKG_DIR}/#{DEBIAN_NAME}_#{PACKAGE_VERSION}.orig.tar.gz"
392
+ Rake::Task["debian:clean"].invoke
393
+ Rake::Task["debian:orig_tarball"].invoke
394
+ case distro = string_option('DISTRO', 'current')
395
+ when 'current'
396
+ distributions = [File.read("/etc/lsb-release").scan(/^DISTRIB_CODENAME=(.+)/).first.first]
397
+ when 'all'
398
+ distributions = ALL_DISTRIBUTIONS
399
+ else
400
+ distributions = distro.split(',')
401
+ end
402
+ distributions.each do |distribution|
403
+ create_debian_package_dir(distribution)
404
+ sh "cd #{PKG_DIR}/#{distribution} && dpkg-checkbuilddeps"
405
+ end
406
+ distributions.each do |distribution|
407
+ sh "cd #{PKG_DIR}/#{distribution} && debuild -F -us -uc"
408
+ end
409
+ end
410
+
411
+ desc "Build Debian source packages to be uploaded to repositories"
412
+ task 'debian:production' => 'debian:orig_tarball' do
413
+ ALL_DISTRIBUTIONS.each do |distribution|
414
+ create_debian_package_dir(distribution)
415
+ sh "cd #{PKG_DIR}/#{distribution} && dpkg-checkbuilddeps"
416
+ end
417
+ ALL_DISTRIBUTIONS.each do |distribution|
418
+ sh "cd #{PKG_DIR}/#{distribution} && debuild -S -sa -k#{PACKAGE_SIGNING_KEY}"
419
+ end
420
+ end
421
+
422
+ desc "Clean Debian packaging products, except for orig tarball"
423
+ task 'debian:clean' do
424
+ files = Dir["#{PKG_DIR}/*.{changes,build,deb,dsc,upload}"]
425
+ sh "rm -f #{files.join(' ')}"
426
+ sh "rm -rf #{PKG_DIR}/dev"
427
+ ALL_DISTRIBUTIONS.each do |distribution|
428
+ sh "rm -rf #{PKG_DIR}/#{distribution}"
429
+ end
430
+ sh "rm -rf #{PKG_DIR}/*.debian.tar.gz"
431
+ end
data/bin/crash-watch CHANGED
@@ -75,7 +75,13 @@ begin
75
75
  end
76
76
  end
77
77
  else
78
- puts "Cannot attach to process."
78
+ puts "ERROR: Cannot attach to process."
79
+ if File.exist?("/proc/sys/kernel/yama/ptrace_scope")
80
+ puts
81
+ puts "This may be the result of kernel ptrace() hardening. Try disabling it with:"
82
+ puts " sudo sh -c 'echo 0 > /proc/sys/kernel/yama/ptrace_scope'"
83
+ puts "See http://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process for more information."
84
+ end
79
85
  exit 2
80
86
  end
81
87
  ensure
data/crash-watch.gemspec CHANGED
@@ -1,22 +1,14 @@
1
1
  require File.expand_path('lib/crash_watch/version', File.dirname(__FILE__))
2
+ require File.expand_path('lib/crash_watch/packaging', File.dirname(__FILE__))
2
3
 
3
4
  Gem::Specification.new do |s|
4
5
  s.name = "crash-watch"
5
6
  s.version = CrashWatch::VERSION_STRING
6
7
  s.authors = ["Hongli Lai"]
7
- s.date = "2013-03-17"
8
8
  s.description = "Monitor processes and display useful information when they crash."
9
9
  s.summary = "Monitor processes and display useful information when they crash"
10
10
  s.email = "software-signing@phusion.nl"
11
- s.files = Dir[
12
- "README.markdown",
13
- "LICENSE.txt",
14
- "Rakefile",
15
- "crash-watch.gemspec",
16
- "bin/**/*",
17
- "lib/**/*",
18
- "test/**/*"
19
- ]
11
+ s.files = Dir[*CRASH_WATCH_FILES]
20
12
  s.homepage = "https://github.com/FooBarWidget/crash-watch"
21
13
  s.rdoc_options = ["--charset=UTF-8"]
22
14
  s.executables = ["crash-watch"]
@@ -0,0 +1,14 @@
1
+ CRASH_WATCH_FILES = [
2
+ "README.markdown",
3
+ "LICENSE.txt",
4
+ "Rakefile",
5
+ "crash-watch.gemspec",
6
+ "bin/**/*",
7
+ "lib/**/*",
8
+ "test/**/*"
9
+ ]
10
+
11
+ CRASH_WATCH_EXCLUDE_FILES = [
12
+ "Rakefile",
13
+ "debian.template/**/*"
14
+ ]
@@ -1,3 +1,3 @@
1
1
  module CrashWatch
2
- VERSION_STRING = '1.1.5'
2
+ VERSION_STRING = '1.1.8'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crash-watch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-17 00:00:00.000000000 Z
12
+ date: 2013-05-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
@@ -56,6 +56,7 @@ files:
56
56
  - crash-watch.gemspec
57
57
  - bin/crash-watch
58
58
  - lib/crash_watch/gdb_controller.rb
59
+ - lib/crash_watch/packaging.rb
59
60
  - lib/crash_watch/version.rb
60
61
  - test/gdb_controller_spec.rb
61
62
  homepage: https://github.com/FooBarWidget/crash-watch
metadata.gz.asc CHANGED
@@ -2,11 +2,11 @@
2
2
  Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQEcBAABAgAGBQJRRcODAAoJECrHRaUKISqMEO0IAJuhELVa6QwpJnlBZb1PBvV4
6
- abh+UMrEIy+1o1+seosi80/ve95UAQM580zqNed2GBqoPwMNaHuBhpzi97FYavOh
7
- XStm+BPTkL2yPK5TtsgjLrGJOcn4IAWasGpbnzMbf+R+YamLl7CIrr3cSLO5ybfC
8
- 9r3SNvwwEO4gZwYS6vKetZy5Q01lo2M7zFzfYrsWjxQpZ4Szl/UviTTR3kR+58Md
9
- uzs+dRcaX4S0FNc15+v24JkAJj2ydyVt6X6lV+ByCLCajrMxY2XxwynHZYCT/prM
10
- VIYbEf1AssnhSdiW3tQkR2wIP+NHSQhdivVIQCNWFbPvjUmSf8u+jJt0d0wsfSM=
11
- =4mEW
5
+ iQEcBAABAgAGBQJRnnRBAAoJECrHRaUKISqM2kAIAJuFG1kFUVcJ4e34c+lshduf
6
+ Ntb3Urm5ygDBYUGM8BaW/9W9ncpIyrlB2QFZl/T4RHTCaseQ/gYAQ37xOKoN9aZf
7
+ 8FIpmpL980nbixThjZmEVnMQDCM8GICW8loHtSDmY++vcnyxmMeSTZQMSIis+8SR
8
+ ko5HoG2bAoyVaqFlkDvw871Qyz9yDqvVX5OQ5cqgzdfi6tGszwB9FvEOwK2W6Wkt
9
+ D95hfBqrH6JQrRD3+9nZjcnNcHvCnEhvGZtRQyrUs9gk4mRtZXXPOWmQuoalbiL5
10
+ m1uEy7eyF8qM2e/PCsiJgTwgVSl+MG+NVixsDkcBx14HuwzWaBCAMDrA2is8OG8=
11
+ =R2yM
12
12
  -----END PGP SIGNATURE-----