diff options
| author | Mike McQuaid | 2010-11-20 12:02:17 +0000 |
|---|---|---|
| committer | Mike McQuaid | 2010-11-20 12:02:17 +0000 |
| commit | 805afa14b8d1b03c8f56cd67628ffc61b9f25d2c (patch) | |
| tree | ba107049d916f80699c941f5db2b6e3a6c3a3018 /Library | |
| parent | 8d2caf94a3805b1361682af23dd3c8e6b5c5b6e8 (diff) | |
| download | homebrew-805afa14b8d1b03c8f56cd67628ffc61b9f25d2c.tar.bz2 | |
Add brew pull for easy integration of user patches
Diffstat (limited to 'Library')
| -rwxr-xr-x | Library/Contributions/examples/brew-pull.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Library/Contributions/examples/brew-pull.rb b/Library/Contributions/examples/brew-pull.rb new file mode 100755 index 000000000..cb5603050 --- /dev/null +++ b/Library/Contributions/examples/brew-pull.rb @@ -0,0 +1,49 @@ +# Gets a patch from a GitHub commit or pull request and applies it to Homebrew. +# Optionally, installs it too. + +require 'utils.rb' + +if ARGV.empty? + puts 'This command requires at least one URL argument' + exit 1 +end + +if ARGV.include? '--install' + ARGV.delete '--install' + install = true +end + +HOMEBREW_REPOSITORY.cd do + ARGV.each do|arg| + # This regex should work, if it's too precise, feel free to fix it. + if !arg.match 'https:\/\/github.com\/\w+\/homebrew\/(pull\/\d+|commit\/\w{40})' + ohai 'Ignoring URL:', "Not a GitHub pull request or commit: #{arg}" + next + end + + # GitHub provides commits'/pull-requests' raw patches using this URL. + url = arg + '.patch' + + # The cache directory seems like a good place to put patches. + patchpath = (HOMEBREW_CACHE+File.basename(url)) + curl url, '-o', patchpath + + # Makes sense to squash whitespace errors, we don't want them. + ohai 'Applying patch' + safe_system 'git', 'am', '--signoff', '--whitespace=fix', patchpath + + ohai 'Patch changed:' + safe_system 'git', 'diff', 'HEAD~1', '--stat' + + if install + status, filename = `git diff HEAD~1 --name-status`.split() + # Don't try and do anything to removed files. + if status == 'A' or status == 'M' + formula = File.basename(filename, '.rb') + ohai "Installing #{formula}" + # Not sure if this is the best way to install? + safe_system 'brew', 'install', '--force', formula + end + end + end +end
\ No newline at end of file |
