aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2010-11-20 12:02:17 +0000
committerMike McQuaid2010-11-20 12:02:17 +0000
commit805afa14b8d1b03c8f56cd67628ffc61b9f25d2c (patch)
treeba107049d916f80699c941f5db2b6e3a6c3a3018 /Library
parent8d2caf94a3805b1361682af23dd3c8e6b5c5b6e8 (diff)
downloadhomebrew-805afa14b8d1b03c8f56cd67628ffc61b9f25d2c.tar.bz2
Add brew pull for easy integration of user patches
Diffstat (limited to 'Library')
-rwxr-xr-xLibrary/Contributions/examples/brew-pull.rb49
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