Skip to content

Commit

Permalink
Add el8toel9 actor to handle directory -> symlink with ruby IRB.
Browse files Browse the repository at this point in the history
The `/usr/share/ruby/irb/` directory is a symlink in RHEL 9.

Simply remove the directory to then let the RPM mechanism create the
correct symlink on update.

Users should not expect to ever retain anything in this directory.
  • Loading branch information
jackorp committed May 3, 2023
1 parent 035f5a9 commit efcaff7
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from leapp.actors import Actor
from leapp.models import DNFWorkaround
from leapp.tags import FactsPhaseTag, IPUWorkflowTag


class RegisterRubyIRBAdjustment(Actor):
"""
Registers a workaround which will adjust the Ruby IRB directories during the upgrade.
"""

name = 'register_ruby_irb_adjustment'
consumes = ()
produces = (DNFWorkaround,)
tags = (IPUWorkflowTag, FactsPhaseTag)

def process(self):
self.produce(
DNFWorkaround(
display_name='IRB directory fix',
script_path=self.get_tool_path('handlerubyirbsymlink'),
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import os.path

from leapp.models import DNFWorkaround


def test_register_ruby_irb_adjustments(current_actor_context):
current_actor_context.run()
assert len(current_actor_context.consume(DNFWorkaround)) == 1
assert current_actor_context.consume(DNFWorkaround)[0].display_name == 'ruby irb symlink fix'
assert os.path.basename(current_actor_context.consume(DNFWorkaround)[0].script_path) == 'handlerubyirbsymlink'
assert os.path.exists(current_actor_context.consume(DNFWorkaround)[0].script_path)
23 changes: 23 additions & 0 deletions repos/system_upgrade/el8toel9/tools/handlerubyirbsymlink
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/usr/bin/bash -e

# just in case of hidden files.. not sure why would someone do that, it's more
# like forgotten cache file possibility, but rather do that..
shopt -s dotglob

handle_dir() {
# Check that $1 is not already a symlink
# then remove the directory so that RPM can freely create the
# symlink.
if [ "$(readlink "$1")" == "/usr/share/gems/gems/irb-1.3.5" ]; then
return
fi

# There is no configuration or anything that the user should ever customize
# and expect to retain.
rm -rf "$1"

return 0
}


handle_dir /usr/share/ruby/irb

0 comments on commit efcaff7

Please sign in to comment.