diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-18 21:19:18 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-18 21:19:18 +0000 |
commit | 7bbf2f308580f468802cd7d32c94fce1b9f1779e () | |
tree | 0a680f59e70a78d60e776d7b763e618fb2fec624 /lib/shell | |
parent | 34276148c4450faa77bb298cfbe005f7c263f802 (diff) |
* lib: Convert tabs to spaces for ruby files per
http://redmine.ruby-lang.org/projects/ruby/wiki/DeveloperHowto#coding-style by Steve Klabnik [Ruby 1.9 - Bug #4730] by Jason Dew [Ruby 1.9 - Feature #4718] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | lib/shell/builtin-command.rb | 62 | ||||
-rw-r--r-- | lib/shell/command-processor.rb | 476 | ||||
-rw-r--r-- | lib/shell/error.rb | 6 | ||||
-rw-r--r-- | lib/shell/filter.rb | 48 | ||||
-rw-r--r-- | lib/shell/process-controller.rb | 330 | ||||
-rw-r--r-- | lib/shell/system-command.rb | 116 | ||||
-rw-r--r-- | lib/shell/version.rb | 6 |
7 files changed, 522 insertions, 522 deletions
@@ -1,8 +1,8 @@ # # shell/builtin-command.rb - -# $Release Version: 0.7 $ -# $Revision$ -# by Keiju ISHITSUKA([email protected]) # # -- # @@ -40,7 +40,7 @@ class Shell def each(rs = nil) rs = @shell.record_separator unless rs for str in @strings - yield str + rs end end end @@ -53,11 +53,11 @@ class Shell def each(rs = nil) if @cat_files.empty? - super else - for src in @cat_files - @shell.foreach(src, rs){|l| yield l} - end end end end @@ -71,31 +71,31 @@ class Shell def each(rs = nil) if @pattern[0] == ?/ - @files = Dir[@pattern] else - prefix = @shell.pwd+"/" - @files = Dir[prefix+@pattern].collect{|p| p.sub(prefix, "")} end rs = @shell.record_separator unless rs for f in @files - yield f+rs end end end -# class Sort < Cat -# def initialize(sh, *filenames) -# super -# end -# -# def each(rs = nil) -# ary = [] -# super{|l| ary.push l} -# for l in ary.sort! -# yield l -# end -# end -# end class AppendIO < BuiltInCommand def initialize(sh, io, filter) @@ -107,7 +107,7 @@ class Shell def input=(filter) @input.input=filter for l in @input - @io << l end end @@ -122,9 +122,9 @@ class Shell def input=(filter) begin - super ensure - @io.close end end end @@ -138,9 +138,9 @@ class Shell def each(rs = nil) to = @shell.open(@to_filename, "w") begin - super{|l| to << l; yield l} ensure - to.close end end end @@ -153,7 +153,7 @@ class Shell def each(rs = nil) while job = @jobs.shift - job.each{|l| yield l} end end end @@ -1,8 +1,8 @@ # # shell/command-controller.rb - -# $Release Version: 0.7 $ -# $Revision$ -# by Keiju ISHITSUKA([email protected]) # # -- # @@ -19,7 +19,7 @@ require "shell/builtin-command" class Shell class CommandProcessor -# include Error # # initialize of Shell and related classes. @@ -37,11 +37,11 @@ class Shell # define CommandProcessor#methods to Shell#methods and Filter#methods for m in CommandProcessor.instance_methods(false) - NoDelegateMethods - add_delegate_command_to_shell(m) end def self.method_added(id) - add_delegate_command_to_shell(id) end end @@ -50,14 +50,14 @@ class Shell # def self.run_config begin - load File.expand_path("~/.rb_shell") if ENV.key?("HOME") rescue LoadError, Errno::ENOENT rescue - print "load error: #{rc}\n" - print $!.class, ": ", $!, "\n" - for err in $@[0, [email protected] - 2] - print "\t", err, "\n" - end end end @@ -68,9 +68,9 @@ class Shell # # CommandProcessor#expand_path(path) - # path: String - # return: String - # returns the absolute path for <path> # def expand_path(path) @shell.expand_path(path) @@ -86,68 +86,68 @@ class Shell # - # # CommandProcessor#foreach(path, rs) - # path: String - # rs: String - record separator - # iterator - # Same as: - # File#foreach (when path is file) - # Dir#foreach (when path is directory) - # path is relative to pwd # def foreach(path = nil, *rs) path = "." unless path path = expand_path(path) if File.directory?(path) - Dir.foreach(path){|fn| yield fn} else - IO.foreach(path, *rs){|l| yield l} end end # # CommandProcessor#open(path, mode) - # path: String - # mode: String - # return: File or Dir - # Same as: - # File#open (when path is file) - # Dir#open (when path is directory) - # mode has an effect only when path is a file # def open(path, mode = nil, perm = 0666, &b) path = expand_path(path) if File.directory?(path) - Dir.open(path, &b) else - if @shell.umask - f = File.open(path, mode, perm) - File.chmod(perm & [email protected], path) - if block_given? - f.each(&b) - end - f - else - f = File.open(path, mode, perm, &b) - end end end # public :open # # CommandProcessor#unlink(path) - # same as: - # Dir#unlink (when path is directory) - # File#unlink (when path is file) # def unlink(path) @shell.check_point path = expand_path(path) if File.directory?(path) - Dir.unlink(path) else - IO.unlink(path) end Void.new(@shell) end @@ -155,19 +155,19 @@ class Shell # # CommandProcessor#test(command, file1, file2) # CommandProcessor#[command, file1, file2] - # command: char or String or Symbol - # file1: String - # file2: String(optional) - # return: Boolean - # same as: - # test() (when command is char or length 1 string or symbol) - # FileTest.command (others) - # example: - # sh[?e, "foo"] - # sh[:e, "foo"] - # sh["e", "foo"] - # sh[:exists?, "foo"] - # sh["exists?", "foo"] # alias top_level_test test def test(command, file1, file2=nil) @@ -177,25 +177,25 @@ class Shell case command when Integer - if file2 - top_level_test(command, file1, file2) - else - top_level_test(command, file1) - end when String - if command.size == 1 - if file2 - top_level_test(command, file1, file2) - else - top_level_test(command, file1) - end - else - if file2 - FileTest.send(command, file1, file2) - else - FileTest.send(command, file1) - end - end end end alias [] test @@ -209,8 +209,8 @@ class Shell #-- # # CommandProcessor#mkdir(*path) - # path: String - # same as Dir.mkdir() # def mkdir(*path) @shell.check_point @@ -218,59 +218,59 @@ class Shell perm = nil if path.last.kind_of?(Integer) - perm = path.pop end for dir in path - d = expand_path(dir) - if perm - Dir.mkdir(d, perm) - else - Dir.mkdir(d) - end - File.chmod(d, 0666 & [email protected]) if @shell.umask end Void.new(@shell) end # # CommandProcessor#rmdir(*path) - # path: String - # same as Dir.rmdir() # def rmdir(*path) @shell.check_point notify("rmdir #{path.join(' ')}") for dir in path - Dir.rmdir(expand_path(dir)) end Void.new(@shell) end # # CommandProcessor#system(command, *opts) - # command: String - # opts: String - # return: SystemCommand - # Same as system() function - # example: - # print sh.system("ls", "-l") - # sh.system("ls", "-l") | sh.head > STDOUT # def system(command, *opts) if opts.empty? - if command =~ /\*|\?|\{|\}|\[|\]|<|>|\(|\)|~|&|\||\\|\$|;|'|`|"|\n/ - return SystemCommand.new(@shell, find_system_command("sh"), "-c", command) - else - command, *opts = command.split(/\s+/) - end end SystemCommand.new(@shell, find_system_command(command), *opts) end # # ProcessCommand#rehash - # clear command hash table. # def rehash @system_commands = {} @@ -286,9 +286,9 @@ class Shell def transact(&block) begin - @shell.instance_eval(&block) ensure - check_point end end @@ -318,11 +318,11 @@ class Shell def append(to, filter) case to when String - AppendFile.new(@shell, to, filter) when IO - AppendIO.new(@shell, to, filter) else - Shell.Fail Error::CantApplyMethod, "append", to.class end end @@ -337,10 +337,10 @@ class Shell # %pwd, %cwd -> @pwd def notify(*opts, &block) Shell.notify(*opts) {|mes| - yield mes if iterator? - mes.gsub!("%pwd", "#{@cwd}") - mes.gsub!("%cwd", "#{@cwd}") } end @@ -351,21 +351,21 @@ class Shell return command if /^\// =~ command case path = @system_commands[command] when String - if exists?(path) - return path - else - Shell.Fail Error::CommandNotFound, command - end when false - Shell.Fail Error::CommandNotFound, command end for p in @shell.system_path - path = join(p, command) - if FileTest.exist?(path) - @system_commands[command] = path - return path - end end @system_commands[command] = false Shell.Fail Error::CommandNotFound, command @@ -373,21 +373,21 @@ class Shell # # CommandProcessor.def_system_command(command, path) - # command: String - # path: String - # define 'command()' method as method. # def self.def_system_command(command, path = command) begin - eval((d = %Q[def #{command}(*opts) - SystemCommand.new(@shell, '#{path}', *opts) end]), nil, __FILE__, __LINE__ - 1) rescue SyntaxError - Shell.notify "warn: Can't define #{command} path: #{path}." end Shell.notify "Define #{command} path: #{path}.", Shell.debug? Shell.notify("Definition of #{command}: ", d, - Shell.debug.kind_of?(Integer) && Shell.debug > 1) end def self.undef_system_command(command) @@ -411,28 +411,28 @@ class Shell ali = ali.id2name if ali.kind_of?(Symbol) command = command.id2name if command.kind_of?(Symbol) begin - if iterator? - @alias_map[ali.intern] = proc - eval((d = %Q[def #{ali}(*opts) @shell.__send__(:#{command}, *(CommandProcessor.alias_map[:#{ali}].call *opts)) - end]), nil, __FILE__, __LINE__ - 1) - else - args = opts.collect{|opt| '"' + opt + '"'}.join(",") - eval((d = %Q[def #{ali}(*opts) @shell.__send__(:#{command}, #{args}, *opts) end]), nil, __FILE__, __LINE__ - 1) - end rescue SyntaxError - Shell.notify "warn: Can't alias #{ali} command: #{command}." - Shell.notify("Definition of #{ali}: ", d) - raise end Shell.notify "Define #{ali} command: #{command}.", Shell.debug? Shell.notify("Definition of #{ali}: ", d, - Shell.debug.kind_of?(Integer) && Shell.debug > 1) self end @@ -444,43 +444,43 @@ class Shell # # CommandProcessor.def_builtin_commands(delegation_class, command_specs) - # delegation_class: Class or Module - # command_specs: [[command_name, [argument,...]],...] - # command_name: String - # arguments: String - # FILENAME?? -> expand_path(filename??) - # *FILENAME?? -> filename??.collect{|f|expand_path(f)}.join(", ") - # define command_name(argument,...) as - # delegation_class.command_name(argument,...) # def self.def_builtin_commands(delegation_class, command_specs) for meth, args in command_specs - arg_str = args.collect{|arg| arg.downcase}.join(", ") - call_arg_str = args.collect{ - |arg| - case arg - when /^(FILENAME.*)$/ - format("expand_path(%s)", $1.downcase) - when /^(\*FILENAME.*)$/ - # \*FILENAME* -> filenames.collect{|fn| expand_path(fn)}.join(", ") - $1.downcase + '.collect{|fn| expand_path(fn)}' - else - arg - end - }.join(", ") - d = %Q[def #{meth}(#{arg_str}) - #{delegation_class}.#{meth}(#{call_arg_str}) - end] - Shell.notify "Define #{meth}(#{arg_str})", Shell.debug? - Shell.notify("Definition of #{meth}: ", d, - Shell.debug.kind_of?(Integer) && Shell.debug > 1) - eval d end end # # CommandProcessor.install_system_commands(pre) - # pre: String - command name prefix # defines every command which belongs in default_system_path via # CommandProcessor.command(). It doesn't define already defined # methods twice. By default, "pre_" is prefixes to each method @@ -490,24 +490,24 @@ class Shell def self.install_system_commands(pre = "sys_") defined_meth = {} for m in Shell.methods - defined_meth[m] = true end sh = Shell.new for path in Shell.default_system_path - next unless sh.directory? path - sh.cd path - sh.foreach do - |cn| - if !defined_meth[pre + cn] && sh.file?(cn) && sh.executable?(cn) - command = (pre + cn).gsub(/\W/, "_").sub(/^([0-9])/, '_\1') - begin - def_system_command(command, sh.expand_path(cn)) - rescue - Shell.notify "warn: Can't define #{command} path: #{cn}" - end - defined_meth[command] = command - end - end end end @@ -520,35 +520,35 @@ class Shell id = id.intern if id.kind_of?(String) name = id.id2name if Shell.method_defined?(id) - Shell.notify "warn: override definition of Shell##{name}." - Shell.notify "warn: alias Shell##{name} to Shell##{name}_org.\n" - Shell.module_eval "alias #{name}_org #{name}" end Shell.notify "method added: Shell##{name}.", Shell.debug? Shell.module_eval(%Q[def #{name}(*args, &block) - begin - @command_processor.__send__(:#{name}, *args, &block) - rescue Exception - [email protected]_if{|s| /:in `__getobj__'$/ =~ s} #` - [email protected]_if{|s| /^\\(eval\\):/ =~ s} - raise - end end], __FILE__, __LINE__) - if Shell::Filter.method_defined?(id) - Shell.notify "warn: override definition of Shell::Filter##{name}." - Shell.notify "warn: alias Shell##{name} to Shell::Filter##{name}_org." - Filter.module_eval "alias #{name}_org #{name}" - end - Shell.notify "method added: Shell::Filter##{name}.", Shell.debug? - Filter.module_eval(%Q[def #{name}(*args, &block) - begin - self | @shell.__send__(:#{name}, *args, &block) - rescue Exception - [email protected]_if{|s| /:in `__getobj__'$/ =~ s} #` - [email protected]_if{|s| /^\\(eval\\):/ =~ s} - raise - end end], __FILE__, __LINE__) end @@ -557,35 +557,35 @@ class Shell # def self.install_builtin_commands # method related File. - # (exclude open/foreach/unlink) normal_delegation_file_methods = [ - ["atime", ["FILENAME"]], - ["basename", ["fn", "*opts"]], - ["chmod", ["mode", "*FILENAMES"]], - ["chown", ["owner", "group", "*FILENAME"]], - ["ctime", ["FILENAMES"]], - ["delete", ["*FILENAMES"]], - ["dirname", ["FILENAME"]], - ["ftype", ["FILENAME"]], - ["join", ["*items"]], - ["link", ["FILENAME_O", "FILENAME_N"]], - ["lstat", ["FILENAME"]], - ["mtime", ["FILENAME"]], - ["readlink", ["FILENAME"]], - ["rename", ["FILENAME_FROM", "FILENAME_TO"]], - # ["size", ["FILENAME"]], - ["split", ["pathname"]], - ["stat", ["FILENAME"]], - ["symlink", ["FILENAME_O", "FILENAME_N"]], - ["truncate", ["FILENAME", "length"]], - ["utime", ["atime", "mtime", "*FILENAMES"]]] - - def_builtin_commands(File, normal_delegation_file_methods) - alias_method :rm, :delete - - # method related FileTest - def_builtin_commands(FileTest, - FileTest.singleton_methods(false).collect{|m| [m, ["FILENAME"]]}) end @@ -1,8 +1,8 @@ # # shell/error.rb - -# $Release Version: 0.7 $ -# $Revision$ -# by Keiju ISHITSUKA([email protected]) # # -- # @@ -1,8 +1,8 @@ # # shell/filter.rb - -# $Release Version: 0.7 $ -# $Revision$ -# by Keiju ISHITSUKA([email protected]) # # -- # @@ -19,8 +19,8 @@ class Shell include Enumerable def initialize(sh) - @shell = sh # parent shell - @input = nil # input filter end attr_reader :input @@ -32,52 +32,52 @@ class Shell def each(rs = nil) rs = @shell.record_separator unless rs if @input - @input.each(rs){|l| yield l} end end def < (src) case src when String - cat = Cat.new(@shell, src) - cat | self when IO - self.input = src - self else - Shell.Fail Error::CantApplyMethod, "<", to.class end end def > (to) case to when String - dst = @shell.open(to, "w") - begin - each(){|l| dst << l} - ensure - dst.close - end when IO - each(){|l| to << l} else - Shell.Fail Error::CantApplyMethod, ">", to.class end self end def >> (to) begin - Shell.cd(@shell.pwd).append(to, self) rescue CantApplyMethod - Shell.Fail Error::CantApplyMethod, ">>", to.class end end def | (filter) filter.input = self if active? - @shell.process_controller.start_job filter end filter end @@ -100,9 +100,9 @@ class Shell def inspect if @shell.debug.kind_of?(Integer) && @shell.debug > 2 - super else - to_s end end end @@ -1,8 +1,8 @@ # # shell/process-controller.rb - -# $Release Version: 0.7 $ -# $Revision$ -# by Keiju ISHITSUKA([email protected]) # # -- # @@ -27,60 +27,60 @@ class Shell extend Forwardable def_delegator("@ProcessControllersMonitor", - "synchronize", "process_controllers_exclusive") def active_process_controllers - process_controllers_exclusive do - @ProcessControllers.dup - end end def activate(pc) - process_controllers_exclusive do - @ProcessControllers[pc] ||= 0 - @ProcessControllers[pc] += 1 - end end def inactivate(pc) - process_controllers_exclusive do - if @ProcessControllers[pc] - if (@ProcessControllers[pc] -= 1) == 0 - @ProcessControllers.delete(pc) - @ProcessControllersCV.signal - end - end - end end def each_active_object - process_controllers_exclusive do - for ref in @ProcessControllers.keys - yield ref - end - end end def block_output_synchronize(&b) - @BlockOutputMonitor.synchronize(&b) end def wait_to_finish_all_process_controllers - process_controllers_exclusive do - while [email protected]? - Shell::notify("Process finishing, but active shell exists", - "You can use Shell#transact or Shell#check_point for more safe execution.") - if Shell.debug? - for pc in @ProcessControllers.keys - Shell::notify(" Not finished jobs in "+pc.shell.to_s) - for com in pc.jobs - com.notify(" Jobs: %id") - end - end - end - @ProcessControllersCV.wait(@ProcessControllersMonitor) - end - end end end @@ -105,8 +105,8 @@ class Shell def jobs jobs = [] @jobs_sync.synchronize(:SH) do - jobs.concat @waiting_jobs - jobs.concat @active_jobs end jobs end @@ -121,115 +121,115 @@ class Shell def jobs_exist? @jobs_sync.synchronize(:SH) do - @active_jobs.empty? or @waiting_jobs.empty? end end def active_jobs_exist? @jobs_sync.synchronize(:SH) do - @active_jobs.empty? end end def waiting_jobs_exist? @jobs_sync.synchronize(:SH) do - @waiting_jobs.empty? end end # schedule a command def add_schedule(command) @jobs_sync.synchronize(:EX) do - ProcessController.activate(self) - if @active_jobs.empty? - start_job command - else - @waiting_jobs.push(command) - end end end # start a job def start_job(command = nil) @jobs_sync.synchronize(:EX) do - if command - return if command.active? - @waiting_jobs.delete command - else - command = @waiting_jobs.shift -# command.notify "job(%id) pre-start.", @shell.debug? - - return unless command - end - @active_jobs.push command - command.start -# command.notify "job(%id) post-start.", @shell.debug? - - # start all jobs that input from the job - for job in @waiting_jobs.dup - start_job(job) if job.input == command - end -# command.notify "job(%id) post2-start.", @shell.debug? end end def waiting_job?(job) @jobs_sync.synchronize(:SH) do - @waiting_jobs.include?(job) end end def active_job?(job) @jobs_sync.synchronize(:SH) do - @active_jobs.include?(job) end end # terminate a job def terminate_job(command) @jobs_sync.synchronize(:EX) do - @active_jobs.delete command - ProcessController.inactivate(self) - if @active_jobs.empty? - command.notify("start_job in terminate_job(%id)", Shell::debug?) - start_job - end end end # kill a job def kill_job(sig, command) @jobs_sync.synchronize(:EX) do - if @waiting_jobs.delete command - ProcessController.inactivate(self) - return - elsif @active_jobs.include?(command) - begin - r = command.kill(sig) - ProcessController.inactivate(self) - rescue - print "Shell: Warn: $!\n" if @shell.verbose? - return nil - end - @active_jobs.delete command - r - end end end # wait for all jobs to terminate def wait_all_jobs_execution @job_monitor.synchronize do - begin - while !jobs.empty? - @job_condition.wait(@job_monitor) - for job in jobs - job.notify("waiting job(%id)", Shell::debug?) - end - end - ensure - redo unless jobs.empty? - end end end @@ -244,73 +244,73 @@ class Shell pid_cv = ConditionVariable.new Thread.start do - ProcessController.block_output_synchronize do - STDOUT.flush - ProcessController.each_active_object do |pc| - for jobs in pc.active_jobs - jobs.flush - end - end - - pid = fork { - Thread.list.each do |th| -# th.kill unless [Thread.main, Thread.current].include?(th) - th.kill unless Thread.current == th - end - - STDIN.reopen(pipe_peer_in) - STDOUT.reopen(pipe_peer_out) - - ObjectSpace.each_object(IO) do |io| - if ![STDIN, STDOUT, STDERR].include?(io) - io.close unless io.closed? - end - end - - yield - } - end - pid_cv.signal - - pipe_peer_in.close - pipe_peer_out.close - command.notify "job(%name:##{pid}) start", @shell.debug? - - begin - _pid = nil - command.notify("job(%id) start to waiting finish.", @shell.debug?) - _pid = Process.waitpid(pid, nil) - rescue Errno::ECHILD - command.notify "warn: job(%id) was done already waitpid." - _pid = true - # rescue - # STDERR.puts $! - ensure - command.notify("Job(%id): Wait to finish when Process finished.", @shell.debug?) - # when the process ends, wait until the command terminates - if USING_AT_EXIT_WHEN_PROCESS_EXIT or _pid - else - command.notify("notice: Process finishing...", - "wait for Job[%id] to finish.", - "You can use Shell#transact or Shell#check_point for more safe execution.") - redo - end - -# command.notify "job(%id) pre-pre-finish.", @shell.debug? - @job_monitor.synchronize do -# command.notify "job(%id) pre-finish.", @shell.debug? - terminate_job(command) -# command.notify "job(%id) pre-finish2.", @shell.debug? - @job_condition.signal - command.notify "job(%id) finish.", @shell.debug? - end - end end pid_mutex.synchronize do - while !pid - pid_cv.wait(pid_mutex) - end end return pid, pipe_me_in, pipe_me_out @@ -1,8 +1,8 @@ # # shell/system-command.rb - -# $Release Version: 0.7 $ -# $Revision$ -# by Keiju ISHITSUKA([email protected]) # # -- # @@ -15,7 +15,7 @@ class Shell class SystemCommand < Filter def initialize(sh, command, *opts) if t = opts.find{|opt| !opt.kind_of?(String) && opt.class} - Shell.Fail Error::TypeError, t.class, "String" end super(sh) @command = command @@ -41,7 +41,7 @@ class Shell def input=(inp) super if active? - start_export end end @@ -49,12 +49,12 @@ class Shell notify([@command, *@opts].join(" ")) @pid, @pipe_in, @pipe_out = @shell.process_controller.sfork(self) { - Dir.chdir @shell.pwd - $0 = @command - exec(@command, *@opts) } if @input - start_export end start_import end @@ -65,18 +65,18 @@ class Shell def terminate begin - @pipe_in.close rescue IOError end begin - @pipe_out.close rescue IOError end end def kill(sig) if @pid - Process.kill(sig, @pid) end end @@ -85,24 +85,24 @@ class Shell rs = @shell.record_separator unless rs _eop = true Thread.start { - begin - while l = @pipe_in.gets - @input_queue.push l - end - _eop = false - rescue Errno::EPIPE - _eop = false - ensure - if !ProcessController::USING_AT_EXIT_WHEN_PROCESS_EXIT and _eop - notify("warn: Process finishing...", - "wait for Job[%id] to finish pipe importing.", - "You can use Shell#transact or Shell#check_point for more safe execution.") - redo - end - notify "job(%id}) close imp-pipe.", @shell.debug? - @input_queue.push :EOF - @pipe_in.close - end } end @@ -110,49 +110,49 @@ class Shell notify "job(%id) start exp-pipe.", @shell.debug? _eop = true Thread.start{ - begin - @input.each do |l| - ProcessController::block_output_synchronize do - @pipe_out.print l - end - end - _eop = false - rescue Errno::EPIPE, Errno::EIO - _eop = false - ensure - if !ProcessController::USING_AT_EXIT_WHEN_PROCESS_EXIT and _eop - notify("shell: warn: Process finishing...", - "wait for Job(%id) to finish pipe exporting.", - "You can use Shell#transact or Shell#check_point for more safe execution.") - redo - end - notify "job(%id) close exp-pipe.", @shell.debug? - @pipe_out.close - end } end alias super_each each def each(rs = nil) while (l = @input_queue.pop) != :EOF - yield l end end # ex) # if you wish to output: - # "shell: job(#{@command}:#{@pid}) close pipe-out." - # then - # mes: "job(%id) close pipe-out." # yorn: Boolean(@shell.debug? or @shell.verbose?) def notify(*opts, &block) @shell.notify(*opts) do |mes| - yield mes if iterator? - mes.gsub!("%id", "#{@command}:##{@pid}") - mes.gsub!("%name", "#{@command}") - mes.gsub!("%pid", "#{@pid}") - mes end end end @@ -1,8 +1,8 @@ # # version.rb - shell version definition file -# $Release Version: 0.7$ -# $Revision$ -# by Keiju ISHITSUKA([email protected]) # # -- # |