only_one_rake 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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: