From 77611bafb1dfc68e9cd59fb21163aefa53fccf2c Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 4 Apr 2016 11:46:33 +0100 Subject: [PATCH] Make Homebrew user agent consistent, use a slash. Generally it seems user agents are all `software/version` but ours is not. Also, set the user agent in a way that it's shared between Bash and Ruby code. Closes https://github.com/Homebrew/legacy-homebrew/pull/50480. --- Library/Homebrew/cmd/update.sh | 2 +- Library/Homebrew/global.rb | 3 ++- Library/Homebrew/os.rb | 4 ++-- Library/Homebrew/os/mac.rb | 2 +- Library/Homebrew/utils.rb | 11 +++------ Library/brew.sh | 44 +++++++++++++++++++++++++++++++--- 6 files changed, 50 insertions(+), 16 deletions(-) diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh index 49dcb5038d..d6ce41b006 100644 --- a/Library/Homebrew/cmd/update.sh +++ b/Library/Homebrew/cmd/update.sh @@ -306,7 +306,7 @@ EOS # (so the API does not return 304: unmodified). UPSTREAM_SHA_HTTP_CODE="$(curl --silent '--max-time' 3 \ --output /dev/null --write-out "%{http_code}" \ - --user-agent "Homebrew $HOMEBREW_VERSION" \ + --user-agent "$HOMEBREW_USER_AGENT_CURL" \ --header "Accept: application/vnd.github.chitauri-preview+sha" \ --header "If-None-Match: \"$UPSTREAM_BRANCH_LOCAL_SHA\"" \ "https://api.github.com/repos/$UPSTREAM_REPOSITORY/commits/$UPSTREAM_BRANCH")" diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index cd0baf742a..e6b7f7e5d2 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -26,7 +26,8 @@ else end RUBY_BIN = RUBY_PATH.dirname -HOMEBREW_USER_AGENT = "Homebrew #{HOMEBREW_VERSION} (Ruby #{RUBY_VERSION}-#{RUBY_PATCHLEVEL}; #{OS_VERSION})" +HOMEBREW_USER_AGENT_CURL = ENV["HOMEBREW_USER_AGENT_CURL"] +HOMEBREW_USER_AGENT_RUBY = "#{ENV["HOMEBREW_USER_AGENT"]} ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" HOMEBREW_CURL_ARGS = "-f#LA" diff --git a/Library/Homebrew/os.rb b/Library/Homebrew/os.rb index 1b8ed7b8ec..b0d685fa4d 100644 --- a/Library/Homebrew/os.rb +++ b/Library/Homebrew/os.rb @@ -7,6 +7,8 @@ module OS /linux/i === RUBY_PLATFORM end + ::OS_VERSION = ENV["HOMEBREW_OS_VERSION"] + if OS.mac? require "os/mac" ISSUES_URL = "https://git.io/brew-troubleshooting" @@ -14,13 +16,11 @@ module OS # compatibility ::MACOS_FULL_VERSION = OS::Mac.full_version.to_s ::MACOS_VERSION = OS::Mac.version.to_s - ::OS_VERSION = "OS X #{MACOS_FULL_VERSION}" elsif OS.linux? ISSUES_URL = "https://github.com/Homebrew/linuxbrew/wiki/troubleshooting" PATH_OPEN = "xdg-open" # compatibility ::MACOS_FULL_VERSION = ::MACOS_VERSION = "0" - ::OS_VERSION = RUBY_PLATFORM else raise "Unknown operating system" end diff --git a/Library/Homebrew/os/mac.rb b/Library/Homebrew/os/mac.rb index af27911ebb..fcaaf27233 100644 --- a/Library/Homebrew/os/mac.rb +++ b/Library/Homebrew/os/mac.rb @@ -21,7 +21,7 @@ module OS # This can be compared to numerics, strings, or symbols # using the standard Ruby Comparable methods. def full_version - @full_version ||= Version.new(`/usr/bin/sw_vers -productVersion`.chomp) + @full_version ||= Version.new(ENV["HOMEBREW_OSX_VERSION"].chomp) end def prerelease? diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 509a5ff206..f5fb738e73 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -309,18 +309,13 @@ def quiet_system(cmd, *args) end def curl(*args) - brewed_curl = HOMEBREW_PREFIX/"opt/curl/bin/curl" - curl = if MacOS.version <= "10.8" && brewed_curl.exist? - brewed_curl - else - Pathname.new "/usr/bin/curl" - end + curl = Pathname.new ENV["HOMEBREW_CURL"] raise "#{curl} is not executable" unless curl.exist? && curl.executable? flags = HOMEBREW_CURL_ARGS flags = flags.delete("#") if ARGV.verbose? - args = [flags, HOMEBREW_USER_AGENT, *args] + args = [flags, HOMEBREW_USER_AGENT_CURL, *args] args << "--verbose" if ENV["HOMEBREW_CURL_VERBOSE"] args << "--silent" if !$stdout.tty? || ENV["TRAVIS"] @@ -594,7 +589,7 @@ module GitHub def api_headers { - "User-Agent" => HOMEBREW_USER_AGENT, + "User-Agent" => HOMEBREW_USER_AGENT_RUBY, "Accept" => "application/vnd.github.v3+json" } end diff --git a/Library/brew.sh b/Library/brew.sh index db575c4072..eb6c19a97d 100644 --- a/Library/brew.sh +++ b/Library/brew.sh @@ -57,9 +57,13 @@ then unset HOMEBREW_RUBY_PATH fi -if [[ "$(uname -s)" = "Darwin" ]] +HOMEBREW_SYSTEM="$(uname -s)" +if [[ "$HOMEBREW_SYSTEM" = "Darwin" ]] then HOMEBREW_OSX="1" +elif [[ "$HOMEBREW_SYSTEM" = "Linux" ]] +then + HOMEBREW_LINUX="1" fi if [[ -z "$HOMEBREW_RUBY_PATH" ]] @@ -72,13 +76,47 @@ then fi fi -export HOMEBREW_VERSION +HOMEBREW_CURL="/usr/bin/curl" +HOMEBREW_PROCESSOR="$(uname -p)" +if [[ -n "$HOMEBREW_OSX" ]] +then + HOMEBREW_PRODUCT="Homebrew" + HOMEBREW_SYSTEM="Macintosh" + # This is i386 even on x86_64 machines + [[ "$HOMEBREW_PROCESSOR" = "i386" ]] && HOMEBREW_PROCESSOR="Intel" + HOMEBREW_OSX_VERSION="$(/usr/bin/sw_vers -productVersion)" + HOMEBREW_OS_VERSION="Mac OS X $HOMEBREW_OSX_VERSION" + + HOMEBREW_OSX_VERSION_NUMERIC="$(printf "%02d%02d%02d" $(echo "${HOMEBREW_OSX_VERSION//./ }"))" + if [[ "$HOMEBREW_OSX_VERSION_NUMERIC" -lt "100900" && + -x "$HOMEBREW_PREFIX/opt/curl/bin/curl" ]] + then + HOMEBREW_CURL="$HOMEBREW_PREFIX/opt/curl/bin/curl" + fi +else + HOMEBREW_PRODUCT="${HOMEBREW_SYSTEM}brew" + [[ -n "$HOMEBREW_LINUX" ]] && HOMEBREW_OS_VERSION="$(lsb_release -sd 2>/dev/null)" + HOMEBREW_OS_VERSION="${HOMEBREW_PRODUCT:=$(uname -r)}" +fi +HOMEBREW_USER_AGENT="$HOMEBREW_PRODUCT/$HOMEBREW_VERSION ($HOMEBREW_SYSTEM; $HOMEBREW_PROCESSOR $HOMEBREW_OS_VERSION)" +HOMEBREW_CURL_VERSION="$("$HOMEBREW_CURL" --version 2>/dev/null | head -n1 | awk '{print $1"/"$2}')" +HOMEBREW_USER_AGENT_CURL="$HOMEBREW_USER_AGENT $HOMEBREW_CURL_VERSION" + +# Declared in bin/brew export HOMEBREW_BREW_FILE -export HOMEBREW_RUBY_PATH export HOMEBREW_PREFIX export HOMEBREW_REPOSITORY export HOMEBREW_LIBRARY + +# Declared in brew.sh +export HOMEBREW_VERSION export HOMEBREW_CELLAR +export HOMEBREW_RUBY_PATH +export HOMEBREW_CURL +export HOMEBREW_OS_VERSION +export HOMEBREW_OSX_VERSION +export HOMEBREW_USER_AGENT +export HOMEBREW_USER_AGENT_CURL if [[ -n "$HOMEBREW_OSX" ]] then