lib/travis/cli/logs.rb in travis-1.6.15.travis.559.6 vs lib/travis/cli/logs.rb in travis-1.6.15.travis.560.6

- old
+ new

@@ -3,34 +3,58 @@ require 'travis/tools/system' module Travis module CLI class Logs < RepoCommand + attr_accessor :delete, :reason description "streams test logs" + on('-d', '--delete [REASON]', 'remove logs') { |c, reason| c.delete, c.reason = true, reason } + on('-f', '--force', 'do not ask user to confirm deleting the logs') + on('--[no-]stream', 'only print current logs, do not stream') def setup super check_websocket end include Tools::SafeString def run(number = last_build.number) + self.stream = true if stream.nil? job ||= job(number) || error("no such job ##{number}") + delete ? delete_log(job) : display_log(job) + end + + def delete_log(job) + unless force? + error "not deleting logs without --force" unless interactive? + error "aborted" unless danger_zone? "Do you really want to delete the build log for #{color(job.inspect_info, :underline)}?" + end + + warn "deleting log for #{color(job.inspect_info, [:bold, :info])}" + job.delete_log(reason || {}) + end + + def display_log(job) info "displaying logs for #{color(job.inspect_info, [:bold, :info])}" - job.log.body { |part| print interactive? ? encoded(part) : clean(part) } + return print_log(job.log.body) unless stream? + job.log.body { |part| print_log(part) } end + def print_log(part) + print interactive? ? encoded(part) : clean(part) + end + private def job(number) number = last_build.number + number if number.start_with? '.' job = super(number) || build(number) || branch(number) job = job.jobs.first if job.respond_to? :jobs job end def check_websocket - require 'websocket-native' + require 'websocket-native' if stream? rescue LoadError => e raise e if e.respond_to?(:path) and e.path != 'websocket-native' info "speed up log streaming by installing the websocket-native gem" end end \ No newline at end of file