Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libreoffice-share-linker for 
openSUSE:Factory checked in at 2023-03-25 18:53:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libreoffice-share-linker (Old)
 and      /work/SRC/openSUSE:Factory/.libreoffice-share-linker.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libreoffice-share-linker"

Sat Mar 25 18:53:58 2023 rev:6 rq:1073833 version:1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/libreoffice-share-linker/libreoffice-share-linker.changes
        2019-07-08 14:59:10.386366556 +0200
+++ 
/work/SRC/openSUSE:Factory/.libreoffice-share-linker.new.31432/libreoffice-share-linker.changes
     2023-03-25 18:53:59.858237777 +0100
@@ -1,0 +2,14 @@
+Thu Mar 16 07:30:43 UTC 2023 - Martin Liška <mli...@suse.cz>
+
+- Rewrite the script to Python:
+  * the current script is quite slow and delays libreoffice package
+    build where we install all packages and then uninstall them
+  * the script uses linkfile=${file/${datadir}/${libdir}} for replacement
+    of $datadir prefix with $libdir (if the $file path starts with $datadir;
+    if not, we end up with an empty string and we execute various shell
+    scripts with it
+  * the Python implementation should be more readable
+  * the Python version runs about 200s faster when it comes to libreoffice
+    package build (on a recent Ryzen 9 machine)
+
+-------------------------------------------------------------------

Old:
----
  link-to-ooo-home

New:
----
  libreoffice-share-linker.py

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libreoffice-share-linker.spec ++++++
--- /var/tmp/diff_new_pack.bUfIVW/_old  2023-03-25 18:54:00.406240641 +0100
+++ /var/tmp/diff_new_pack.bUfIVW/_new  2023-03-25 18:54:00.410240662 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libreoffice-share-linker
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -22,9 +22,10 @@
 Summary:        Script to link/unlink files to libreoffice home
 License:        MIT
 Group:          Productivity/Office/Suite
-Url:            http://www.opensuse.org/
-Source0:        link-to-ooo-home
+URL:            http://www.opensuse.org/
+Source0:        libreoffice-share-linker.py
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
+Requires:       python3
 BuildArch:      noarch
 
 %description
@@ -42,13 +43,13 @@
 # compat for migration from older releases openSUSE-13.1 and older
 mkdir -p %{buildroot}%{_datadir}/libreoffice
 pushd %{buildroot}%{_datadir}/libreoffice > /dev/null
-ln -s %{_bindir}/%{name} link-to-ooo-home
+ln -s %{_bindir}/%{name} libreoffice-share-linker.py
 popd > /dev/null
 
 %files
 %defattr(-,root,root)
 %{_bindir}/%{name}
 %dir %{_datadir}/libreoffice/
-%{_datadir}/libreoffice/link-to-ooo-home
+%{_datadir}/libreoffice/libreoffice-share-linker.py
 
 %changelog

++++++ libreoffice-share-linker.py ++++++
#!/usr/bin/env python3

import argparse
import subprocess
from pathlib import Path

PREFIX = '/usr/share/libreoffice'
DATADIR = '/usr/share'
LIBDIRS = (
    Path('/usr/lib/'),
    Path('/usr/lib64/'),
    Path('/usr/lib32/'),
)
LEFTOVER_DIRS = (
    Path('/usr/share/libreoffice/help'),
    Path('/usr/share/libreoffice/program'),
    Path('/usr/share/libreoffice/share'),
    Path('/usr/share/libreoffice'),
)

parser = argparse.ArgumentParser(description='This script (un)links or unlinks 
the given to/from libreoffice home')
parser.add_argument('filelist', help='List of files')
parser.add_argument('--unlink', action='store_true', help='Unlink the files 
during package removal')
args = parser.parse_args()

files = sorted([Path(x) for x in open(args.filelist).read().splitlines() if 
x.startswith(PREFIX)])


def get_relative_folder(file, libdir):
    try:
        return libdir / file.relative_to(DATADIR)
    except ValueError:
        return None


for libdir in LIBDIRS:
    # for each dir verify there is libreoffice folder, otherwise skip
    lodir = libdir / 'libreoffice'
    if not lodir.is_dir():
        continue

    # Decide if we are linking or wiping first
    if args.unlink:
        for file in files:
            link = get_relative_folder(file, libdir)
            if link:
                # first just remove the symlinks
                if link.is_symlink() and not link.is_dir():
                    link.unlink()

                # continue by wiping out all EMPTY dirs
                # we have to be sure it is not owned by anything else
                # doing in 2nd run to ensure avoiding collisions
                if link.is_dir() and not any(link.iterdir()):
                    r = subprocess.run(f'rpm -qf {file}', shell=True,
                                       stdout=subprocess.PIPE, 
stderr=subprocess.DEVNULL)
                    if not r.stdout:
                        link.rmdir()
    else:
        for file in files:
            # if we get ourselves folder then just create it
            # it might not be around so lets be safe
            link = get_relative_folder(file, libdir)
            if link:
                if file.is_dir():
                    if not link.exists():
                        link.mkdir(parents=True)
                        link.chmod(file.stat().st_mode)
                else:
                    # if the file is already there, skip it
                    # this is true when the parent folder is link
                    if not link.exists():
                        link.symlink_to(file)

    for leftover in LEFTOVER_DIRS:
        if leftover.is_dir() and not any(leftover.iterdir()):
            leftover.rmdir()

    # remove dangling links as they might happen when migratin from older
    # libreoffice versions
    # Run find directly as it's faster than os.walk run and a os.path.islink!
    subprocess.run(f'find {str(lodir)} -type l -xtype l -delete',
                   shell=True, stdout=subprocess.DEVNULL, 
stderr=subprocess.DEVNULL)

Reply via email to