summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Contreras2023-02-27 10:07:13 -0600
committerFelipe Contreras2023-02-27 10:29:40 -0600
commit3877c611391d7a2c6e22878321043f9809c40431 (patch)
treea9eb6162ecb6023608c91d87088cacad0390e496
downloadaur-3877c611391d7a2c6e22878321043f9809c40431.tar.gz
Initial commit
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
-rw-r--r--.SRCINFO23
-rw-r--r--.gitignore4
-rw-r--r--Gem.default_install.patch106
-rw-r--r--PKGBUILD84
-rw-r--r--operating_system.rb17
5 files changed, 234 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..02353bb9b1cc
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,23 @@
+pkgbase = rubygems-user
+ pkgdesc = Package management framework for Ruby (user default)
+ pkgver = 3.3.25
+ pkgrel = 1
+ url = https://rubygems.org/
+ arch = any
+ license = MIT
+ checkdepends = ruby-rake
+ checkdepends = ruby-webrick
+ checkdepends = git
+ checkdepends = cmake
+ depends = ruby
+ provides = rubygems=3.3.25
+ conflicts = rubygems
+ options = !emptydirs
+ source = https://github.com/rubygems/rubygems/archive/refs/tags/v3.3.25.tar.gz
+ source = Gem.default_install.patch
+ source = operating_system.rb
+ sha512sums = 7acfcd0b34ee522b3be22b59b2ae9b7f8ea31f850dc415365d93ef7fd80b751fdc504c3d539d5ce351e3d58802adf277577a134caac20b987d629a0b3864d395
+ sha512sums = b9bda74a64e13334fddb81fdfc42695a5528b2fadad84e733b7ec1419d131b2d2b97e0189f271ab83b0676ad4df862fc1c1491d7ac5d14f6a3f45f53a0b0eaa0
+ sha512sums = 3462dfe94f51d31dd616fae4107c7410d8513323dd8dffd657271a31363abd3b87d2150cda47fd9b1a8b9b63b4c57c03740e26941ac6ef55be9848fe56db8af4
+
+pkgname = rubygems-user
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..42707d81dc1b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+/pkg
+/src
+/*.pkg.tar.*
+/*.tar.gz
diff --git a/Gem.default_install.patch b/Gem.default_install.patch
new file mode 100644
index 000000000000..c4119e1ecb30
--- /dev/null
+++ b/Gem.default_install.patch
@@ -0,0 +1,106 @@
+From 37d2b35146c79f9af72dfaa47ccf6af7fab3d584 Mon Sep 17 00:00:00 2001
+From: Felipe Contreras <felipe.contreras@gmail.com>
+Date: Thu, 20 May 2021 16:26:25 -0500
+Subject: [PATCH] Add Gem.default_install
+
+Most people don't install gems in the default directory, but in the
+user's directory (--user-install), this can be configured by
+distributions using /etc/gemrc, but that doesn't work for bundler since
+it doesn't read gem configurations.
+
+The default installation directory should be Gem.user_dir, not
+Gem.default_dir, but changing this invariably would break backwards
+compatibility.
+
+Instead we can add another default directory which is where gems will be
+installed to by default.
+
+Gem.default_dir is where the system gems are installed to,
+Gem.default_install is where the gems installed by the user are
+installed to.
+
+The method Gem.default_install can be overridden by distributions to
+Gem.user_dir, therefore making all installations user installations by
+default (essentially the same as --user-install).
+
+This way both bundler and gem will install gems in the same directory by
+default without users having to manually set GEM_HOME to volatile
+locations such as $HOME/.local/share/gem/ruby/3.0.0.
+
+All distributions need to do is turn this new behavior on.
+
+If a user has sudo privileges, he/she can do --no-user-install to install
+gems in the system directory (Gem.default_dir), which is the current
+default behavior.
+
+The current behavior remains unaffected: gems are still installed to
+Gem.default_dir by default.
+
+Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
+---
+ lib/rubygems/defaults.rb | 7 +++++++
+ lib/rubygems/path_support.rb | 2 +-
+ test/rubygems/test_rubygems.rb | 16 ++++++++++++++++
+ 3 files changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
+index 4806ea6469..b7254937d2 100644
+--- a/lib/rubygems/defaults.rb
++++ b/lib/rubygems/defaults.rb
+@@ -8,6 +8,13 @@ module Gem
+ @pre_uninstall_hooks ||= []
+ @pre_install_hooks ||= []
+
++ ##
++ # Determines the default install directory
++
++ def self.default_install
++ Gem.default_dir
++ end
++
+ ##
+ # An Array of the default sources that come with RubyGems
+
+diff --git a/lib/rubygems/path_support.rb b/lib/rubygems/path_support.rb
+index d601e653c9..f8a1a0d783 100644
+--- a/lib/rubygems/path_support.rb
++++ b/lib/rubygems/path_support.rb
+@@ -23,7 +23,7 @@ class Gem::PathSupport
+ # hashtable, or defaults to ENV, the system environment.
+ #
+ def initialize(env)
+- @home = env["GEM_HOME"] || Gem.default_dir
++ @home = env["GEM_HOME"] || Gem.default_install
+
+ if File::ALT_SEPARATOR
+ @home = @home.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
+diff --git a/test/rubygems/test_rubygems.rb b/test/rubygems/test_rubygems.rb
+index 8bd116646f..5f539dc598 100644
+--- a/test/rubygems/test_rubygems.rb
++++ b/test/rubygems/test_rubygems.rb
+@@ -49,6 +49,22 @@ def self.default_dir
+ end
+ end
+
++ def test_operating_system_customizing_default_install
++ path = util_install_operating_system_rb <<-RUBY
++ module Gem
++ def self.default_install
++ Gem.user_dir
++ end
++ end
++ RUBY
++
++ assert system(
++ *ruby_with_rubygems_and_fake_operating_system_in_load_path(path),
++ "-e",
++ "raise unless Gem.dir == Gem.user_dir"
++ )
++ end
++
+ private
+
+ def util_install_operating_system_rb(content)
+--
+2.39.2
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..0e390ec11fe9
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,84 @@
+# Maintainer: Felipe Contreras <felipe.contreras@gmail.com>
+
+pkgname='rubygems-user'
+pkgver=3.3.25
+pkgrel=1
+pkgdesc='Package management framework for Ruby (user default)'
+arch=('any')
+url='https://rubygems.org/'
+license=('MIT')
+depends=('ruby')
+checkdepends=('ruby-rake' 'ruby-webrick' 'git' 'cmake')
+options=('!emptydirs')
+source=("https://github.com/rubygems/rubygems/archive/refs/tags/v${pkgver}.tar.gz"
+ 'Gem.default_install.patch'
+ 'operating_system.rb')
+sha512sums=('7acfcd0b34ee522b3be22b59b2ae9b7f8ea31f850dc415365d93ef7fd80b751fdc504c3d539d5ce351e3d58802adf277577a134caac20b987d629a0b3864d395'
+ 'b9bda74a64e13334fddb81fdfc42695a5528b2fadad84e733b7ec1419d131b2d2b97e0189f271ab83b0676ad4df862fc1c1491d7ac5d14f6a3f45f53a0b0eaa0'
+ '3462dfe94f51d31dd616fae4107c7410d8513323dd8dffd657271a31363abd3b87d2150cda47fd9b1a8b9b63b4c57c03740e26941ac6ef55be9848fe56db8af4')
+
+provides=("rubygems=$pkgver")
+conflicts=(rubygems)
+
+prepare() {
+ cd "rubygems-${pkgver}"
+
+ patch -p1 -i "$srcdir/Gem.default_install.patch"
+}
+
+check() {
+ cd "rubygems-${pkgver}"
+
+ # Remove unnecessary check
+ sed --in-place -e '/File.read("Manifest.txt")/,+2d' Rakefile
+
+ # Workaround because json default spec is wrongly built
+ # https://github.com/rubygems/rubygems/issues/5951
+ export GEM_COMMAND=gem
+
+ # The tests get confused with our operating_system.rb
+ mkdir -p test/rubygems/defaults/
+ touch test/rubygems/defaults/operating_system.rb
+
+ rake test
+}
+
+package() {
+ cd "rubygems-${pkgver}"
+
+ local _gemdir="$(ruby -e 'puts Gem.default_dir')"
+ local _extension_api_version="$(ruby -e 'puts Gem.extension_api_version')"
+ local _rubygems_dir="/usr/lib/ruby/${_extension_api_version}"
+
+ export GEM_HOME="${pkgdir}${_gemdir}"
+
+ install --verbose -d --mode=0755 \
+ "${GEM_HOME}" \
+ "${pkgdir}${_rubygems_dir}"
+
+ # define the current version as previous version to avoid printing the changelog
+ ruby setup.rb \
+ --destdir="${pkgdir}" \
+ --prefix="/usr" \
+ --previous-version="${pkgver}" \
+ --no-regenerate-binstubs \
+ --ri \
+ --verbose
+
+ # fix package structure
+ mv --verbose "${pkgdir}/usr/lib/rubygems.rb" "${pkgdir}${_rubygems_dir}"
+ mv --verbose "${pkgdir}/usr/lib/rubygems" "${pkgdir}${_rubygems_dir}"
+
+ install --verbose -D --mode=0644 $srcdir/operating_system.rb --target-directory ${pkgdir}${_rubygems_dir}/rubygems/defaults/
+
+ # cleanup - remove any bundler references as they are provided by https://archlinux.org/packages/community/any/ruby-bundler/
+ rm --recursive \
+ "${pkgdir}/usr/bin/"bundle* \
+ "${pkgdir}/usr/gems" \
+ "${pkgdir}/usr/lib/bundler.rb" \
+ "${pkgdir}/usr/lib/bundler" \
+ "${pkgdir}/usr/specifications"
+
+ install --verbose -D --mode=0644 LICENSE.txt MIT.txt --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
+ install --verbose -D --mode=0644 *.md --target-directory "${pkgdir}/usr/share/doc/${pkgname}"
+}
diff --git a/operating_system.rb b/operating_system.rb
new file mode 100644
index 000000000000..b16af099f2d9
--- /dev/null
+++ b/operating_system.rb
@@ -0,0 +1,17 @@
+module Gem
+
+ class << self
+
+ remove_method :install_extension_in_lib
+ def install_extension_in_lib
+ false
+ end
+
+ remove_method :default_install
+ def default_install
+ @default_install ||= user_dir
+ end
+
+ end
+
+end