extra/ruby to 2.1.0-2.1, fixes #705

This commit is contained in:
Kevin Mihelich 2014-03-01 19:01:35 +00:00
parent 6bb25ec4d1
commit b5067688f8
6 changed files with 236 additions and 0 deletions

View file

@ -0,0 +1,84 @@
From f5bbf838c8b13369a61c6756355305388df5824f Mon Sep 17 00:00:00 2001
From: Tim Moore <tmoore@incrementalism.net>
Date: Tue, 31 Dec 2013 17:39:45 +1100
Subject: [PATCH] Fix installing gem from file without dependencies.
Commit 9437ccc fixed the ability to install remote gems that was accidentally
broken by d97fba1, but in the process accidentally broke installing from local
files.
This also changes the order to check for local first, to avoid unnecessary
network requests in the case where the gem is local.
Closes #760.
---
lib/rubygems/commands/install_command.rb | 20 ++++++++++++--------
test/rubygems/test_gem_commands_install_command.rb | 14 ++++++++++++++
2 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb
index 4485eb1..8219eef 100644
--- a/lib/rubygems/commands/install_command.rb
+++ b/lib/rubygems/commands/install_command.rb
@@ -228,7 +228,18 @@ to write the specification by hand. For example:
def install_gem_without_dependencies name, req # :nodoc:
gem = nil
- if remote? then
+ if local? then
+ if name =~ /\.gem$/ and File.file? name then
+ source = Gem::Source::SpecificFile.new name
+ spec = source.spec
+ else
+ source = Gem::Source::Local.new
+ spec = source.find_gem name, req
+ end
+ gem = source.download spec if spec
+ end
+
+ if remote? and not gem then
dependency = Gem::Dependency.new name, req
dependency.prerelease = options[:prerelease]
@@ -236,13 +247,6 @@ to write the specification by hand. For example:
gem = fetcher.download_to_cache dependency
end
- if local? and not gem then
- source = Gem::Source::Local.new
- spec = source.find_gem name, req
-
- gem = source.download spec
- end
-
inst = Gem::Installer.new gem, options
inst.install
diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb
index 76ea6b4..a5917c0 100644
--- a/test/rubygems/test_gem_commands_install_command.rb
+++ b/test/rubygems/test_gem_commands_install_command.rb
@@ -560,6 +560,20 @@ ERROR: Possible alternatives: non_existent_with_hint
assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
end
+ def test_install_gem_ignore_dependencies_specific_file
+ spec = quick_spec 'a', 2
+
+ util_build_gem spec
+
+ FileUtils.mv spec.cache_file, @tempdir
+
+ @cmd.options[:ignore_dependencies] = true
+
+ @cmd.install_gem File.join(@tempdir, spec.file_name), nil
+
+ assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
+ end
+
def test_parses_requirement_from_gemname
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
--
1.8.5.2

View file

