only_one_rake 0.0.2 → 0.0.3

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.
data/README.rdoc CHANGED
@@ -4,12 +4,12 @@ Ensure only one rake is running at a time
4
4
 
5
5
  == Usage
6
6
 
7
- namespace :rails do
8
- desc "online user count"
9
- only_one_task :online_user_count => :environment do
10
- loop { OnlineUser.count; sleep 1 }
7
+ namespace :rails do
8
+ desc "online user count"
9
+ only_one_task :online_user_count => :environment do
10
+ loop { OnlineUser.count; sleep 1 }
11
+ end
11
12
  end
12
- end
13
13
 
14
14
  == Contributing to only_one_rake
15
15
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
data/lib/only_one_rake.rb CHANGED
@@ -1,32 +1,55 @@
1
1
  module Rake
2
2
  WHOAMI = `whoami`.strip
3
3
 
4
- class OOR < Struct.new(:uid, :pid, :ppid, :c, :stime, :tty, :time, :cmd)
4
+ class ProcessStatusLine < Struct.new(:uid, :pid, :ppid, :c, :stime, :tty, :time, :cmd)
5
5
  def nt_str; self.cmd.split.select {|i| i.match(/:/) }[0] end
6
- def namespace; self.nt_str.split(':')[0] end
7
- def task; self.nt_str.split(':')[1] end
8
- def equal?(n, t); self.nt_str == [n, t].join(":") end
6
+ def namespace; self.nt_str.split(':')[1..-2].join(":") end
7
+ def task; self.nt_str.split(':')[-1] end
8
+ def equal? name; self.nt_str == name end
9
9
  end
10
10
 
11
11
  # TODO support not only one namespace
12
- def self.ensure_only_one_task_is_running namespace, task = ""
13
- oors = `ps -u #{WHOAMI} -ef | grep rake | grep -v '/bash ' | grep -v 'grep rake'`.split("\n").map {|line| OOR.new *line.split(" ", 8) }
14
-
15
- Process.exit! 0 if oors.select {|oor| oor.equal? namespace, task }.size > 1
12
+ def self.ensure_only_one_task_is_running name
13
+ oors = `ps -u #{WHOAMI} -ef | grep rake | grep -v '/bash ' | grep -v 'grep rake'`.split("\n").map {|line| ProcessStatusLine.new *line.split(" ", 8) }
14
+ Process.exit! 0 if oors.select {|oor| oor.equal? name }.size > 1
16
15
  end
17
16
 
18
- # From github.com/hongchen
19
- # Add to rake.gem/lib/rake/dsl_definition.rb
20
17
  module DSL
21
18
  private
22
19
  def only_one_task(*args, &block)
23
- name, params, deps = Rake.application.resolve_args(args.dup)
24
- scope = Rake.application.instance_variable_get(:@scope).dup[0].to_sym
25
- new_block = Proc.new do
26
- Rake.ensure_only_one_task_is_running scope, name.to_sym
27
- yield
20
+ task = Rake::Task.define_task(*args, &block)
21
+ task.is_only_one_task = true
22
+ task
23
+ end
24
+ end
25
+
26
+ class Task
27
+ attr_accessor :is_only_one_task
28
+
29
+ # Execute the actions associated with this task.
30
+ def execute(args=nil)
31
+ args ||= EMPTY_TASK_ARGS
32
+ if application.options.dryrun
33
+ application.trace "** Execute (dry run) #{name}"
34
+ return
35
+ end
36
+ if application.options.trace
37
+ application.trace "** Execute #{name}"
38
+ end
39
+ application.enhance_with_matching_rule(name) if @actions.empty?
40
+
41
+ # patch
42
+ Rake.ensure_only_one_task_is_running name if is_only_one_task
43
+
44
+ @actions.each do |act|
45
+ case act.arity
46
+ when 1
47
+ act.call(self)
48
+ else
49
+ act.call(self, args)
28
50
  end
29
- Rake::Task.define_task(*args, &new_block)
51
+ end
30
52
  end
31
53
  end
54
+
32
55
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "only_one_rake"
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Chen"]
12
- s.date = "2013-01-15"
12
+ s.date = "2013-02-26"
13
13
  s.description = "ensure only one rake is running at a time"
14
14
  s.email = "mvjome@gmail.com"
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: only_one_rake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-15 00:00:00.000000000 Z
12
+ date: 2013-02-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
16
- requirement: &2164385160 !ruby/object:Gem::Requirement
16
+ requirement: &2153527320 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2164385160
24
+ version_requirements: *2153527320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &2152014800 !ruby/object:Gem::Requirement
27
+ requirement: &2153526720 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152014800
35
+ version_requirements: *2153526720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &2152074500 !ruby/object:Gem::Requirement
38
+ requirement: &2153525920 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.0.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152074500
46
+ version_requirements: *2153525920
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &2152084840 !ruby/object:Gem::Requirement
49
+ requirement: &2153524360 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.8.4
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152084840
57
+ version_requirements: *2153524360
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &2152081680 !ruby/object:Gem::Requirement
60
+ requirement: &2153537320 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2152081680
68
+ version_requirements: *2153537320
69
69
  description: ensure only one rake is running at a time
70
70
  email: mvjome@gmail.com
71
71
  executables: []
@@ -99,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
99
  version: '0'
100
100
  segments:
101
101
  - 0
102
- hash: 3484601440291875424
102
+ hash: -2838995736263901768
103
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  none: false
105
105
  requirements: