lib/travis/cli/repo_command.rb in travis-1.11.1 vs lib/travis/cli/repo_command.rb in travis-1.12.0
- old
+ new
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
require 'travis/cli'
require 'yaml'
module Travis
module CLI
@@ -7,24 +9,27 @@
GIT_REGEX = %r{/?(.*/.+?)(\.git)?$}
TRAVIS = %r{^https://(staging-)?api\.travis-ci\.(org|com)}
on('-g', '--github-token TOKEN', 'identify by GitHub token')
on('-r', '--repo SLUG', 'repository to use (will try to detect from current git clone)') do |c, slug|
c.slug = slug
- c.error "SLUG should be of the form OWNER/REPO" unless slug.split('/').compact.size == 2
+ c.error 'SLUG should be of the form OWNER/REPO' unless slug.split('/').compact.size == 2
end
on('-R', '--store-repo SLUG', 'like --repo, but remembers value for current directory') do |c, slug|
c.slug = slug
c.send(:store_slug, slug)
end
attr_accessor :slug
+
abstract
def setup
setup_enterprise
- error "Can't figure out GitHub repo name. Ensure you're in the repo directory, or specify the repo name via the -r option (e.g. travis <command> -r <owner>/<repo>)" unless self.slug ||= find_slug
- error "GitHub repo name is invalid, it should be of the form 'owner/repo'" unless self.slug.include?("/")
+ unless self.slug ||= find_slug
+ error "Can't figure out GitHub repo name. Ensure you're in the repo directory, or specify the repo name via the -r option (e.g. travis <command> -r <owner>/<repo>)"
+ end
+ error "GitHub repo name is invalid, it should be of the form 'owner/repo'" unless self.slug.include?('/')
self.api_endpoint = detect_api_endpoint
super
repository.load # makes sure we actually have access to the repo
end
@@ -34,142 +39,148 @@
error "repository not known to #{api_endpoint}: #{color(slug, :important)}"
end
private
- def build(number_or_id)
- return super if number_or_id.is_a? Integer
- repository.build(number_or_id)
- end
+ def build(number_or_id)
+ return super if number_or_id.is_a? Integer
- def job(number_or_id)
- return super if number_or_id.is_a? Integer
- repository.job(number_or_id)
- end
+ repository.build(number_or_id)
+ end
- def branch(name)
- repository.branch(name)
- end
+ def job(number_or_id)
+ return super if number_or_id.is_a? Integer
- def last_build
- repository.last_build or error("no build yet for #{slug}")
- end
+ repository.job(number_or_id)
+ end
- def detected_endpoint?
- !explicit_api_endpoint?
- end
+ def branch(name)
+ repository.branch(name)
+ end
- def find_slug
- load_slug || begin
- slug = detect_slug
- interactive? ? store_slug(slug) : slug if slug
- end
- end
+ def last_build
+ repository.last_build or error("no build yet for #{slug}")
+ end
- def detect_slug
- git_head = `git name-rev --name-only HEAD 2>#{IO::NULL}`.chomp
- git_remote = `git config --get branch.#{git_head}.remote 2>#{IO::NULL}`.chomp
- git_remote = 'origin' if git_remote.empty?
- git_info = `git ls-remote --get-url #{git_remote} 2>#{IO::NULL}`.chomp
+ def detected_endpoint?
+ !explicit_api_endpoint?
+ end
- if parse_remote(git_info) =~ GIT_REGEX
- detected_slug = $1
- if interactive?
- if agree("Detected repository as #{color(detected_slug, :info)}, is this correct? ") { |q| q.default = 'yes' }
- detected_slug
- else
- ask("Repository slug (owner/name): ") { |q| q.default = detected_slug }
- end
- else
- info "detected repository as #{color(detected_slug, :bold)}"
- detected_slug
- end
+ def find_slug
+ load_slug || begin
+ slug = detect_slug
+ if slug
+ interactive? ? store_slug(slug) : slug
end
end
+ end
- def parse_remote(url)
- if url =~ /^git@[^:]+:/
- path = url.split(':').last
- path = "/#{path}" unless path.start_with?('/')
- path
+ def detect_slug
+ git_head = `git name-rev --name-only HEAD 2>#{IO::NULL}`.chomp
+ git_remote = `git config --get branch.#{git_head}.remote 2>#{IO::NULL}`.chomp
+ git_remote = 'origin' if git_remote.empty?
+ git_info = `git ls-remote --get-url #{git_remote} 2>#{IO::NULL}`.chomp
+
+ return unless parse_remote(git_info) =~ GIT_REGEX
+
+ detected_slug = ::Regexp.last_match(1)
+ if interactive?
+ if agree("Detected repository as #{color(detected_slug, :info)}, is this correct? ") do |q|
+ q.default = 'yes'
+ end
+ detected_slug
else
- URI.parse(url).path
+ ask('Repository slug (owner/name): ') { |q| q.default = detected_slug }
end
+ else
+ info "detected repository as #{color(detected_slug, :bold)}"
+ detected_slug
end
+ end
- def load_slug
- stored = `git config --get travis.slug`.chomp
- stored unless stored.empty?
+ def parse_remote(url)
+ if url =~ /^git@[^:]+:/
+ path = url.split(':').last
+ path = "/#{path}" unless path.start_with?('/')
+ path
+ else
+ URI.parse(url).path
end
+ end
- def store_slug(value)
- `git config travis.slug #{value}` if value
- value
- end
+ def load_slug
+ stored = `git config --get travis.slug`.chomp
+ stored unless stored.empty?
+ end
- def repo_config
- config['repos'] ||= {}
- config['repos'][slug] ||= {}
- end
+ def store_slug(value)
+ `git config travis.slug #{value}` if value
+ value
+ end
- def detect_api_endpoint
- if explicit_api_endpoint? or enterprise?
- repo_config['endpoint'] = api_endpoint
- elsif ENV['TRAVIS_ENDPOINT']
- ENV['TRAVIS_ENDPOINT']
- elsif config['default_endpoint'] and config['default_endpoint'] !~ TRAVIS
- repo_config['endpoint'] ||= config['default_endpoint']
- else
- repo_config['endpoint'] ||= begin
- load_gh
- GH.head("/repos/#{slug}")
- Travis::Client::ORG_URI
- rescue GH::Error
- Travis::Client::COM_URI
- end
- end
- end
+ def repo_config
+ config['repos'] ||= {}
+ config['repos'][slug] ||= {}
+ end
- def travis_config
- @travis_config ||= begin
- payload = YAML.load_file(travis_yaml)
- payload.respond_to?(:to_hash) ? payload.to_hash : {}
+ def detect_api_endpoint
+ if explicit_api_endpoint? || enterprise?
+ repo_config['endpoint'] = api_endpoint
+ elsif ENV['TRAVIS_ENDPOINT']
+ ENV['TRAVIS_ENDPOINT']
+ elsif config['default_endpoint'] && config['default_endpoint'] !~ (TRAVIS)
+ repo_config['endpoint'] ||= config['default_endpoint']
+ else
+ repo_config['endpoint'] ||= begin
+ load_gh
+ GH.head("/repos/#{slug}")
+ Travis::Client::ORG_URI
+ rescue GH::Error
+ Travis::Client::COM_URI
end
end
+ end
- def travis_yaml(dir = Dir.pwd)
- path = File.expand_path('.travis.yml', dir)
- if File.exist? path
- path
- else
- parent = File.expand_path('..', dir)
- error "no .travis.yml found" if parent == dir
- travis_yaml(parent)
- end
+ def travis_config
+ @travis_config ||= begin
+ payload = YAML.load_file(travis_yaml)
+ payload.respond_to?(:to_hash) ? payload.to_hash : {}
end
+ end
- def confirm_and_save_travis_config(confirm = true, file = travis_yaml)
- if confirm
- ans = ask [
- nil,
- color("Overwrite the config file #{travis_yaml} with the content below?", [:info, :yellow]),
- color("This reformats the existing file.", [:info, :red]),
- travis_config.to_yaml,
- color("(y/N)", [:info, :yellow])
- ].join("\n\n")
- proceed = ans =~ /^y/i
- else
- proceed = true
- end
-
- save_travis_config if proceed
+ def travis_yaml(dir = Dir.pwd)
+ path = File.expand_path('.travis.yml', dir)
+ if File.exist? path
+ path
+ else
+ parent = File.expand_path('..', dir)
+ error 'no .travis.yml found' if parent == dir
+ travis_yaml(parent)
end
+ end
- def save_travis_config(file = travis_yaml)
- yaml = travis_config.to_yaml
- yaml.gsub! /^(\s+)('on'|true):/, "\\1on:"
- yaml.gsub! /\A---\s*\n/, ''
- File.write(file, yaml)
+ def confirm_and_save_travis_config(confirm = true, _file = travis_yaml)
+ if confirm
+ ans = ask [
+ nil,
+ color("Overwrite the config file #{travis_yaml} with the content below?", %i[info yellow]),
+ color('This reformats the existing file.', %i[info red]),
+ travis_config.to_yaml,
+ color('(y/N)', %i[info yellow])
+ ].join("\n\n")
+ proceed = ans =~ /^y/i
+ else
+ proceed = true
end
+
+ save_travis_config if proceed
+ end
+
+ def save_travis_config(file = travis_yaml)
+ yaml = travis_config.to_yaml
+ yaml.gsub!(/^(\s+)('on'|true):/, '\\1on:')
+ yaml.gsub!(/\A---\s*\n/, '')
+ File.write(file, yaml)
+ end
end
end
end