@ -0,0 +1,24 @@
diff --git a/internal.h b/internal.h
index 40916a5..785be49 100644
--- a/internal.h
+++ b/internal.h
@@ -250,16 +250,8 @@ struct rb_subclass_entry {
rb_subclass_entry_t *next;
};
-#if defined(HAVE_LONG_LONG)
-typedef unsigned LONG_LONG rb_serial_t;
-#define SERIALT2NUM ULL2NUM
-#elif defined(HAVE_UINT64_T)
-typedef uint64_t rb_serial_t;
-#define SERIALT2NUM SIZET2NUM
-#else
typedef unsigned long rb_serial_t;
#define SERIALT2NUM ULONG2NUM
-#endif
struct rb_classext_struct {
struct st_table *iv_index_tbl;
--
1.9.0

88
extra/ruby/PKGBUILD Normal file
View file

@ -0,0 +1,88 @@
# Maintainer: Thomas Dziedzic <gostrc@gmail.com>
# Contributor: Allan McRae <allan@archlinux.org>
# Contributor: John Proctor <jproctor@prium.net>
# Contributor: Jeramy Rutley <jrutley@gmail.com>
# ALARM: Kevin Mihelich <kevin@archlinuxarm.org>
# - patch to fix building against readline 6.3
# - patch to fix running ruby on v5 (#705)
pkgname=('ruby' 'ruby-docs')
pkgver=2.1.0
pkgrel=2.1
arch=('i686' 'x86_64')
url='http://www.ruby-lang.org/en/'
license=('BSD' 'custom')
# disable ruby tk since 1.9.3 it has caused a segfault on require 'tk'
# https://bugs.ruby-lang.org/issues/8000
# wait for upstream to start supporting tk 8.6
makedepends=('gdbm' 'openssl' 'libffi' 'doxygen' 'graphviz' 'libyaml') # 'tk'
options=('!emptydirs' '!makeflags' 'staticlibs')
source=("http://cache.ruby-lang.org/pub/ruby/ruby-${pkgver}.tar.bz2"
'gemrc'
'0001-Fix-installing-gem-from-file-without-dependencies.patch'
'changeset_r45225.diff'
'0002-Use-only-unsigned-long-for-rb_serial_t.patch')
md5sums=('1546eeb763ac7754365664be763a1e8f'
'6fb8e7a09955e0f64be3158fb4a27e7a'
'61a1507f260866805fc6451c14733b25'
'64839e135447accd2e0568c563e12d23'
'f6f9c200c5e9afc4d5b21575da4821a2')
build() {
cd ruby-${pkgver}
# fixes https://github.com/rubygems/rubygems/issues/760
patch -Np1 -i ${srcdir}/0001-Fix-installing-gem-from-file-without-dependencies.patch
# fixes https://bugs.ruby-lang.org/issues/9578
patch -Np0 -i ../changeset_r45225.diff
# fixes https://bugs.ruby-lang.org/issues/9507
[[ $CARCH == 'arm' ]] && patch -Np1 -i ../0002-Use-only-unsigned-long-for-rb_serial_t.patch
PKG_CONFIG=/usr/bin/pkg-config ./configure \
--prefix=/usr \
--sysconfdir=/etc \
--enable-shared \
--disable-rpath \
--with-dbm-type=gdbm_compat
make
}
check() {
cd ruby-${pkgver}
make test
}
package_ruby() {
pkgdesc='An object-oriented language for quick and easy programming'
depends=('gdbm' 'openssl' 'libffi' 'libyaml')
optdepends=('ruby-docs: Ruby documentation') # 'tk: for Ruby/TK'
provides=('rubygems' 'rake')
conflicts=('rake')
backup=('etc/gemrc')
install='ruby.install'
cd ruby-${pkgver}
make DESTDIR="${pkgdir}" install-nodoc
install -D -m644 ${srcdir}/gemrc "${pkgdir}/etc/gemrc"
install -D -m644 COPYING "${pkgdir}/usr/share/licenses/ruby/LICENSE"
install -D -m644 BSDL "${pkgdir}/usr/share/licenses/ruby/BSDL"
}
package_ruby-docs() {
pkgdesc='Documentation files for ruby'
cd ruby-${pkgver}
make DESTDIR="${pkgdir}" install-doc install-capi
install -D -m644 COPYING "${pkgdir}/usr/share/licenses/ruby-docs/LICENSE"
install -D -m644 BSDL "${pkgdir}/usr/share/licenses/ruby-docs/BSDL"
}

View file

@ -0,0 +1,13 @@
Index: ext/readline/readline.c
===================================================================
--- ext/readline/readline.c (revision 45224)
+++ ext/readline/readline.c (revision 45225)
@@ -1974,7 +1974,7 @@
rl_attempted_completion_function = readline_attempted_completion_function;
#if defined(HAVE_RL_PRE_INPUT_HOOK)
- rl_pre_input_hook = (Function *)readline_pre_input_hook;
+ rl_pre_input_hook = (rl_hook_func_t *)readline_pre_input_hook;
#endif
#ifdef HAVE_RL_CATCH_SIGNALS
rl_catch_signals = 0;

5
extra/ruby/gemrc Normal file
View file

@ -0,0 +1,5 @@
# Read about the gemrc format at http://docs.rubygems.org/read/chapter/11
# --user-install is used to install to $HOME/.gem/ by default since we want to separate
# pacman installed gems and gem installed gems
gem: --user-install

22
extra/ruby/ruby.install Normal file
View file

@ -0,0 +1,22 @@
#!/bin/sh
print_gem_default_target() {
echo 'The default location of gem installs is $HOME/.gem/ruby'
echo 'Add the following line to your PATH if you plan to install using gem'
echo '$(ruby -rubygems -e "puts Gem.user_dir")/bin'
echo 'If you want to install to the system wide location, you must either:'
echo 'edit /etc/gemrc or run gem with the --no-user-install flag.'
}
# arg 1: the new package version
post_install() {
print_gem_default_target
}
# arg 1: the new package version
# arg 2: the old package version
post_upgrade() {
if [ "$(vercmp $2 1.9.3_p125-4)" -lt 0 ]; then
print_gem_default_target
fi
}