diff options
| -rw-r--r-- | Library/Homebrew/formula.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 68 | ||||
| -rw-r--r-- | Library/Homebrew/global.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/install_renamed.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/keg.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/test/testing_env.rb | 1 |
6 files changed, 46 insertions, 36 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index d640aa1e8..487af9f8b 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -165,12 +165,7 @@ class Formula def kext_prefix; prefix+'Library/Extensions' end # configuration needs to be preserved past upgrades - def etc - etc = HOMEBREW_PREFIX+'etc' - etc = prefix+etc if HOMEBREW_GIT_ETC - etc.extend(InstallRenamed) - etc - end + def etc; (HOMEBREW_PREFIX+'etc').extend(InstallRenamed) end # generally we don't want var stuff inside the keg def var; HOMEBREW_PREFIX+'var' end diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index e27f636f3..b5b566bd0 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -79,9 +79,15 @@ class FormulaInstaller etc = HOMEBREW_PREFIX+'etc' etc.cd do quiet_system 'git', 'init' unless (etc+'.git').directory? - quiet_system 'git', 'checkout', '-B', "#{f.name}-last" - system 'git', 'add', '--all', '.' - system 'git', 'commit', '-m', "#{f.name}-#{f.version}: preinstall" + quiet_system 'git', 'checkout', '-B', "#{f.name}-preinstall" + unless quiet_system 'git', 'diff', '--exit-code', 'HEAD' + system 'git', 'add', '--all', '.' + system 'git', 'commit', '-m', "#{f.name}-#{f.version}: preinstall" + end + + unless quiet_system 'git', 'rev-parse', 'master' + quiet_system 'git', 'branch', 'master' + end end end @@ -89,37 +95,49 @@ class FormulaInstaller return unless quiet_system 'git', '--version' etc = HOMEBREW_PREFIX+'etc' - keg_etc_files = Dir[f.etc+'*'] - last_branch = "#{f.name}-last" + preinstall_branch = "#{f.name}-preinstall" default_branch = "#{f.name}-default" merged = false etc.cd do - FileUtils.cp_r keg_etc_files, etc - - system 'git', 'add', '--all', '.' - if quiet_system 'git', 'diff', '--exit-code', default_branch - quiet_system 'git', 'reset', '--hard' + if quiet_system 'git', 'diff', '--exit-code', preinstall_branch + quiet_system 'git', 'branch', default_branch + quiet_system 'git', 'branch', '-D', preinstall_branch + elsif not quiet_system 'git', 'rev-parse', default_branch + quiet_system 'git', 'checkout', '-B', default_branch + quiet_system 'git', 'add', '--all', '.' + system 'git', 'commit', '-m', "#{f.name}-#{f.version}: default" + quiet_system 'git', 'branch', '-D', preinstall_branch else - if quiet_system 'git', 'rev-parse', 'master' - quiet_system 'git', 'checkout', '-f', 'master' - FileUtils.cp_r keg_etc_files, etc - quiet_system 'git', 'add', '--all', '.' - else - quiet_system 'git', 'checkout', '-b' 'master' - end + previous_default_branch = `git rev-parse #{default_branch}`.strip + quiet_system 'git', 'checkout', '-B', default_branch + quiet_system 'git', 'add', '--all', '.' system 'git', 'commit', '-m', "#{f.name}-#{f.version}: default" - quiet_system 'git', 'branch', '-f', default_branch - merged = true unless quiet_system 'git' 'merge-base', '--is-ancestor', - last_branch, 'master' - system 'git', 'merge', '--no-ff', '--no-edit', - '-X', 'theirs', last_branch + default_unchanged = quiet_system('git', 'diff', '--exit-code', \ + previous_default_branch) + + if default_unchanged + system 'git', 'reset', '--hard', previous_default_branch + end + + quiet_system 'git', 'checkout', 'master' + quiet_system 'git', 'reset', '--hard', preinstall_branch + + unless default_unchanged + merge_ff = quiet_system 'git', 'merge', '--ff-only', '--no-edit', + '-X', 'ours', default_branch + unless merge_ff + merged = true + system 'git', 'merge', '--no-ff', '--no-edit', + '-X', 'ours', default_branch + end + end end if merged ohai "Configuration Files" puts "Your configuration files for #{f.name} in etc were merged:" - puts "To reverse this merge: git reset --hard #{last_branch}" + puts "To reverse this merge: git reset --hard #{preinstall_branch}" puts "To restore defaults: git reset --hard #{default_branch}" end end @@ -175,7 +193,7 @@ class FormulaInstaller @@attempted << f - #git_etc_preinstall if HOMEBREW_GIT_ETC + git_etc_preinstall if ENV['HOMEBREW_GIT_ETC'] @poured_bottle = false @@ -208,7 +226,7 @@ class FormulaInstaller opoo "#{f.name} post_install failed. Rerun with `brew postinstall #{f.name}`." end - #git_etc_postinstall if HOMEBREW_GIT_ETC + git_etc_postinstall if ENV['HOMEBREW_GIT_ETC'] opoo "Nothing was installed to #{f.prefix}" unless f.installed? end diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index a9a8cbe30..36e5cf992 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -84,8 +84,6 @@ HOMEBREW_USER_AGENT = "Homebrew #{HOMEBREW_VERSION} (Ruby #{RUBY_VERSION}-#{RUBY HOMEBREW_CURL_ARGS = '-f#LA' -HOMEBREW_GIT_ETC = !ENV['HOMEBREW_GIT_ETC'].nil? - module Homebrew extend self include FileUtils diff --git a/Library/Homebrew/install_renamed.rb b/Library/Homebrew/install_renamed.rb index 5f34eb674..105791d2b 100644 --- a/Library/Homebrew/install_renamed.rb +++ b/Library/Homebrew/install_renamed.rb @@ -15,7 +15,7 @@ module InstallRenamed private def append_default_if_different src, dst - if File.file? dst and !FileUtils.identical?(src, dst) and !HOMEBREW_GIT_ETC + if File.file? dst and !FileUtils.identical?(src, dst) and !ENV['HOMEBREW_GIT_ETC'] dst += ".default" end dst diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index 6a1784acf..4a3fd2ddd 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -114,7 +114,7 @@ class Keg < Pathname # yeah indeed, you have to force anything you need in the main tree into # these dirs REMEMBER that *NOT* everything needs to be in the main tree - link_dir('etc', mode) {:mkpath} unless HOMEBREW_GIT_ETC + link_dir('etc', mode) {:mkpath} link_dir('bin', mode) {:skip_dir} link_dir('sbin', mode) {:skip_dir} link_dir('include', mode) {:link} diff --git a/Library/Homebrew/test/testing_env.rb b/Library/Homebrew/test/testing_env.rb index e9532bb96..9bc5d871f 100644 --- a/Library/Homebrew/test/testing_env.rb +++ b/Library/Homebrew/test/testing_env.rb @@ -25,7 +25,6 @@ HOMEBREW_USER_AGENT = 'Homebrew' HOMEBREW_WWW = 'http://example.com' HOMEBREW_CURL_ARGS = '-fsLA' HOMEBREW_VERSION = '0.9-test' -HOMEBREW_GIT_ETC = false RUBY_BIN = Pathname.new(RbConfig::CONFIG['bindir']) RUBY_PATH = RUBY_BIN + RbConfig::CONFIG['ruby_install_name'] + RbConfig::CONFIG['EXEEXT'] |
