#!/usr/bin/ruby # Provide git credentials using Boxen's config. unless command = ARGV[0] this = File.basename $0 abort "Usage: #{this} " end require "pathname" # It's a UTF-8, UTF-8, UTF-8 world. Encoding.default_external = Encoding::UTF_8 # Put us where we belong, in the root dir of our boxen repo. Dir.chdir Pathname.new(__FILE__).realpath + "../.." # 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 input = $stdin.read attrs = Hash[input.split($/).map { |l| l.split("=") }] # find GitHub or GitHub Enterprise host ghhost = URI(config.ghurl).host 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 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