Rakefile in travis-1.4.0 vs Rakefile in travis-1.5.0

- old
+ new

@@ -4,11 +4,11 @@ desc "run specs" task(:spec) { ruby "-S rspec spec#{" -c" unless windows}" } desc "generate gemspec, update readme" -task 'update' do +task :update => :completion do require 'travis/version' content = File.read('travis.gemspec') # fetch data fields = { @@ -36,12 +36,86 @@ content.gsub!(/./) { |c| c.bytesize > 1 ? "\\u{#{c.codepoints.first.to_s(16)}}" : c } File.open('travis.gemspec', 'w') { |f| f << content } readme = File.read('README.md').b - readme.gsub! /^(\s+\$ travis verision\n\s+).*$/, "\\1#{Travis::VERSION}" + readme.gsub! /^(\s+\$ travis version\n\s+).*$/, "\\1#{Travis::VERSION}" readme.gsub! /(gem install travis -v )\S+/, "\\1#{Travis::VERSION}" File.write('README.md', readme) +end + +task :completion do + require 'travis/cli' + commands = Travis::CLI.commands.sort_by { |c| c.command_name } + names = commands.map(&:command_name).join("\n") + options = commands.map do |command| + flags = command.new.parser.candidate("-").flat_map do |option| + next option unless option.start_with?('--[no-]') + [option.sub('[no-]', ''), option.sub('[no-]', 'no-')] + end.join("\n") + + case command.command_name + when "setup" + completions = command.public_instance_methods. + select { |m| m.to_s.start_with? "setup_" }. + map { |m| m.to_s.sub('setup_', '') + "\n" }.join << flags + when "help" + completions = "#{names}\n#{flags}" + else + completions = flags + end + + <<-SHELL + #{command.command_name}) + completions="#{completions}" + ;; + SHELL + end.join("\n") + + zsh = <<-SHELL + _travis_complete() { + local words completions + read -cA words + if [ "${#words}" -eq 2 ]; then + completions="#{names}" + else + case "${words[2]}" in + #{options} + esac + fi + reply=("${(ps:\n:)completions}") + } + + compctl -K _travis_complete travis + SHELL + + bash = <<-SHELL + _travis_complete() { + COMPREPLY=() + local completions + if [ "$COMP_CWORD" -eq 1 ]; then + completions="#{names}" + else + case "${COMP_WORDS[1]}" in + #{options} + esac + fi + COMPREPLY=( $(compgen -W "$completions" -- "${COMP_WORDS[COMP_CWORD]}") ) + } + + complete -F _travis_complete travis + SHELL + + File.write('completion/travis.sh', <<-SHELL.gsub(/^\s+/, '')) + # This file is generated by `rake completion` + if [ -n "$BASH_VERSION" ]; then + #{bash} + fi + + if [ -n "$ZSH_VERSION" ]; then + #{zsh} + fi + SHELL end task 'travis.gemspec' => :update task 'README.md' => :update \ No newline at end of file