From 6f6d0c432375207ded4de069ce6dc410db69f10bc3e8391ab2bc6b914f758917 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Thu, 12 Jun 2025 09:05:23 +0200 Subject: [PATCH] Fix zypper conflict about directory -> symlink workaround (bsc#1244458) --- kernel-firmware-nvidia.changes | 5 ++++ kernel-firmware-nvidia.spec | 55 +++++++++++++--------------------- post | 55 +++++++++++++--------------------- 3 files changed, 47 insertions(+), 68 deletions(-) diff --git a/kernel-firmware-nvidia.changes b/kernel-firmware-nvidia.changes index 300d8de..fd9b8c2 100644 --- a/kernel-firmware-nvidia.changes +++ b/kernel-firmware-nvidia.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Thu Jun 12 07:05:23 UTC 2025 - Takashi Iwai + +- Fix zypper conflict about directory -> symlink workaround (bsc#1244458) + ------------------------------------------------------------------- Thu Jun 5 10:45:00 UTC 2025 - Takashi Iwai diff --git a/kernel-firmware-nvidia.spec b/kernel-firmware-nvidia.spec index 0c32d12..857d0c8 100644 --- a/kernel-firmware-nvidia.spec +++ b/kernel-firmware-nvidia.spec @@ -169,41 +169,28 @@ scripts/install-licenses.sh nvidia %{buildroot}%{_licensedir}/%{name} install -c -D -m 0644 WHENCE %{buildroot}%{_licensedir}/%{name}/WHENCE install -c -D -m 0644 README.md %{buildroot}%{_docdir}/%{name}/README.md -%pre -# ugly workaround for changing nvidia/ad103 & co to symlinks (bsc#1243843) -for d in ad103 ad104 ad106 ad107; do - if [ ! -L %{_firmwaredir}/nvidia/$d ]; then - if [ -d %{_firmwaredir}/nvidia/$d ]; then - mv %{_firmwaredir}/nvidia/$d %{_firmwaredir}/nvidia/$d.xxxold - fi - fi -done - -%post -# ugly workaround (bsc#1243843) -if [ -d %{_firmwaredir}/nvidia/ad103.xxxold ]; then - for d in ad103 ad104 ad106 ad107; do - mv %{_firmwaredir}/nvidia/$d %{_firmwaredir}/nvidia/$d.xxxnew - if [ -d %{_firmwaredir}/nvidia/$d.xxxold ]; then - mv %{_firmwaredir}/nvidia/$d.xxxold %{_firmwaredir}/nvidia/$d - fi - done +%pretrans -p +if not macros then + fwdir = "/lib/firmware" else - %{?regenerate_initrd_post} -fi - -%postun -%{?regenerate_initrd_post} - -%posttrans -# ugly workaround (bsc#1243843) -for d in ad103 ad104 ad106 ad107; do - if [ -L %{_firmwaredir}/nvidia/$d.xxxnew ]; then - rm -rf %{_firmwaredir}/nvidia/$d - mv %{_firmwaredir}/nvidia/$d.xxxnew %{_firmwaredir}/nvidia/$d - fi -done -%{?regenerate_initrd_posttrans} + fwdir = macros._firmwaredir +end +paths = {"ad103", "ad104", "ad106", "ad107"} +for i = 1, 4 do + path = fwdir .. "/nvidia/" .. paths[i] + st = posix.stat(path) + if st and st.type == "directory" then + status = os.rename(path, path .. ".rpmmoved") + if not status then + suffix = 0 + while not status do + suffix = suffix + 1 + status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) + end + os.rename(path, path .. ".rpmmoved") + end + end +end %files %doc %{_docdir}/%{name} diff --git a/post b/post index 2c7261c..668cd4a 100644 --- a/post +++ b/post @@ -1,35 +1,22 @@ -%pre -# ugly workaround for changing nvidia/ad103 & co to symlinks (bsc#1243843) -for d in ad103 ad104 ad106 ad107; do - if [ ! -L %{_firmwaredir}/nvidia/$d ]; then - if [ -d %{_firmwaredir}/nvidia/$d ]; then - mv %{_firmwaredir}/nvidia/$d %{_firmwaredir}/nvidia/$d.xxxold - fi - fi -done - -%post -# ugly workaround (bsc#1243843) -if [ -d %{_firmwaredir}/nvidia/ad103.xxxold ]; then - for d in ad103 ad104 ad106 ad107; do - mv %{_firmwaredir}/nvidia/$d %{_firmwaredir}/nvidia/$d.xxxnew - if [ -d %{_firmwaredir}/nvidia/$d.xxxold ]; then - mv %{_firmwaredir}/nvidia/$d.xxxold %{_firmwaredir}/nvidia/$d - fi - done +%pretrans -p +if not macros then + fwdir = "/lib/firmware" else - %{?regenerate_initrd_post} -fi - -%postun -%{?regenerate_initrd_post} - -%posttrans -# ugly workaround (bsc#1243843) -for d in ad103 ad104 ad106 ad107; do - if [ -L %{_firmwaredir}/nvidia/$d.xxxnew ]; then - rm -rf %{_firmwaredir}/nvidia/$d - mv %{_firmwaredir}/nvidia/$d.xxxnew %{_firmwaredir}/nvidia/$d - fi -done -%{?regenerate_initrd_posttrans} + fwdir = macros._firmwaredir +end +paths = {"ad103", "ad104", "ad106", "ad107"} +for i = 1, 4 do + path = fwdir .. "/nvidia/" .. paths[i] + st = posix.stat(path) + if st and st.type == "directory" then + status = os.rename(path, path .. ".rpmmoved") + if not status then + suffix = 0 + while not status do + suffix = suffix + 1 + status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) + end + os.rename(path, path .. ".rpmmoved") + end + end +end -- 2.49.0