diff options
| author | Alex Dunn | 2015-07-05 19:43:01 -0700 |
|---|---|---|
| committer | Mike McQuaid | 2015-07-18 19:30:30 -0700 |
| commit | da2e4d417d797d54b04fb8e1106e3c98af97a2d1 (patch) | |
| tree | 10014b1fc9aed7bd9e9fedfb946b30be5515fdad /Library/Homebrew | |
| parent | d88f84138e64835e801c42e6d49120c1cb6afa3b (diff) | |
| download | brew-da2e4d417d797d54b04fb8e1106e3c98af97a2d1.tar.bz2 | |
fetch/build formula from source when modified
closes Homebrew/homebrew#36068
Closes Homebrew/homebrew#41397.
Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/cmd/fetch.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/formula.rb | 9 | ||||
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 8 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_bottle_hooks.rb | 1 |
4 files changed, 23 insertions, 2 deletions
diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index 5ac41a4d3..171218294 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -32,6 +32,13 @@ module Homebrew def fetch_bottle? f return true if ARGV.force_bottle? && f.bottle return false unless f.bottle && f.pour_bottle? + if f.file_modified? + filename = f.path.to_s.gsub("#{HOMEBREW_PREFIX}/", "") + opoo "Formula file is modified!" + puts "Fetching source because #{filename} has local changes" + puts "To fetch the bottle instead, run with --force-bottle" + return false + end return false if ARGV.build_from_source? || ARGV.build_bottle? return false unless f.bottle.compatible_cellar? return true diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index bf11af009..fc378b819 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -601,6 +601,14 @@ class Formula s << ") #{path}>" end + def file_modified? + return false unless which("git") + path.parent.cd do + diff = Utils.popen_read("git", "diff", "origin/master", "--", "#{path}") + !diff.empty? && $?.exitstatus == 0 + end + end + # Standard parameters for CMake builds. # Setting CMAKE_FIND_FRAMEWORK to "LAST" tells CMake to search for our # libraries before trying to utilize Frameworks, many of which will be from @@ -1187,4 +1195,3 @@ class Formula end end end - diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 23f920d23..a6264ee62 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -62,7 +62,7 @@ class FormulaInstaller bottle = formula.bottle return true if force_bottle? && bottle - return false if build_from_source? || build_bottle? || interactive? + return false if build_from_source? || build_bottle? || interactive? || formula.file_modified? return false unless options.empty? return true if formula.local_bottle_path @@ -180,6 +180,12 @@ class FormulaInstaller build_bottle_preinstall if build_bottle? unless @poured_bottle + if formula.file_modified? + filename = formula.path.to_s.gsub("#{HOMEBREW_PREFIX}/", "") + opoo "Formula file is modified!" + puts "Building from source because #{filename} has local changes" + puts "To install from a bottle instead, run with --force-bottle" + end compute_and_install_dependencies if @pour_failed and not ignore_deps? build clean diff --git a/Library/Homebrew/test/test_bottle_hooks.rb b/Library/Homebrew/test/test_bottle_hooks.rb index 92dca6dff..0b6c031bf 100644 --- a/Library/Homebrew/test/test_bottle_hooks.rb +++ b/Library/Homebrew/test/test_bottle_hooks.rb @@ -7,6 +7,7 @@ class BottleHookTests < Homebrew::TestCase def bottle; end def local_bottle_path; end def some_random_method; true; end + def file_modified?; end end def setup |
