diff options
author | Felipe Contreras | 2023-02-27 10:07:13 -0600 |
---|---|---|
committer | Felipe Contreras | 2023-02-27 10:29:40 -0600 |
commit | 3877c611391d7a2c6e22878321043f9809c40431 (patch) | |
tree | a9eb6162ecb6023608c91d87088cacad0390e496 | |
download | aur-3877c611391d7a2c6e22878321043f9809c40431.tar.gz |
Initial commit
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
-rw-r--r-- | .SRCINFO | 23 | ||||
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | Gem.default_install.patch | 106 | ||||
-rw-r--r-- | PKGBUILD | 84 | ||||
-rw-r--r-- | operating_system.rb | 17 |
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 |