[Rubygems-developers] Versioning policy input
Mauricio Fernández
batsman.geo at yahoo.com
Mon Apr 5 17:50:42 EDT 2004
On Mon, Apr 05, 2004 at 06:31:48AM -0700, David A. Black wrote:
> > Proposal:
> > Add a separate field "APIVersion" with a version number to the GEM spec,
> > which specifies API revisioning, and is rigidly formed for that purpose.
> >
>
> I like the idea of having something in the gemspec that flags API
> changes. It takes the burden off the public release numbering, so
> that we wouldn't have to take on the literally impossible task of
> trying to get all authors to agree on how to (publically) number their
> releases.
Please take a look at the attached patches, which contain a
straightforward implementation of the proposed internal versioning scheme
B (i.e. the complete, x.y.z one).
Note that merging this would cause all existent gemspecs to stop working (1)
since they will be missing the 'api_version' field. I've done some
ad-hoc corrections to gemspecs/*.gemspec *but* api_version should be
set by somebody knowledgeable w/ the API for each lib.
(1): keep in mind that changing this later will be much more difficult ;-)
--
Running Debian GNU/Linux Sid (unstable)
batsman dot geo at yahoo dot com
The first is to ensure your partner understands that nature has root
privileges - nature doesn't have to make sense.
-- Telsa Gwynne
-------------- next part --------------
diff -x CVS -ru rubygems/lib/rubygems/cache.rb rubygems.new/lib/rubygems/cache.rb
--- rubygems/lib/rubygems/cache.rb 2004-03-19 04:27:24.000000000 +0100
+++ rubygems.new/lib/rubygems/cache.rb 2004-04-04 11:24:27.000000000 +0200
@@ -64,7 +64,7 @@
result = []
@gems.each do |full_spec_name, spec|
next unless spec.name == gem_name
- result << spec if version_requirement.satisfied_by?(spec.version)
+ result << spec if version_requirement.satisfied_by?(spec.api_version)
end
result = result.sort
result
diff -x CVS -ru rubygems/lib/rubygems/remote_installer.rb rubygems.new/lib/rubygems/remote_installer.rb
--- rubygems/lib/rubygems/remote_installer.rb 2004-04-02 14:48:29.000000000 +0200
+++ rubygems.new/lib/rubygems/remote_installer.rb 2004-04-04 11:34:42.000000000 +0200
@@ -16,15 +16,15 @@
##
# This method will install package_name onto the local system.
# package_name:: [String] Name of the Gem to install
- # version_requirement:: [default = "> 0.0.0"] Gem version requirement to install
- def install(package_name, version_requirement = "> 0.0.0", force=false, directory=Gem.dir)
+ # api_version_requirement:: [default = "1"] API version requirement to install
+ def install(package_name, api_version_requirement = "1", force=false, directory=Gem.dir)
- unless version_requirement.respond_to?(:version)
- version_requirement = Version::Requirement.new(version_requirement)
+ unless api_version_requirement.respond_to?(:version)
+ api_version_requirement = Version::APIRequirement.new(api_version_requirement)
end
sources = get_cache_sources()
caches = get_caches(sources)
- spec, source = find_latest_valid_package_in_caches(package_name,version_requirement,caches)
+ spec, source = find_latest_valid_package_in_caches(package_name,api_version_requirement,caches)
dependencies = find_dependencies_not_installed(spec.dependencies)
install_dependencies(dependencies)
cache_dir = File.join(Gem::dir, "cache")
@@ -88,7 +88,7 @@
cache.each do |name, spec|
if (/#{package_name}/i === name &&
spec.version > max_version &&
- version_requirement.satisfied_by?(spec.version)) then
+ version_requirement.satisfied_by?(spec.api_version)) then
package = [spec, source]
max_version = spec.version
end
diff -x CVS -ru rubygems/lib/rubygems/specification.rb rubygems.new/lib/rubygems/specification.rb
--- rubygems/lib/rubygems/specification.rb 2004-04-03 16:50:37.000000000 +0200
+++ rubygems.new/lib/rubygems/specification.rb 2004-04-04 10:43:00.000000000 +0200
@@ -44,7 +44,8 @@
##
# These attributes are required
#
- required_attribute :rubygems_version, :name, :platform, :date, :summary, :require_paths, :version
+ required_attribute :rubygems_version, :name, :platform, :date, :summary,
+ :require_paths, :version, :api_version
##
# These attributes are optional
@@ -174,6 +175,20 @@
end
##
+ # Sets the API version of the Specification
+ #
+ # version:: [String or Gem::Version] The version
+ #
+ # Note that the API version must comply with the versioning policy.
+ #
+ def api_version=(version)
+ unless version.respond_to? :version
+ api_version = Version.new(version)
+ end
+ @api_version = api_version
+ end
+
+ ##
# Helper method if the require path is singular
#
# path:: [String] The require path.
@@ -197,7 +212,7 @@
# gem:: [String or Gem::Dependency] The Gem name/dependency.
# requirement:: [default="> 0.0.0"] The version requirement.
#
- def add_dependency(gem, requirement="> 0.0.0")
+ def add_dependency(gem, requirement="1")
unless gem.respond_to?(:name) && gem.respond_to?(:version_requirement)
gem = Dependency.new(gem, requirement)
end
@@ -240,7 +255,7 @@
#
def satisfies_requirement?(dependency)
return @name==dependency.name &&
- dependency.version_requirement.satisfied_by?(@version)
+ dependency.version_requirement.satisfied_by?(@api_version)
end
##
@@ -259,7 +274,7 @@
#
def to_yaml_properties
mark_version
- result = ['@rubygems_version', '@name', '@version', '@date', '@platform', '@summary', '@require_paths', '@files']
+ result = ['@rubygems_version', '@name', '@version', '@api_version', '@date', '@platform', '@summary', '@require_paths', '@files']
result << '@autorequire' if @autorequire
result << '@author' if @author
result << '@email' if @email
@@ -283,6 +298,7 @@
result = "Gem::Specification.new do |s|\n"
result << "s.name = %q{#{name}}\n"
result << "s.version = %q{#{version}}\n"
+ result << "s.api_version = %q{#{api_version}}\n"
result << "s.platform = %q{#{platform}}\n" if @platform
result << "s.has_rdoc = #{has_rdoc?}\n" if has_rdoc?
result << "s.test_suite_file = %q{#{test_suite_file}}\n" if has_test_suite?
diff -x CVS -ru rubygems/lib/rubygems/version.rb rubygems.new/lib/rubygems/version.rb
--- rubygems/lib/rubygems/version.rb 2004-01-24 19:49:22.000000000 +0100
+++ rubygems.new/lib/rubygems/version.rb 2004-04-04 10:46:55.000000000 +0200
@@ -23,7 +23,7 @@
#
def initialize(name, version_requirement)
@name = name
- @version_requirement = Version::Requirement.new(version_requirement)
+ @version_requirement = Version::APIRequirement.new(version_requirement)
end
end
@@ -169,5 +169,67 @@
@version.scan(/\d+/).map {|s| s.to_i}
end
end
+
+ ##
+ # APIRequirement implements the API versioning semantics.
+ #
+ class APIRequirement < Version
+
+ NUM_RE = /(\d.\d)|(\d)/ # either 1 or 1.1 etc
+
+ ##
+ # Used to simplify conversion code, especially from strings
+ #
+ def to_requirement
+ self
+ end
+
+ ##
+ # Overrides to check for comparator
+ #
+ # str:: [String] the version requirement string
+ # return:: [Boolean] true if the string format is correct, otherwise false
+ #
+ def correct?(str)
+ /^#{NUM_RE}$/.match(str)
+ end
+
+ ##
+ # Constructs a version requirement instance
+ #
+ # str:: [String] the version requirement string (e.g. "> 1.23")
+ #
+ def initialize(str)
+ super
+ @nums = parse
+ end
+
+ ##
+ # Determines if the API version requirement is satisfied by the supplied version
+ #
+ # vn:: [Gem::Version] the version to compare against
+ # return:: [Boolean] true if this requirement is satisfied by the version, otherwise false
+ #
+ def satisfied_by?(vn)
+ other = vn.to_ints
+ case @nums.size
+ when 1
+ other[0] == @nums[0]
+ when 2
+ other[0] == @nums[0] && other[1] >= @nums[1]
+ end
+ end
+
+ private
+
+ ##
+ # parses the version requirement string, returning the
+ # comparator and the number
+ #
+ def parse
+ return @version.scan(/\d+/).map {|s| s.to_i}
+ end
+ end
end
+
end
diff -x CVS -ru rubygems/lib/rubygems.rb rubygems.new/lib/rubygems.rb
--- rubygems/lib/rubygems.rb 2004-03-29 04:30:55.000000000 +0200
+++ rubygems.new/lib/rubygems.rb 2004-04-04 10:49:20.000000000 +0200
@@ -13,7 +13,7 @@
# return:: [Boolean] true if the Gem is loaded, otherwise false.
# raises:: [LoadError] if Gem cannot be found or version requirement not met.
#
- def require_gem(gem, version_requirement="> 0.0.0")
+ def require_gem(gem, version_requirement="1")
unless gem.respond_to?(:name) && gem.respond_to?(:version_requirement)
gem = Gem::Dependency.new(gem, version_requirement)
end
diff -x CVS -ru rubygems/packages/sources/sources.gemspec rubygems.new/packages/sources/sources.gemspec
--- rubygems/packages/sources/sources.gemspec 2003-11-22 19:58:46.000000000 +0100
+++ rubygems.new/packages/sources/sources.gemspec 2004-04-04 10:51:22.000000000 +0200
@@ -6,6 +6,7 @@
spec = Gem::Specification.new do |s|
s.name = 'sources'
s.version = "0.0.1"
+ s.api_version = "1.0.0"
s.platform = Gem::Platform::RUBY
s.summary = "This package provides download sources for remote gem installation"
s.files = Dir.glob("lib/**/*").delete_if {|item| item.include?("CVS")}
diff -x CVS -ru rubygems/test/test_cache.rb rubygems.new/test/test_cache.rb
--- rubygems/test/test_cache.rb 2004-03-29 01:50:15.000000000 +0200
+++ rubygems.new/test/test_cache.rb 2004-04-04 11:17:05.000000000 +0200
@@ -37,6 +37,7 @@
@sample_spec = Gem::Specification.new do |s|
s.name = 'foo'
s.version = "1.2.3"
+ s.api_version = "1.2.0"
s.platform = Gem::Platform::RUBY
s.summary = "This is a cool package"
s.files = []
@@ -44,6 +45,7 @@
@second_sample_spec = Gem::Specification.new do |s|
s.name = 'anothergem'
s.version = "0.0.1"
+ s.api_version = "1.0.0"
s.platform = Gem::Platform::RUBY
s.summary = "This is a cool package"
s.files = []
diff -x CVS -ru rubygems/test/test_remote_installer.rb rubygems.new/test/test_remote_installer.rb
--- rubygems/test/test_remote_installer.rb 2004-03-29 01:50:15.000000000 +0200
+++ rubygems.new/test/test_remote_installer.rb 2004-04-04 11:16:24.000000000 +0200
@@ -82,6 +82,7 @@
SAMPLE_SPEC = Gem::Specification.new do |s|
s.name = 'foo'
s.version = "1.2.3"
+ s.api_version = "1.0.0"
s.platform = Gem::Platform::RUBY
s.summary = "This is a cool package"
s.files = []
diff -x CVS -ru rubygems/test/test_specification.rb rubygems.new/test/test_specification.rb
--- rubygems/test/test_specification.rb 2004-04-03 15:48:56.000000000 +0200
+++ rubygems.new/test/test_specification.rb 2004-04-04 10:52:07.000000000 +0200
@@ -5,6 +5,7 @@
def setup
@gem_spec = Gem::Specification.new do |s|
s.version = "1.0.0"
+ s.api_version = "1.0.0"
s.name = "boo"
s.platform = Gem::Platform::RUBY
s.date = Time.now
-------------- next part --------------
diff -x CVS -ru rubygems/gemspecs/cgikit-1.1.0.gemspec rubygems.new/gemspecs/cgikit-1.1.0.gemspec
--- rubygems/gemspecs/cgikit-1.1.0.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/cgikit-1.1.0.gemspec 2004-04-04 11:43:13.000000000 +0200
@@ -3,6 +3,7 @@
spec = Gem::Specification.new do |s|
s.name = 'cgikit'
s.version = '1.1.0'
+ s.api_version = "1.1.0"
s.summary = 'CGIKit is a componented-oriented web application framework like Apple Computers WebObjects. This framework services Model-View-Controller architecture programming by components based on a HTML file, a definition file and a Ruby source. '
s.files = ["lib/cgikit", "lib/cgikit.rb", "lib/cgikit/components", "lib/cgikit/components/CKErrorPage", "lib/cgikit/components/CKErrorPage/CKErrorPage.ckd", "lib/cgikit/components/CKErrorPage/CKErrorPage.html", "lib/cgikit/components/CKErrorPage/CKErrorPage.rb", "misc/cgikit-el", "misc/cgikit-el/cgikit-el.en.rd", "misc/cgikit-el/cgikit-el.ja.rd", "misc/cgikit-el/cgikit-help-en.el", "misc/cgikit-el/cgikit-help-ja.el", "misc/cgikit-el/cgikit.el", "misc/cgikit-el/ChangeLog", "misc/cgikit-el/makehelp.rb", "docs/en", "docs/ja", "docs/en/userguide", "docs/en/userguide/architecture.html", "docs/en/userguide/cookie.html", "docs/en/userguide/deployment.html", "docs/en/userguide/elements.html", "docs/en/userguide/images", "docs/en/userguide/index.html", "docs/en/userguide/install.html", "docs/en/userguide/session.html", "docs/en/userguide/standard.css", "docs/en/userguide/images/architecture_mvc.png", "docs/ja/userguide", "docs/ja/userguide/architecture.html", "docs/ja/userguide/cookie.html", "docs/ja/userguide/deployment.html", "docs/ja/userguide/elements.html", "docs/ja/userguide/images", "docs/ja/userguide/index.html", "docs/ja/userguide/install.html", "docs/ja/userguide/session.html", "docs/ja/userguide/standard.css", "docs/ja/userguide/images/architecturea.png", "src/00about.rb", "src/01adapter.rb", "src/02error.rb", "src/03session.rb", "src/04application.rb", "src/05elements1.rb", "src/06elements2.rb", "src/07elements3.rb", "src/08scanner.rb", "src/09parser.rb", "src/10message.rb", "src/11utilities.rb", "src/12resource.rb", "examples/AboutExamples", "examples/AboutExamples.ja", "examples/AddressBook", "examples/CookieCounter", "examples/ErrorScreen", "examples/Examples", "examples/FileUpload", "examples/HelloWorld", "examples/HelloWorldModRuby", "examples/RequestShower", "examples/SessionTest", "examples/AddressBook/AddressBook.cgi", "examples/AddressBook/addresses.txt", "examples/AddressBook/lib", "examples/AddressBook/MainPage", "examples/AddressBook/lib/address.rb", "examples/AddressBook/MainPage/MainPage.ckd", "examples/AddressBook/MainPage/MainPage.html", "examples/AddressBook/MainPage/MainPage.rb", "examples/CookieCounter/CookieCounter.cgi", "examples/CookieCounter/MainPage", "examples/CookieCounter/MainPage/MainPage.ckd", "examples/CookieCounter/MainPage/MainPage.html", "examples/CookieCounter/MainPage/MainPage.rb", "examples/ErrorScreen/ErrorScreen.cgi", "examples/ErrorScreen/log.txt", "examples/ErrorScreen/MainPage", "examples/ErrorScreen/MainPage/MainPage.ckd", "examples/ErrorScreen/MainPage/MainPage.html", "examples/ErrorScreen/MainPage/MainPage.rb", "examples/Examples/CheckboxPage", "examples/Examples/ConditionalPage", "examples/Examples/Examples.cgi", "examples/Examples/GenericHTMLElementsPage", "examples/Examples/HeaderFooterParts", "examples/Examples/HyperlinkPage", "examples/Examples/ImagePage", "examples/Examples/IndexPage", "examples/Examples/IntroductionPage", "examples/Examples/MainPage", "examples/Examples/MultiLocalePage", "examples/Examples/MultipleSubmitButtonsPage", "examples/Examples/PopUpButtonPage", "examples/Examples/RadioButtonPage", "examples/Examples/RepetitionPage", "examples/Examples/RepetitionTablePage", "examples/Examples/resources", "examples/Examples/SourcePage", "examples/Examples/StringPage", "examples/Examples/TextAreaPage", "examples/Examples/TextFieldPage", "examples/Examples/CheckboxPage/CheckboxPage.ckd", "examples/Examples/CheckboxPage/CheckboxPage.html", "examples/Examples/CheckboxPage/CheckboxPage.rb", "examples/Examples/CheckboxPage/CheckboxPage_ja.html", "examples/Examples/ConditionalPage/ConditionalPage.ckd", "examples/Examples/ConditionalPage/ConditionalPage.html", "examples/Examples/ConditionalPage/ConditionalPage.rb", "examples/Examples/ConditionalPage/ConditionalPage_ja.html", "examples/Examples/GenericHTMLElementsPage/GenericHTMLElementsPage.ckd", "examples/Examples/GenericHTMLElementsPage/GenericHTMLElementsPage.html", "examples/Examples/GenericHTMLElementsPage/GenericHTMLElementsPage.rb", "examples/Examples/GenericHTMLElementsPage/GenericHTMLElementsPage_ja.html", "examples/Examples/HeaderFooterParts/HeaderFooterParts.ckd", "examples/Examples/HeaderFooterParts/HeaderFooterParts.html", "examples/Examples/HeaderFooterParts/HeaderFooterParts.rb", "examples/Examples/HeaderFooterParts/HeaderFooterParts_ja.html", "examples/Examples/HyperlinkPage/HyperlinkPage.ckd", "examples/Examples/HyperlinkPage/HyperlinkPage.html", "examples/Examples/HyperlinkPage/HyperlinkPage.rb", "examples/Examples/HyperlinkPage/HyperlinkPage_ja.html", "examples/Examples/ImagePage/ImagePage.ckd", "examples/Examples/ImagePage/ImagePage.html", "examples/Examples/ImagePage/ImagePage.rb", "examples/Examples/ImagePage/ImagePage_ja.html", "examples/Examples/IndexPage/IndexPage.ckd", "examples/Examples/IndexPage/IndexPage.html", "examples/Examples/IndexPage/IndexPage.rb", "examples/Examples/IntroductionPage/IntroductionPage.ckd", "examples/Examples/IntroductionPage/IntroductionPage.html", "examples/Examples/IntroductionPage/IntroductionPage.rb", "examples/Examples/IntroductionPage/IntroductionPage_ja.html", "examples/Examples/MainPage/MainPage.ckd", "examples/Examples/MainPage/MainPage.html", "examples/Examples/MainPage/MainPage.rb", "examples/Examples/MultiLocalePage/MultiLocalePage.ckd", "examples/Examples/MultiLocalePage/MultiLocalePage.html", "examples/Examples/MultiLocalePage/MultiLocalePage.rb", "examples/Examples/MultiLocalePage/MultiLocalePage_ja.html", "examples/Examples/MultipleSubmitButtonsPage/MultipleSubmitButtonsPage.ckd", "examples/Examples/MultipleSubmitButtonsPage/MultipleSubmitButtonsPage.html", "examples/Examples/MultipleSubmitButtonsPage/MultipleSubmitButtonsPage.rb", "examples/Examples/MultipleSubmitButtonsPage/MultipleSubmitButtonsPage_ja.html", "examples/Examples/PopUpButtonPage/PopUpButtonPage.ckd", "examples/Examples/PopUpButtonPage/PopUpButtonPage.html", "examples/Examples/PopUpButtonPage/PopUpButtonPage.rb", "examples/Examples/PopUpButtonPage/PopUpButtonPage_ja.html", "examples/Examples/RadioButtonPage/RadioButtonPage.ckd", "examples/Examples/RadioButtonPage/RadioButtonPage.html", "examples/Examples/RadioButtonPage/RadioButtonPage.rb", "examples/Examples/RadioButtonPage/RadioButtonPage_ja.html", "examples/Examples/RepetitionPage/RepetitionPage.ckd", "examples/Examples/RepetitionPage/RepetitionPage.html", "examples/Examples/RepetitionPage/RepetitionPage.rb", "examples/Examples/RepetitionPage/RepetitionPage_ja.html", "examples/Examples/RepetitionTablePage/RepetitionTablePage.ckd", "examples/Examples/RepetitionTablePage/RepetitionTablePage.html", "examples/Examples/RepetitionTablePage/RepetitionTablePage.rb", "examples/Examples/RepetitionTablePage/RepetitionTablePage_ja.html", "examples/Examples/resources/cgikit.png", "examples/Examples/SourcePage/SourcePage.ckd", "examples/Examples/SourcePage/SourcePage.html", "examples/Examples/SourcePage/SourcePage.rb", "examples/Examples/SourcePage/SourcePage_ja.html", "examples/Examples/StringPage/StringPage.ckd", "examples/Examples/StringPage/StringPage.html", "examples/Examples/StringPage/StringPage.rb", "examples/Examples/StringPage/StringPage_ja.html", "examples/Examples/TextAreaPage/TextAreaPage.ckd", "examples/Examples/TextAreaPage/TextAreaPage.html", "examples/Examples/TextAreaPage/TextAreaPage.rb", "examples/Examples/TextAreaPage/TextAreaPage_ja.html", "examples/Examples/TextFieldPage/TextFieldPage.ckd", "examples/Examples/TextFieldPage/TextFieldPage.html", "examples/Examples/TextFieldPage/TextFieldPage.rb", "examples/Examples/TextFieldPage/TextFieldPage_ja.html", "examples/FileUpload/FileUpload.cgi", "examples/FileUpload/MainPage", "examples/FileUpload/MainPage/MainPage.ckd", "examples/FileUpload/MainPage/MainPage.html", "examples/FileUpload/MainPage/MainPage.rb", "examples/HelloWorld/HelloWorld.cgi", "examples/HelloWorld/MainPage", "examples/HelloWorld/MainPage/MainPage.ckd", "examples/HelloWorld/MainPage/MainPage.html", "examples/HelloWorld/MainPage/MainPage.rb", "examples/HelloWorldModRuby/helloworldmodruby.rb", "examples/HelloWorldModRuby/HelloWorldModRuby.rbx", "examples/HelloWorldModRuby/MainPage", "examples/HelloWorldModRuby/MainPage/MainPage.ckd", "examples/HelloWorldModRuby/MainPage/MainPage.html", "examples/HelloWorldModRuby/MainPage/MainPage.rb", "examples/RequestShower/MainPage", "examples/RequestShower/RequestShower.cgi", "examples/RequestShower/MainPage/MainPage.ckd", "examples/RequestShower/MainPage/MainPage.html", "examples/RequestShower/MainPage/MainPage.rb", "examples/SessionTest/MainPage", "examples/SessionTest/SessionErrorPage", "examples/SessionTest/SessionTest.cgi", "examples/SessionTest/MainPage/MainPage.ckd", "examples/SessionTest/MainPage/MainPage.html", "examples/SessionTest/MainPage/MainPage.rb", "examples/SessionTest/SessionErrorPage/SessionErrorPage.ckd", "examples/SessionTest/SessionErrorPage/SessionErrorPage.html", "examples/SessionTest/SessionErrorPage/SessionErrorPage.rb", "README", "README.ja", "CHANGES", "CHANGES.ja"]
s.require_paths = ["lib"]
diff -x CVS -ru rubygems/gemspecs/jabber4r.gemspec rubygems.new/gemspecs/jabber4r.gemspec
--- rubygems/gemspecs/jabber4r.gemspec 2004-03-14 21:01:46.000000000 +0100
+++ rubygems.new/gemspecs/jabber4r.gemspec 2004-04-04 11:43:48.000000000 +0200
@@ -4,6 +4,7 @@
s.name = 'jabber4r'
s.version = "0.7.0"
+ s.api_version = "0.7.0"
s.platform = Gem::Platform::RUBY
s.summary = "Jabber4r is a pure-Ruby Jabber client library"
s.requirements << 'Jabber server'
diff -x CVS -ru rubygems/gemspecs/linguistics.gemspec rubygems.new/gemspecs/linguistics.gemspec
--- rubygems/gemspecs/linguistics.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/linguistics.gemspec 2004-04-04 11:44:19.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'Linguistics'
s.version = "1.0.2"
+ s.api_version = "1.0.2"
s.author = "Michael Granger, Martin Chase"
s.email = "ged at FaerieMUD.org, stillflame at FaerieMUD.org"
s.homepage = "http://www.deveiate.org/code/linguistics.html"
diff -x CVS -ru rubygems/gemspecs/ook.gemspec rubygems.new/gemspecs/ook.gemspec
--- rubygems/gemspecs/ook.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/ook.gemspec 2004-04-04 11:44:27.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'Ook'
s.version = "1.0.2"
+ s.api_version = "1.0.2"
s.author = "Chad Fowler"
s.email = "chad at chadfowler.com"
s.homepage = "http://www.chadfowler.com/ruby/rubyook"
diff -x CVS -ru rubygems/gemspecs/progressbar.gemspec rubygems.new/gemspecs/progressbar.gemspec
--- rubygems/gemspecs/progressbar.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/progressbar.gemspec 2004-04-04 11:44:37.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'progressbar'
s.version = "0.0.3"
+ s.api_version = "0.0.3"
s.author = "Satoru Takabayashi"
s.email = "satoru at namazu.org"
s.homepage = "http://namazu.org/~satoru/ruby-progressbar/"
diff -x CVS -ru rubygems/gemspecs/redcloth.gemspec rubygems.new/gemspecs/redcloth.gemspec
--- rubygems/gemspecs/redcloth.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/redcloth.gemspec 2004-04-04 11:44:58.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'RedCloth'
s.version = "2.0.2"
+ s.api_version = "2.0.2"
s.author = "Why the Lucky Stiff"
s.email = "why at ruby-lang.org"
s.homepage = "http://www.whytheluckystiff.net/ruby/redcloth/"
diff -x CVS -ru rubygems/gemspecs/rublog.gemspec rubygems.new/gemspecs/rublog.gemspec
--- rubygems/gemspecs/rublog.gemspec 2004-04-03 15:06:11.000000000 +0200
+++ rubygems.new/gemspecs/rublog.gemspec 2004-04-04 11:45:08.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'rublog'
s.version = "0.8.0"
+ s.api_version = "0.8.0"
s.author = "Dave Thomas"
s.email = "dave at pragprog.com"
s.homepage = "http://www.pragprog.com/pragdave/Tech/Blog"
diff -x CVS -ru rubygems/gemspecs/ruby-doom.gemspec rubygems.new/gemspecs/ruby-doom.gemspec
--- rubygems/gemspecs/ruby-doom.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/ruby-doom.gemspec 2004-04-04 11:45:16.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'ruby-doom'
s.version = "0.0.7"
+ s.api_version = "0.0.7"
s.author = "Tom Copeland"
s.email = "tom at infoether.com"
s.homepage = "http://ruby-doom.rubyforge.org/"
diff -x CVS -ru rubygems/gemspecs/rubyjdwp.gemspec rubygems.new/gemspecs/rubyjdwp.gemspec
--- rubygems/gemspecs/rubyjdwp.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/rubyjdwp.gemspec 2004-04-04 11:45:26.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'RubyJDWP'
s.version = "0.0.1"
+ s.api_version = "0.0.1"
s.author = "Rich Kilmer, Chad Fowler"
s.email = "rich at infoether.com, chad at chadfowler.com"
s.homepage = "http://rubyforge.org/projects/rubyjdwp"
diff -x CVS -ru rubygems/gemspecs/statistics.gemspec rubygems.new/gemspecs/statistics.gemspec
--- rubygems/gemspecs/statistics.gemspec 2004-03-13 23:56:51.000000000 +0100
+++ rubygems.new/gemspecs/statistics.gemspec 2004-04-04 11:45:41.000000000 +0200
@@ -4,6 +4,7 @@
spec = Gem::Specification.new do |s|
s.name = 'statistics'
s.version = "2001.2.28"
+ s.api_version = "1.0.0"
s.author = "Gotoken"
s.email = "gotoken at notwork.org"
s.homepage = "http://www.notwork.org/~gotoken/ruby/p/statistics/"
More information about the Rubygems-developers
mailing list