76 lines
2.3 KiB
Ruby
Executable file
76 lines
2.3 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
#
|
|
# Copyright 2014 Greg Hurrell. All rights reserved.
|
|
# Licensed under the terms of the BSD 2-clause license.
|
|
|
|
lib = File.expand_path('../../ruby', File.dirname(__FILE__))
|
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
|
require 'command-t/ext'
|
|
require 'benchmark'
|
|
require 'json'
|
|
require 'pathname'
|
|
require 'socket'
|
|
|
|
puts "Starting benchmark run (PID: #{Process.pid})"
|
|
|
|
TEST_TIMES = 10
|
|
|
|
Benchmark.bmbm do |b|
|
|
b.report('watchman JSON') do
|
|
TEST_TIMES.times do
|
|
sockname = JSON[%x{watchman get-sockname}]['sockname']
|
|
raise unless $?.exitstatus.zero?
|
|
UNIXSocket.open(sockname) do |s|
|
|
root = Pathname.new(ENV['PWD']).realpath
|
|
s.puts JSON.generate(['watch-list'])
|
|
if !JSON[s.gets]['roots'].include?(root)
|
|
# this path isn't being watched yet; try to set up watch
|
|
s.puts JSON.generate(['watch', root])
|
|
|
|
# root_restrict_files setting may prevent Watchman from working
|
|
raise if JSON[s.gets].has_key?('error')
|
|
end
|
|
|
|
s.puts JSON.generate(['query', root, {
|
|
'expression' => ['type', 'f'],
|
|
'fields' => ['name'],
|
|
}])
|
|
paths = JSON[s.gets]
|
|
|
|
# could return error if watch is removed
|
|
raise if paths.has_key?('error')
|
|
end
|
|
end
|
|
end
|
|
|
|
b.report('watchman binary') do
|
|
TEST_TIMES.times do
|
|
sockname = CommandT::Watchman::Utils.load(
|
|
%x{watchman --output-encoding=bser get-sockname}
|
|
)['sockname']
|
|
raise unless $?.exitstatus.zero?
|
|
|
|
UNIXSocket.open(sockname) do |socket|
|
|
root = Pathname.new(ENV['PWD']).realpath.to_s
|
|
roots = CommandT::Watchman::Utils.query(['watch-list'], socket)['roots']
|
|
if !roots.include?(root)
|
|
# this path isn't being watched yet; try to set up watch
|
|
result = CommandT::Watchman::Utils.query(['watch', root], socket)
|
|
|
|
# root_restrict_files setting may prevent Watchman from working
|
|
raise if result.has_key?('error')
|
|
end
|
|
|
|
query = ['query', root, {
|
|
'expression' => ['type', 'f'],
|
|
'fields' => ['name'],
|
|
}]
|
|
paths = CommandT::Watchman::Utils.query(query, socket)
|
|
|
|
# could return error if watch is removed
|
|
raise if paths.has_key?('error')
|
|
end
|
|
end
|
|
end
|
|
end
|