Skip to content

Commit

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

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

Users should not expect to ever retain anything in this directory.
  • Loading branch information
jackorp committed Nov 5, 2024
1 parent 8e5fe75 commit b4e4947
Show file tree
Hide file tree
Showing 3 changed files with 55 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 == 'IRB directory 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)
22 changes: 22 additions & 0 deletions repos/system_upgrade/el9toel10/tools/handlerubyirbsymlink
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/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 a symlink then unlink it so that RPM
# can freely create the directory.
if [ ! -L "$1" ]; then
return
fi

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

return 0
}


handle_dir /usr/share/ruby/irb

0 comments on commit b4e4947

Please sign in to comment.