lib/sup/interactive_lock.rb in sup-0.15.4 vs lib/sup/interactive_lock.rb in sup-0.16.0
- old
+ new
@@ -23,52 +23,67 @@
def lock_interactively stream=$stderr
begin
Index.lock
rescue Index::LockError => e
- stream.puts <<EOS
-Error: the index is locked by another process! User '#{e.user}' on
-host '#{e.host}' is running #{e.pname} with pid #{e.pid}.
-The process was alive as of at least #{time_ago_in_words e.mtime} ago.
+ begin
+ Process.kill 0, e.pid.to_i # 0 signal test the existence of PID
+ stream.puts <<EOS
+ Error: the index is locked by another process! User '#{e.user}' on
+ host '#{e.host}' is running #{e.pname} with pid #{e.pid}.
+ The process was alive as of at least #{time_ago_in_words e.mtime} ago.
EOS
- stream.print "Should I ask that process to kill itself (y/n)? "
- stream.flush
-
- success = if $stdin.gets =~ /^\s*y(es)?\s*$/i
- stream.puts "Ok, trying to kill process..."
-
- begin
+ stream.print "Should I ask that process to kill itself (y/n)? "
+ stream.flush
+ if $stdin.gets =~ /^\s*y(es)?\s*$/i
Process.kill "TERM", e.pid.to_i
sleep DELAY
- rescue Errno::ESRCH # no such process
- stream.puts "Hm, I couldn't kill it."
+ stream.puts "Let's try that again."
+ begin
+ Index.lock
+ rescue Index::LockError => e
+ stream.puts "I couldn't lock the index. The lockfile might just be stale."
+ stream.print "Should I just remove it and continue? (y/n) "
+ stream.flush
+ if $stdin.gets =~ /^\s*y(es)?\s*$/i
+ begin
+ FileUtils.rm e.path
+ rescue Errno::ENOENT
+ stream.puts "The lockfile doesn't exists. We continue."
+ end
+ stream.puts "Let's try that one more time."
+ begin
+ Index.lock
+ rescue Index::LockError => e
+ stream.puts "I couldn't unlock the index."
+ return false
+ end
+ return true
+ end
+ end
end
-
- stream.puts "Let's try that again."
+ rescue Errno::ESRCH # no such process
+ stream.puts "I couldn't lock the index. The lockfile might just be stale."
begin
+ FileUtils.rm e.path
+ rescue Errno::ENOENT
+ stream.puts "The lockfile doesn't exists. We continue."
+ end
+ stream.puts "Let's try that one more time."
+ begin
+ sleep DELAY
Index.lock
rescue Index::LockError => e
- stream.puts "I couldn't lock the index. The lockfile might just be stale."
- stream.print "Should I just remove it and continue? (y/n) "
- stream.flush
-
- if $stdin.gets =~ /^\s*y(es)?\s*$/i
- FileUtils.rm e.path
-
- stream.puts "Let's try that one more time."
- begin
- Index.lock
- true
- rescue Index::LockError => e
- end
- end
+ stream.puts "I couldn't unlock the index."
+ return false
end
+ return true
end
-
- stream.puts "Sorry, couldn't unlock the index." unless success
- success
+ stream.puts "Sorry, couldn't unlock the index."
+ return false
end
+ return true
end
end
end