File borgmatic.spec of Package borgmatic

# spec file for package borgmatic
# Copyright (c) 2020 SUSE LLC
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via

Name:           borgmatic
Version:        1.5.10
Release:        0
Summary:        Automation tool for borgbackup
License:        GPL-3.0-only
Group:          Productivity/Archiving/Backup
Patch0:         remove-invalid-test.patch
Patch1:         skip-tests.patch
# testing requirements
BuildRequires:  borgbackup
# To create the manpage
BuildRequires:  pandoc
BuildRequires:  python3 >= 3.4
BuildRequires:  python3-PyYAML
BuildRequires:  python3-appdirs
BuildRequires:  python3-atomicwrites
BuildRequires:  python3-attrs
BuildRequires:  python3-click
BuildRequires:  python3-colorama
BuildRequires:  python3-coverage
BuildRequires:  python3-docopt
BuildRequires:  python3-flake8
BuildRequires:  python3-flexmock
BuildRequires:  python3-mccabe
BuildRequires:  python3-more-itertools
BuildRequires:  python3-pluggy
BuildRequires:  python3-py
BuildRequires:  python3-pycodestyle
BuildRequires:  python3-pyflakes
BuildRequires:  python3-pykwalify
BuildRequires:  python3-pytest
BuildRequires:  python3-pytest-cov
BuildRequires:  python3-python-dateutil
BuildRequires:  python3-requests
BuildRequires:  python3-ruamel.yaml
BuildRequires:  python3-setuptools
BuildRequires:  python3-six
BuildRequires:  python3-toml
BuildRequires:  pkgconfig(libsystemd)
Requires:       borgbackup
Requires:       python3-colorama
Requires:       python3-pykwalify
Requires:       python3-requests
Requires:       python3-ruamel.yaml
Requires:       python3-setuptools
BuildArch:      noarch

borgmatic is a Python wrapper script for the Borg backup software
that initiates a backup, prunes any old backups according to a
retention policy, and validates backups for consistency. The script
supports specifying your settings in a declarative configuration file
rather than having to put them all on the command-line, and handles
common errors.

%setup -q
%patch0 -p1
%patch1 -p1

sed -i -e "s/colorama>=0.4.1,<0.5/colorama>=0.3.9/"
%if 0%{?suse_version} <= 1500
sed -i -e "s/^LogRateLimitIntervalSec=/#LogRateLimitIntervalSec=/" sample/systemd/borgmatic.service

# Make sample files use the borgmatic command on /usr/bin, not /usr/local/bin
perl -pi -e "s,PATH=\\$PATH:/usr/local/bin /root/.local/bin/borgmatic,/usr/bin/borgmatic," sample/cron/borgmatic
perl -pi -e "s,/root/.local/bin/borgmatic,/usr/bin/borgmatic," sample/systemd/borgmatic.service
perl -pi -e "s,=sleep,=/usr/bin/sleep," sample/systemd/borgmatic.service
perl -pi -e "s,=systemd-inhibit,=/usr/bin/systemd-inhibit," sample/systemd/borgmatic.service
perl -pi -e "s/ruamel.yaml>0.15.0,<0.17.0/ruamel.yaml/"
perl -pi -e "s/packages=find_packages\(\)/packages=find_packages(exclude=('tests*',))/"

# Create the manpage
pandoc -s -f markdown -t man -o borgmatic.1

python3 install --prefix=%{_prefix} --root=%{buildroot}
install -d %{buildroot}%{_sysconfdir}/borgmatic
install -d %{buildroot}%{_sysconfdir}/borgmatic.d
install -d %{buildroot}%{_docdir}/%{name}/sample/cron
install -m 0644 sample/cron/borgmatic %{buildroot}%{_docdir}/%{name}/sample/cron/
install -d %{buildroot}%{_unitdir}/
install -m 0644 sample/systemd/borgmatic* %{buildroot}%{_unitdir}/

install -D -m 0644 borgmatic.1 %{buildroot}%{_mandir}/man1/borgmatic.1
mkdir -p %{buildroot}/usr/sbin
ln -s /usr/sbin/service %{buildroot}/usr/sbin/rcborgmatic

# testing the build is a little awkward, since the original testsuite is based on tox and
# tox tries to create a virtual environment, that we need tight control on in order to get
# it to behave in our build system (offline mode, use site packages). OTOH, without the
# venv, we face problems with setuptools (borg uses pkg_resources to locate the installed
# package), while py.test relies on the usual module handling. <>
export LANG=en_US.UTF-8
python3 -m venv --system-site-packages --without-pip borgmatic-env
source borgmatic-env/bin/activate
python3 install
PYTHONPATH=$(pwd) py.test -v --pyargs borgmatic tests

%service_add_post borgmatic.service
if [ "$1" == 1 -a ! -f "/etc/borgmatic/config.yaml" ]; then
elif [ "$1" == 2 ]; then
    if [ -f "/etc/borgmatic/config" -a ! -f "/etc/borgmatic/config.yaml" ]; then
       echo "The configuration files have changed. /usr/bin/upgrade-borgmatic-config will be run now to upgrade the configuration to the new format."
       echo ""

%service_add_pre borgmatic.service

%service_del_preun borgmatic.service

%service_del_postun borgmatic.service

%license LICENSE
%config %ghost %{_sysconfdir}/borgmatic/config.yaml
%dir %{_sysconfdir}/borgmatic
%dir %{_sysconfdir}/borgmatic.d
%dir %{_docdir}/%{name}/sample
%dir %{_docdir}/%{name}/sample/cron