my-boxen/script/boxen-git-credential

50 lines
1.2 KiB
Text
Raw Normal View History

#!/usr/bin/ruby
# Provide git credentials using Boxen's config.
2013-02-14 21:11:12 -05:00
unless command = ARGV[0]
this = File.basename $0
abort "Usage: #{this} <get|store|erase>"
end
require "pathname"
# Put us where we belong, in the root dir of our boxen repo.
Dir.chdir Pathname.new(__FILE__).realpath + "../.."
2012-12-06 19:02:49 -05:00
# Because we can be called from inside other Ruby processes, unset any
# `BUNDLE_` environment variables.
ENV.keys.select { |k| /^BUNDLE_/i }.each { |k| ENV.delete k }
# Set up our local configuration, deps, and load path.
load "config/basic.rb"
require "boxen/config"
config = Boxen::Config.load
2013-02-14 21:11:12 -05:00
input = $stdin.read
attrs = Hash[input.split($/).map { |l| l.split("=") }]
# find GitHub or GitHub Enterprise host
ghhost = URI(config.ghurl).host
2013-02-14 21:11:12 -05:00
host_exp = Regexp.new "(^|\.)" + Regexp.escape(ghhost)
if command == "get" && host_exp.match(attrs["host"])
puts "username=#{config.token}"
puts "password=x-oauth-basic"
else
2013-02-14 21:11:12 -05:00
require "open4"
fallback = ENV["BOXEN_GIT_CREDENTIAL_FALLBACK"]
fallback ||= "#{config.homedir}/homebrew/bin/git-credential-osxkeychain"
status = Open4.popen4 fallback, *ARGV do |pid, stdin, stdout, stderr|
stdin.write input
stdin.puts
$stdout.write stdout.read
end
exit status.exitstatus
end