diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index 27b78a0acd..a5fae3c604 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -86,44 +86,7 @@ begin require "commands" require "settings" - if cmd - internal_cmd = Commands.valid_internal_cmd?(cmd) - internal_cmd ||= begin - internal_dev_cmd = Commands.valid_internal_dev_cmd?(cmd) - if internal_dev_cmd && !Homebrew::EnvConfig.developer? - if ENV["HOMEBREW_DEV_CMD_RUN"].blank? - opoo <<~MESSAGE - #{Tty.bold}#{cmd}#{Tty.reset} is a developer command, so - Homebrew's developer mode has been automatically turned on. - To turn developer mode off, run #{Tty.bold}brew developer off#{Tty.reset} - - MESSAGE - end - - Homebrew::Settings.write "devcmdrun", true - ENV["HOMEBREW_DEV_CMD_RUN"] = "1" - end - internal_dev_cmd - end - end - - developer_mode = if cmd == "developer" && ARGV.include?("on") - true - elsif cmd == "developer" && ARGV.include?("off") - false - else - Homebrew::EnvConfig.developer? || Homebrew::Settings.read("devcmdrun") == "true" - end - - if internal_dev_cmd && Homebrew::EnvConfig.install_from_api? - odie "Developer commands cannot be run while HOMEBREW_INSTALL_FROM_API is set!" - elsif Homebrew::EnvConfig.install_from_api? && developer_mode - opoo <<~MESSAGE - Developers should not have HOMEBREW_INSTALL_FROM_API set! - Please unset HOMEBREW_INSTALL_FROM_API or turn developer mode off by running: - brew developer off - MESSAGE - end + internal_cmd = Commands.valid_internal_cmd?(cmd) || Commands.valid_internal_dev_cmd?(cmd) if cmd unless internal_cmd # Add contributed commands to PATH before checking. diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh index 48d080334a..6e2843e309 100644 --- a/Library/Homebrew/brew.sh +++ b/Library/Homebrew/brew.sh @@ -718,25 +718,61 @@ then fi export HOMEBREW_CORE_GIT_REMOTE +# Set HOMEBREW_DEVELOPER_COMMAND if the command being run is a developer command +if [[ -f "${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.sh" ]] || + [[ -f "${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.rb" ]] +then + export HOMEBREW_DEVELOPER_COMMAND="1" +fi + +# Set HOMEBREW_DEVELOPER_MODE if this command will turn (or keep) developer mode on. This is the case if: +# - The command being run is not `brew developer off` +# - Any of the following are true +# - HOMEBREW_DEVELOPER is set +# - HOMEBREW_DEV_CMD_RUN is set +# - A developer command is being run +# - The command being run is `brew developer on` +if [[ "${HOMEBREW_COMMAND}" != "developer" || ! $* =~ "off" ]] && + [[ -n "${HOMEBREW_DEVELOPER}" || + -n "${HOMEBREW_DEV_CMD_RUN}" || + -n "${HOMEBREW_DEVELOPER_COMMAND}" || + "${HOMEBREW_COMMAND}" == "developer" && $* =~ "on" ]] +then + export HOMEBREW_DEVELOPER_MODE="1" +fi + +if [[ -n "${HOMEBREW_INSTALL_FROM_API}" && -n "${HOMEBREW_DEVELOPER_COMMAND}" ]] +then + odie "Developer commands cannot be run while HOMEBREW_INSTALL_FROM_API is set!" +elif [[ -n "${HOMEBREW_INSTALL_FROM_API}" && -n "${HOMEBREW_DEVELOPER_MODE}" ]] +then + message="Developers should not have HOMEBREW_INSTALL_FROM_API set! +Please unset HOMEBREW_INSTALL_FROM_API or turn developer mode off by running: + brew developer off +" + opoo "${message}" +fi + +if [[ -n "${HOMEBREW_DEVELOPER_COMMAND}" && -z "${HOMEBREW_DEVELOPER}" ]] +then + if [[ -z "${HOMEBREW_DEV_CMD_RUN}" ]] + then + message="$(bold "${HOMEBREW_COMMAND}") is a developer command, so +Homebrew's developer mode has been automatically turned on. +To turn developer mode off, run $(bold "brew developer off") +" + opoo "${message}" + fi + + git config --file="${HOMEBREW_GIT_CONFIG_FILE}" --replace-all homebrew.devcmdrun true 2>/dev/null + export HOMEBREW_DEV_CMD_RUN="1" +fi + if [[ -f "${HOMEBREW_LIBRARY}/Homebrew/cmd/${HOMEBREW_COMMAND}.sh" ]] then HOMEBREW_BASH_COMMAND="${HOMEBREW_LIBRARY}/Homebrew/cmd/${HOMEBREW_COMMAND}.sh" elif [[ -f "${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.sh" ]] then - if [[ -z "${HOMEBREW_DEVELOPER}" ]] - then - if [[ -z "${HOMEBREW_DEV_CMD_RUN}" ]] - then - message="$(bold "${HOMEBREW_COMMAND}") is a developer command, so -Homebrew's developer mode has been automatically turned on. -To turn developer mode off, run $(bold "brew developer off") -" - opoo "${message}" - fi - - git config --file="${HOMEBREW_GIT_CONFIG_FILE}" --replace-all homebrew.devcmdrun true 2>/dev/null - export HOMEBREW_DEV_CMD_RUN="1" - fi HOMEBREW_BASH_COMMAND="${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.sh" fi