diff options
| author | Jack Nagel | 2012-07-09 23:24:27 -0500 |
|---|---|---|
| committer | Jack Nagel | 2012-08-18 11:12:07 -0500 |
| commit | 5fe7fdf1535eda627f74e0272b4bbf0618b9a498 (patch) | |
| tree | 1738e492ec76938510be14172cb3d753e8883470 /Library | |
| parent | 956c1d653aee7b82d68c264fe5418723808ff662 (diff) | |
| download | brew-5fe7fdf1535eda627f74e0272b4bbf0618b9a498.tar.bz2 | |
Move version detection to Version class
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/extend/pathname.rb | 86 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_versions.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/version.rb | 84 |
3 files changed, 86 insertions, 86 deletions
diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 553d7527e..dec937c54 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -161,90 +161,10 @@ class Pathname out<<`/usr/bin/du -hd0 #{to_s} | cut -d"\t" -f1`.strip end - # attempts to retrieve the version component of this path, so generally - # you'll call it on tarballs or extracted tarball directories, if you add - # to this please provide amend the unittest def version - if directory? - # directories don't have extnames - stem=basename.to_s - else - # sourceforge /download - if %r[((?:sourceforge.net|sf.net)/.*)/download$].match to_s - stem=Pathname.new(dirname).stem - else - stem=self.stem - end - end - - # github tarballs, like v1.2.3 - %r[github.com/.*/(zip|tar)ball/v?((\d+\.)+\d+)$].match to_s - return $2 if $2 - - # eg. https://github.com/sam-github/libnet/tarball/libnet-1.1.4 - %r[github.com/.*/(zip|tar)ball/.*-((\d+\.)+\d+)$].match to_s - return $2 if $2 - - # dashed version - # eg. github.com/isaacs/npm/tarball/v0.2.5-1 - %r[github.com/.*/(zip|tar)ball/v?((\d+\.)+\d+-(\d+))$].match to_s - return $2 if $2 - - # underscore version - # eg. github.com/petdance/ack/tarball/1.93_02 - %r[github.com/.*/(zip|tar)ball/v?((\d+\.)+\d+_(\d+))$].match to_s - return $2 if $2 - - # eg. boost_1_39_0 - /((\d+_)+\d+)$/.match stem - return $1.gsub('_', '.') if $1 - - # eg. foobar-4.5.1-1 - # eg. ruby-1.9.1-p243 - /-((\d+\.)*\d\.\d+-(p|rc|RC)?\d+)$/.match stem - return $1 if $1 - - # eg. lame-398-1 - /-((\d)+-\d)/.match stem - return $1 if $1 - - # eg. foobar-4.5.1 - /-((\d+\.)*\d+)$/.match stem - return $1 if $1 - - # eg. foobar-4.5.1b - /-((\d+\.)*\d+([abc]|rc|RC)\d*)$/.match stem - return $1 if $1 - - # eg foobar-4.5.0-beta1, or foobar-4.50-beta - /-((\d+\.)*\d+-beta(\d+)?)$/.match stem - return $1 if $1 - - # eg. foobar4.5.1 - unless /^erlang-/.match basename - /((\d+\.)*\d+)$/.match stem - return $1 if $1 - end - - # eg foobar-4.5.0-bin - /-((\d+\.)+\d+[abc]?)[-._](bin|dist|stable|src|sources?)$/.match stem - return $1 if $1 - - # Debian style eg dash_0.5.5.1.orig.tar.gz - /_((\d+\.)+\d+[abc]?)[.]orig$/.match stem - return $1 if $1 - - # eg. otp_src_R13B (this is erlang's style) - # eg. astyle_1.23_macosx.tar.gz - stem.scan(/_([^_]+)/) do |match| - return match.first if /\d/.match $1 - end - - # old erlang bottle style e.g. erlang-R14B03-bottle.tar.gz - /-([^-]+)/.match stem - return $1 if $1 - - nil + require 'version' + version = Version.parse(self) + version.to_s unless version.nil? end def compression_type diff --git a/Library/Homebrew/test/test_versions.rb b/Library/Homebrew/test/test_versions.rb index 4792ac85d..4d5d87225 100644 --- a/Library/Homebrew/test/test_versions.rb +++ b/Library/Homebrew/test/test_versions.rb @@ -5,7 +5,7 @@ require 'version' module VersionAssertions def assert_version url, version - assert_equal version, Version.parse(url) + assert_equal version, Version.parse(url).to_s end def assert_version_nil url diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index c10863476..cc8f220b7 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -3,7 +3,7 @@ class Version def initialize val return val if val.is_a? Version or val.nil? - @version = val.to_s.strip + @version = val.to_s end def head? @@ -38,6 +38,86 @@ class Version alias_method :to_str, :to_s def self.parse spec - Pathname.new(spec.to_s).version + version = _parse(spec) + Version.new(version) unless version.nil? + end + + private + + def self._parse spec + spec = Pathname.new(spec) unless spec.is_a? Pathname + + stem = if spec.directory? + spec.basename.to_s + elsif %r[((?:sourceforge.net|sf.net)/.*)/download$].match(spec.to_s) + Pathname.new(spec.dirname).stem + else + spec.stem + end + + # GitHub tarballs, e.g. v1.2.3 + m = %r[github.com/.+/(?:zip|tar)ball/v?((\d+\.)+\d+)$].match(spec.to_s) + return m.captures.first unless m.nil? + + # e.g. https://github.com/sam-github/libnet/tarball/libnet-1.1.4 + m = %r[github.com/.+/(?:zip|tar)ball/.*-((\d+\.)+\d+)$].match(spec.to_s) + return m.captures.first unless m.nil? + + # e.g. https://github.com/isaacs/npm/tarball/v0.2.5-1 + m = %r[github.com/.+/(?:zip|tar)ball/v?((\d+\.)+\d+-(\d+))$].match(spec.to_s) + return m.captures.first unless m.nil? + + # e.g. https://github.com/petdance/ack/tarball/1.93_02 + m = %r[github.com/.+/(?:zip|tar)ball/v?((\d+\.)+\d+_(\d+))$].match(spec.to_s) + return m.captures.first unless m.nil? + + # e.g. boost_1_39_0 + m = /((\d+_)+\d+)$/.match(stem) + return m.captures.first.gsub('_', '.') unless m.nil? + + # e.g. foobar-4.5.1-1 + # e.g. ruby-1.9.1-p243 + m = /-((\d+\.)*\d\.\d+-(p|rc|RC)?\d+)$/.match(stem) + return m.captures.first unless m.nil? + + # e.g. lame-398-1 + m = /-((\d)+-\d)/.match(stem) + return m.captures.first unless m.nil? + + # e.g. foobar-4.5.1 + m = /-((\d+\.)*\d+)$/.match(stem) + return m.captures.first unless m.nil? + + # e.g. foobar-4.5.1b + m = /-((\d+\.)*\d+([abc]|rc|RC)\d*)$/.match(stem) + return m.captures.first unless m.nil? + + # e.g. foobar-4.5.0-beta1, or foobar-4.50-beta + m = /-((\d+\.)*\d+-beta(\d+)?)$/.match(stem) + return m.captures.first unless m.nil? + + # e.g. foobar4.5.1 + m = /((\d+\.)*\d+)$/.match(stem) + return m.captures.first unless m.nil? + + # e.g. foobar-4.5.0-bin + m = /-((\d+\.)+\d+[abc]?)[-._](bin|dist|stable|src|sources?)$/.match(stem) + return m.captures.first unless m.nil? + + # e.g. dash_0.5.5.1.orig.tar.gz (Debian style) + m = /_((\d+\.)+\d+[abc]?)[.]orig$/.match(stem) + return m.captures.first unless m.nil? + + # e.g. erlang-R14B03-bottle.tar.gz (old erlang bottle style) + m = /-([^-]+)/.match(stem) + return m.captures.first unless m.nil? + + # e.g. opt_src_R13B (erlang) + m = /otp_src_(.+)/.match(stem) + return m.captures.first unless m.nil? + + # e.g. astyle_1.23_macosx.tar.gz + m = /_([^_]+)/.match(stem) + return m.captures.first unless m.nil? end end |
