Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package snapper for openSUSE:Factory checked in at 2021-04-10 15:26:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/snapper (Old) and /work/SRC/openSUSE:Factory/.snapper.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "snapper" Sat Apr 10 15:26:15 2021 rev:125 rq:883887 version:0.8.16 Changes: -------- --- /work/SRC/openSUSE:Factory/snapper/snapper.changes 2021-03-24 16:10:02.279755511 +0100 +++ /work/SRC/openSUSE:Factory/.snapper.new.2401/snapper.changes 2021-04-10 15:26:38.078326037 +0200 @@ -1,0 +2,15 @@ +Thu Apr 08 14:05:19 CEST 2021 - [email protected] + +- move org.opensuse.Snapper.conf from /etc to /usr (bsc#1183398 and + gh#openSUSE/snapper#492) +- run boot.service iff root config exists (gh#openSUSE/snapper#630) + +------------------------------------------------------------------- +Wed Apr 07 10:24:33 CEST 2021 - [email protected] + +- avoid redundant quota rescans for same btrfs (see + gh#openSUSE/snapper#507) +- allow absolute sizes for SPACE_LIMIT and FREE_LIMIT + (gh#openSUSE/snapper#507) + +------------------------------------------------------------------- @@ -5,0 +21 @@ +- version 0.8.16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ snapper.spec ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:38.846326940 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:38.850326945 +0200 @@ -57,6 +57,7 @@ %if 0%{?fedora_version} >= 24 || 0%{?centos_version} >= 800 BuildRequires: glibc-langpack-de BuildRequires: glibc-langpack-en +BuildRequires: glibc-langpack-fr %endif %if ! 0%{?mandriva_version} %if 0%{?fedora_version} >= 23 @@ -87,6 +88,7 @@ %endif Requires: diffutils Requires: libsnapper5 = %version +Requires: systemd %if 0%{?suse_version} Recommends: logrotate snapper-zypp-plugin Supplements: btrfsprogs @@ -192,7 +194,10 @@ %endif %config(noreplace) %{_sysconfdir}/logrotate.d/snapper %{_unitdir}/snapper*.* -%config /etc/dbus-1/system.d/org.opensuse.Snapper.conf +%if 0%{?suse_version} <= 1500 +%dir %{_datadir}/dbus-1/system.d +%endif +%{_datadir}/dbus-1/system.d/org.opensuse.Snapper.conf %{_datadir}/dbus-1/system-services/org.opensuse.Snapper.service %package -n libsnapper5 ++++++ debian.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/debian/snapper.install new/debian/snapper.install --- old/debian/snapper.install 2021-03-19 01:00:00.000000000 +0100 +++ new/debian/snapper.install 2021-04-08 02:00:00.000000000 +0200 @@ -1,9 +1,9 @@ etc/cron.daily/snapper etc/cron.hourly/snapper -etc/dbus-1/system.d/org.opensuse.Snapper.conf etc/logrotate.d/snapper usr/bin/snapper usr/sbin/snapperd +usr/share/dbus-1/system.d/org.opensuse.Snapper.conf usr/share/dbus-1/system-services/org.opensuse.Snapper.service usr/share/locale/*/LC_MESSAGES/snapper.mo usr/lib/systemd/system/snapperd.service ++++++ snapper-0.8.16.tar.bz2 ++++++ ++++ 1815 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/LIBVERSION new/snapper-0.8.16/LIBVERSION --- old/snapper-0.8.16/LIBVERSION 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/LIBVERSION 2021-04-08 02:00:00.000000000 +0200 @@ -1 +1 @@ -5.2.1 +5.3.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/cleanup.cc new/snapper-0.8.16/client/cleanup.cc --- old/snapper-0.8.16/client/cleanup.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/cleanup.cc 2021-04-08 02:00:00.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2011-2014] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -30,6 +30,7 @@ #include "snapper/Snapper.h" #include "utils/Range.h" +#include "utils/Limit.h" #include "utils/equal-date.h" #include "utils/HumanString.h" #include "cleanup.h" @@ -46,28 +47,39 @@ virtual bool is_degenerated() const { return true; } time_t min_age; - double space_limit; - double free_limit; + MaxUsedLimit space_limit; + MinFreeLimit free_limit; - template<typename Type> - void read(const ProxyConfig& config, const char* name, Type& value) + + void read(const ProxyConfig& config, const char* name, long int& value) { const map<string, string>& raw = config.getAllValues(); map<string, string>::const_iterator pos = raw.find(name); if (pos != raw.end()) pos->second >> value; } -}; -Parameters::Parameters(const ProxySnapper* snapper) - : min_age(1800), space_limit(0.5), free_limit(0.2) -{ - ProxyConfig config = snapper->getConfig(); + template<typename Type> + void read(const ProxyConfig& config, const char* name, Type& value) + { + const map<string, string>& raw = config.getAllValues(); + map<string, string>::const_iterator pos = raw.find(name); + if (pos != raw.end()) + { + try + { + value.parse(pos->second); + } + catch (const Exception& e) + { + SN_CAUGHT(e); - read(config, "SPACE_LIMIT", space_limit); - read(config, "FREE_LIMIT", free_limit); -} + cerr << "failed to parse \"" << pos->second << "\" for \"" << name << "\"" << endl; + } + } + } +}; ostream& @@ -79,6 +91,16 @@ } +Parameters::Parameters(const ProxySnapper* snapper) + : min_age(1800), space_limit(0.5), free_limit(0.2) +{ + ProxyConfig config = snapper->getConfig(); + + read(config, "SPACE_LIMIT", space_limit); + read(config, "FREE_LIMIT", free_limit); +} + + class Cleaner { public: @@ -245,7 +267,7 @@ return false; } - return parameters.space_limit < 1.0; + return parameters.space_limit.is_enabled(); } @@ -257,14 +279,12 @@ if (quota_data.size == 0) return true; - double fraction = (double)(quota_data.used) / (double)(quota_data.size); - - bool satisfied = fraction < parameters.space_limit; + bool satisfied = parameters.space_limit.is_satisfied(quota_data.size, quota_data.used); #ifdef VERBOSE_LOGGING - cout << byte_to_humanstring(quota_data.size, 2) << ", " - << byte_to_humanstring(quota_data.used, 2) << ", " - << fraction << ", " << satisfied << '\n'; + cout << byte_to_humanstring(quota_data.size, true, 2) << ", " + << byte_to_humanstring(quota_data.used, true, 2) << ", " + << satisfied << '\n'; #endif return satisfied; @@ -289,7 +309,7 @@ return false; } - return parameters.free_limit > 0.0; + return parameters.free_limit.is_enabled(); } @@ -301,14 +321,12 @@ if (free_space_data.size == 0) return true; - double fraction = (double)(free_space_data.free) / (double)(free_space_data.size); - - bool satisfied = fraction > parameters.free_limit; + bool satisfied = parameters.free_limit.is_satisfied(free_space_data.size, free_space_data.free); #ifdef VERBOSE_LOGGING - cout << byte_to_humanstring(free_space_data.size, 2) << ", " - << byte_to_humanstring(free_space_data.free, 2) << ", " - << fraction << ", " << satisfied << '\n'; + cout << byte_to_humanstring(free_space_data.size, true, 2) << ", " + << byte_to_humanstring(free_space_data.free, true, 2) << ", " + << satisfied << '\n'; #endif return satisfied; @@ -448,6 +466,15 @@ }; +ostream& +operator<<(ostream& s, const NumberParameters& parameters) +{ + return s << dynamic_cast<const Parameters&>(parameters) << '\n' + << "limit:" << parameters.limit << '\n' + << "limit-important:" << parameters.limit_important; +} + + NumberParameters::NumberParameters(const ProxySnapper* snapper) : Parameters(snapper), limit(50), limit_important(10) { @@ -457,15 +484,10 @@ read(config, "NUMBER_LIMIT", limit); read(config, "NUMBER_LIMIT_IMPORTANT", limit_important); -} - -ostream& -operator<<(ostream& s, const NumberParameters& parameters) -{ - return s << dynamic_cast<const Parameters&>(parameters) << '\n' - << "limit:" << parameters.limit << '\n' - << "limit-important:" << parameters.limit_important; +#ifdef VERBOSE_LOGGING + cout << *this << '\n'; +#endif } @@ -571,6 +593,18 @@ }; +ostream& +operator<<(ostream& s, const TimelineParameters& parameters) +{ + return s << dynamic_cast<const Parameters&>(parameters) << '\n' + << "limit-hourly:" << parameters.limit_hourly << '\n' + << "limit-daily:" << parameters.limit_daily << '\n' + << "limit-weekly:" << parameters.limit_weekly << '\n' + << "limit-monthly:" << parameters.limit_monthly << '\n' + << "limit-yearly:" << parameters.limit_yearly; +} + + TimelineParameters::TimelineParameters(const ProxySnapper* snapper) : Parameters(snapper), limit_hourly(10), limit_daily(10), limit_monthly(10), limit_weekly(0), limit_yearly(10) @@ -584,18 +618,10 @@ read(config, "TIMELINE_LIMIT_WEEKLY", limit_weekly); read(config, "TIMELINE_LIMIT_MONTHLY", limit_monthly); read(config, "TIMELINE_LIMIT_YEARLY", limit_yearly); -} - -ostream& -operator<<(ostream& s, const TimelineParameters& parameters) -{ - return s << dynamic_cast<const Parameters&>(parameters) << '\n' - << "limit-hourly:" << parameters.limit_hourly << '\n' - << "limit-daily:" << parameters.limit_daily << '\n' - << "limit-weekly:" << parameters.limit_weekly << '\n' - << "limit-monthly:" << parameters.limit_monthly << '\n' - << "limit-yearly:" << parameters.limit_yearly; +#ifdef VERBOSE_LOGGING + cout << *this << '\n'; +#endif } @@ -781,6 +807,10 @@ ProxyConfig config = snapper->getConfig(); read(config, "EMPTY_PRE_POST_MIN_AGE", min_age); + +#ifdef VERBOSE_LOGGING + cout << *this << '\n'; +#endif } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/cmd-cleanup.cc new/snapper-0.8.16/client/cmd-cleanup.cc --- old/snapper-0.8.16/client/cmd-cleanup.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/cmd-cleanup.cc 2021-04-08 02:00:00.000000000 +0200 @@ -239,7 +239,7 @@ { try { - free_space = humanstring_to_byte(opt->second); + free_space = humanstring_to_byte(opt->second, false); } catch (const Exception& e) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/cmd-list.cc new/snapper-0.8.16/client/cmd-list.cc --- old/snapper-0.8.16/client/cmd-list.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/cmd-list.cc 2021-04-08 02:00:00.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2011-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -27,6 +27,7 @@ #include "snapper/SnapperTmpl.h" #include "dbus/DBusMessage.h" #include "utils/HumanString.h" +#include <snapper/BtrfsUtils.h> #include "utils/text.h" #include "GlobalOptions.h" @@ -144,9 +145,18 @@ bool used_space_broken = true; + /** + * For all btrfses (by btrfs filesystem uuid) keep track of whether used space + * is broken. + */ + static map<Uuid, bool> used_space_broken_by_uuid; + }; + map<Uuid, bool> OutputHelper::used_space_broken_by_uuid; + + OutputHelper::OutputHelper(const ProxySnapper* snapper, const vector<Column>& columns) : snapper(snapper), snapshots(snapper->getSnapshots()), default_snapshot(snapshots.end()), active_snapshot(snapshots.end()) @@ -169,18 +179,39 @@ } // Calculate the used space iff columns include USED_SPACE. Also sets - // used_space_broken for use in skip_column. + // used_space_broken (even cached) for use in skip_column. if (find(columns.begin(), columns.end(), Column::USED_SPACE) != columns.end()) { + string subvolume = snapper->getConfig().getSubvolume(); + try { - snapper->calculateUsedSpace(); - used_space_broken = false; + Uuid uuid = BtrfsUtils::get_uuid(subvolume); + + map<Uuid, bool>::const_iterator pos = used_space_broken_by_uuid.find(uuid); + if (pos != used_space_broken_by_uuid.end()) + { + used_space_broken = pos->second; + } + else + { + try + { + snapper->calculateUsedSpace(); + used_space_broken = used_space_broken_by_uuid[uuid] = false; + } + catch (const QuotaException& e) + { + SN_CAUGHT(e); + + used_space_broken_by_uuid[uuid] = true; + } + } } - catch (const QuotaException& e) + catch (const runtime_error& e) { - SN_CAUGHT(e); + // getting uuid failed, maybe it is a LVM config } } } @@ -385,7 +416,7 @@ uint64_t used_space = snapshot.getUsedSpace(); if (output_options.human) - return byte_to_humanstring(used_space, 2); + return byte_to_humanstring(used_space, false, 2); else return used_space; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/utils/HumanString.cc new/snapper-0.8.16/client/utils/HumanString.cc --- old/snapper-0.8.16/client/utils/HumanString.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/utils/HumanString.cc 2021-04-08 02:00:00.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2004-2014] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -21,6 +21,7 @@ */ +#include <locale> #include <cmath> #include <vector> #include <sstream> @@ -52,8 +53,10 @@ vector<string> - get_all_suffixes(int i, bool all = true) + get_all_suffixes(int i, bool all = true, bool classic = false) { + auto _ = [classic](const char* msg) { return classic ? msg : ::_(msg); }; + vector<string> ret; switch (i) @@ -145,9 +148,9 @@ string - get_suffix(int i) + get_suffix(int i, bool classic) { - return get_all_suffixes(i, false).front(); + return get_all_suffixes(i, false, classic).front(); } @@ -165,9 +168,10 @@ // according to the suffix. Do all required error checks. pair<bool, unsigned long long> - parse_i(const string& str, int i) + parse_i(const string& str, int i, const locale& loc) { istringstream s(str); + s.imbue(loc); unsigned long long v; s >> v; @@ -196,9 +200,10 @@ pair<bool, unsigned long long> - parse_f(const string& str, int i) + parse_f(const string& str, int i, const locale& loc) { istringstream s(str); + s.imbue(loc); long double v; s >> v; @@ -233,13 +238,15 @@ string - byte_to_humanstring(unsigned long long size, int precision) + byte_to_humanstring(unsigned long long size, bool classic, int precision) { // Calculate the index of the suffix to use. The index increases by 1 // when the number of leading zeros decreases by 10. static_assert(sizeof(size) == 8, "unsigned long long not 64 bit"); + const locale loc = classic ? locale::classic() : locale(); + int i = size > 0 ? (64 - (clz(size) + 1)) / 10 : 0; if (i == 0) @@ -247,7 +254,8 @@ unsigned long long v = size >> 10 * i; std::ostringstream s; - s << v << ' ' << get_suffix(i); + s.imbue(loc); + s << v << ' ' << get_suffix(i, classic); return s.str(); } else @@ -255,34 +263,39 @@ long double v = std::ldexp((long double)(size), - 10 * i); std::ostringstream s; + s.imbue(loc); s.setf(std::ios::fixed); s.precision(precision); - s << v << ' ' << get_suffix(i); + s << v << ' ' << get_suffix(i, classic); return s.str(); } } unsigned long long - humanstring_to_byte(const string& str) + humanstring_to_byte(const string& str, bool classic) { - const string str_trimmed = boost::trim_copy(str); + const locale loc = classic ? locale::classic() : locale(); + + const string str_trimmed = boost::trim_copy(str, loc); for (int i = 0; i < num_suffixes(); ++i) { - for (const string& suffix : get_all_suffixes(i)) + vector<string> suffixes = get_all_suffixes(i, true, classic); + + for (const string& suffix : suffixes) { - if (boost::iends_with(str_trimmed, suffix)) + if (boost::iends_with(str_trimmed, suffix, loc)) { - string number = boost::trim_copy(str_trimmed.substr(0, str_trimmed.size() - suffix.size())); + string number = boost::trim_copy(str_trimmed.substr(0, str_trimmed.size() - suffix.size()), loc); pair<bool, unsigned long long> v; - v = parse_i(number, i); + v = parse_i(number, i, loc); if (v.first) return v.second; - v = parse_f(number, i); + v = parse_f(number, i, loc); if (v.first) return v.second; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/utils/HumanString.h new/snapper-0.8.16/client/utils/HumanString.h --- old/snapper-0.8.16/client/utils/HumanString.h 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/utils/HumanString.h 2021-04-08 02:00:00.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2004-2014] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -48,9 +48,10 @@ * Return a suffix. * * @param i index of suffix + * @param classic use classic locale instead of global C++ locale * @return suffix */ - std::string get_suffix(int i); + std::string get_suffix(int i, bool classic); /** @@ -59,10 +60,11 @@ * - 1 B). * * @param size size in bytes + * @param classic use classic locale instead of global C++ locale * @param precision number of fraction digits in output * @return formatted string */ - std::string byte_to_humanstring(unsigned long long size, int precision); + std::string byte_to_humanstring(unsigned long long size, bool classic, int precision); /** @@ -71,10 +73,11 @@ * is 0 B to (16 EiB - 1 B). * * @param str size string + * @param classic use classic locale instead of global C++ locale * @return bytes * * The conversion is always case-insensitive. */ - unsigned long long humanstring_to_byte(const std::string& str); + unsigned long long humanstring_to_byte(const std::string& str, bool classic); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/utils/Limit.cc new/snapper-0.8.16/client/utils/Limit.cc --- old/snapper-0.8.16/client/utils/Limit.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/utils/Limit.cc 2021-04-08 02:00:00.000000000 +0200 @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2021 SUSE LLC + * + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, contact Novell, Inc. + * + * To contact Novell about this file by physical or electronic mail, you may + * find current contact information at www.novell.com. + */ + + +#include <locale> +#include <boost/algorithm/string.hpp> + +#include <snapper/Exception.h> +#include <snapper/SnapperTmpl.h> + +#include "Limit.h" +#include "HumanString.h" + + +namespace snapper +{ + using namespace std; + + + void + Limit::parse(const string& s) + { + // try plain float + + double v; + istringstream a(boost::trim_copy(s, locale::classic())); + classic(a); + a >> v; + + if (!a.fail() && a.eof()) + { + fraction = v; + type = FRACTION; + return; + } + + // try size + + try + { + absolute = humanstring_to_byte(s, true); + type = ABSOLUTE; + return; + } + catch (const Exception& e) + { + SN_CAUGHT(e); + } + + SN_THROW(Exception("failed to parse limit")); + } + + + ostream& + operator<<(ostream& str, const Limit& smart_size) + { + switch (smart_size.type) + { + case Limit::FRACTION: + str << smart_size.fraction; + break; + + case Limit::ABSOLUTE: + str << byte_to_humanstring(smart_size.absolute, false, 2); + break; + } + + return str; + } + + + bool + MaxUsedLimit::is_enabled() const + { + switch (type) + { + case FRACTION: + return fraction < 1.0; + + case ABSOLUTE: + return true; + } + + return false; + } + + + bool + MaxUsedLimit::is_satisfied(unsigned long long size, unsigned long long used) const + { + switch (type) + { + case FRACTION: + return (double)(used) / (double)(size) < fraction; + + case ABSOLUTE: + return used < absolute; + } + + return false; + } + + + bool + MinFreeLimit::is_enabled() const + { + switch (type) + { + case FRACTION: + return fraction > 0.0; + + case ABSOLUTE: + return absolute > 0; + } + + return false; + } + + + bool + MinFreeLimit::is_satisfied(unsigned long long size, unsigned long long free) const + { + switch (type) + { + case FRACTION: + return (double)(free) / (double)(size) > fraction; + + case ABSOLUTE: + return free > absolute; + } + + return false; + } + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/utils/Limit.h new/snapper-0.8.16/client/utils/Limit.h --- old/snapper-0.8.16/client/utils/Limit.h 1970-01-01 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/utils/Limit.h 2021-04-08 02:00:00.000000000 +0200 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 SUSE LLC + * + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, contact Novell, Inc. + * + * To contact Novell about this file by physical or electronic mail, you may + * find current contact information at www.novell.com. + */ + + +#ifndef SNAPPER_LIMIT_H +#define SNAPPER_LIMIT_H + + +#include <string> +#include <ostream> + + +namespace snapper +{ + using namespace std; + + + class Limit + { + public: + + Limit(double fraction) : type(FRACTION), fraction(fraction) {} + + /** + * Uses the classic locale since the class is intended for config data. + */ + void parse(const string& s); + + friend ostream& operator<<(ostream& str, const Limit& limit); + + protected: + + enum Type { FRACTION, ABSOLUTE }; + + Type type; + + union + { + double fraction; + unsigned long long absolute; + }; + + }; + + + class MaxUsedLimit : public Limit + { + public: + + MaxUsedLimit(double fraction) : Limit(fraction) {} + + bool is_enabled() const; + + bool is_satisfied(unsigned long long size, unsigned long long used) const; + + }; + + + class MinFreeLimit : public Limit + { + public: + + MinFreeLimit(double fraction) : Limit(fraction) {} + + bool is_enabled() const; + + bool is_satisfied(unsigned long long size, unsigned long long free) const; + + }; + +} + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/utils/Makefile.am new/snapper-0.8.16/client/utils/Makefile.am --- old/snapper-0.8.16/client/utils/Makefile.am 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/utils/Makefile.am 2021-04-08 02:00:00.000000000 +0200 @@ -14,6 +14,7 @@ GetOpts.cc GetOpts.h \ Range.cc Range.h \ HumanString.cc HumanString.h \ + Limit.cc Limit.h \ TableFormatter.cc TableFormatter.h \ CsvFormatter.cc CsvFormatter.h \ JsonFormatter.cc JsonFormatter.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/utils/Range.cc new/snapper-0.8.16/client/utils/Range.cc --- old/snapper-0.8.16/client/utils/Range.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/utils/Range.cc 2021-04-08 02:00:00.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -20,71 +20,65 @@ */ -#include <string> #include <sstream> -#include "Range.h" +#include <snapper/Exception.h> +#include <snapper/SnapperTmpl.h> -using namespace std; +#include "Range.h" -istream& -operator>>(istream& s, Range& range) +namespace snapper { - string value; - s >> value; - string::size_type pos = value.find('-'); - if (pos == string::npos) - { - size_t v; + using namespace std; - istringstream a(value); - a >> v; - if (a.fail() || !a.eof()) - { - s.setstate(ios::failbit); - return s; - } - range.min = range.max = v; - } - else + void + Range::parse(const string& s) { - size_t v1, v2; - - istringstream a(value.substr(0, pos)); - a >> v1; - if (a.fail() || !a.eof()) + string::size_type pos = s.find('-'); + if (pos == string::npos) { - s.setstate(ios::failbit); - return s; - } + size_t v; - istringstream b(value.substr(pos + 1)); - b >> v2; - if (b.fail() || !b.eof()) - { - s.setstate(ios::failbit); - return s; - } + istringstream a(s); + classic(a); + a >> v; + if (a.fail() || !a.eof()) + SN_THROW(Exception("failed to parse range")); - if (v1 > v2) - { - s.setstate(ios::failbit); - return s; + min = max = v; } + else + { + size_t v1, v2; + + istringstream a(s.substr(0, pos)); + classic(a); + a >> v1; + if (a.fail() || !a.eof()) + SN_THROW(Exception("failed to parse range")); + + istringstream b(s.substr(pos + 1)); + classic(b); + b >> v2; + if (b.fail() || !b.eof()) + SN_THROW(Exception("failed to parse range")); - range.min = v1; - range.max = v2; + if (v1 > v2) + SN_THROW(Exception("failed to parse range")); + + min = v1; + max = v2; + } } - return s; -} + ostream& + operator<<(ostream& s, const Range& range) + { + return s << range.min << "-" << range.max; + } -ostream& -operator<<(ostream& s, const Range& range) -{ - return s << range.min << "-" << range.max; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/client/utils/Range.h new/snapper-0.8.16/client/utils/Range.h --- old/snapper-0.8.16/client/utils/Range.h 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/client/utils/Range.h 2021-04-08 02:00:00.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -23,35 +23,45 @@ #ifndef SNAPPER_RANGE_H #define SNAPPER_RANGE_H -#include <ostream> -using std::istream; -using std::ostream; +#include <string> +#include <ostream> -/* - * Simple class to hold a range of two size_ts as min and max. - */ -class Range +namespace snapper { -public: + using namespace std; + + + /* + * Simple class to hold a range of two size_ts as min and max. + */ + class Range + { + public: + + enum Value { MIN, MAX }; + + Range(size_t value) : min(value), max(value) {} - enum Value { MIN, MAX }; + /** + * Uses the classic locale since the class is intended for config data. + */ + void parse(const string& s); - Range(size_t value) : min(value), max(value) {} + size_t value(Value value) const { return value == MIN ? min : max; } - size_t value(Value value) const { return value == MIN ? min : max; } + bool is_degenerated() const { return min == max; } - bool is_degenerated() const { return min == max; } + friend ostream& operator<<(ostream& s, const Range& range); - friend istream& operator>>(istream& s, Range& range); - friend ostream& operator<<(ostream& s, const Range& range); + private: -private: + size_t min; + size_t max; - size_t min; - size_t max; -}; + }; +} #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/data/Makefile.am new/snapper-0.8.16/data/Makefile.am --- old/snapper-0.8.16/data/Makefile.am 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/data/Makefile.am 2021-04-08 02:00:00.000000000 +0200 @@ -18,7 +18,7 @@ install -D -m 644 lvm.txt $(DESTDIR)/etc/snapper/filters/lvm.txt install -D -m 644 x11.txt $(DESTDIR)/etc/snapper/filters/x11.txt - install -D -m 644 org.opensuse.Snapper.conf $(DESTDIR)/etc/dbus-1/system.d/org.opensuse.Snapper.conf + install -D -m 644 org.opensuse.Snapper.conf $(DESTDIR)/usr/share/dbus-1/system.d/org.opensuse.Snapper.conf install -D -m 644 org.opensuse.Snapper.service $(DESTDIR)/usr/share/dbus-1/system-services/org.opensuse.Snapper.service if ENABLE_SYSTEMD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/data/boot.service new/snapper-0.8.16/data/boot.service --- old/snapper-0.8.16/data/boot.service 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/data/boot.service 2021-04-08 02:00:00.000000000 +0200 @@ -1,5 +1,6 @@ [Unit] Description=Take snapper snapshot of root on boot +ConditionPathExists=/etc/snapper/configs/root [Service] Type=oneshot diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/data/default-config new/snapper-0.8.16/data/default-config --- old/snapper-0.8.16/data/default-config 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/data/default-config 2021-04-08 02:00:00.000000000 +0200 @@ -10,10 +10,10 @@ QGROUP="" -# fraction of the filesystems space the snapshots may use +# fraction or absolute size of the filesystems space the snapshots may use SPACE_LIMIT="0.5" -# fraction of the filesystems space that should be free +# fraction or absolute size of the filesystems space that should be free FREE_LIMIT="0.2" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/dists/debian/snapper-xUbuntu.dsc.in.in new/snapper-0.8.16/dists/debian/snapper-xUbuntu.dsc.in.in --- old/snapper-0.8.16/dists/debian/snapper-xUbuntu.dsc.in.in 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/dists/debian/snapper-xUbuntu.dsc.in.in 2021-04-08 02:00:00.000000000 +0200 @@ -4,7 +4,7 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/doc/pam_snapper.xml.in new/snapper-0.8.16/doc/pam_snapper.xml.in --- old/snapper-0.8.16/doc/pam_snapper.xml.in 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/doc/pam_snapper.xml.in 2021-04-08 02:00:00.000000000 +0200 @@ -36,7 +36,7 @@ <refsect1 id='description'> <title>DESCRIPTION</title> - <para>Create a snapshot at every login of a user, thus he or she always has a save + <para>Create a snapshot at every login of a user, thus they always have a save starting point.</para> <para>As many users do not logout for some time, it is a good idea to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/doc/snapper-configs.xml.in new/snapper-0.8.16/doc/snapper-configs.xml.in --- old/snapper-0.8.16/doc/snapper-configs.xml.in 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/doc/snapper-configs.xml.in 2021-04-08 02:00:00.000000000 +0200 @@ -2,13 +2,13 @@ <refentry id='snapper-configs5'> <refentryinfo> - <date>2018-10-29</date> + <date>2021-04-07</date> </refentryinfo> <refmeta> <refentrytitle>snapper-configs</refentrytitle> <manvolnum>5</manvolnum> - <refmiscinfo class='date'>2018-10-29</refmiscinfo> + <refmiscinfo class='date'>2021-04-07</refmiscinfo> <refmiscinfo class='version'>@VERSION@</refmiscinfo> <refmiscinfo class='manual'>Filesystem Snapshot Management</refmiscinfo> </refmeta> @@ -63,22 +63,25 @@ <varlistentry> <term><option>SPACE_LIMIT=<replaceable>float</replaceable></option></term> <listitem> - <para>Limit for the fraction of the filesystems space the snapshots - should use.</para> + <para>Limit of the filesystems space the snapshots should + use. Either a fraction of the whole filesystem for an + absolute value. An absolute value must use the C locale.</para> <para>Only supported for btrfs.</para> <para>Default value is "0.5".</para> - <para>New in version 0.3.0.</para> + <para>New in version 0.3.0, absolute value new in version + 0.9.0.</para> </listitem> </varlistentry> <varlistentry> <term><option>FREE_LIMIT=<replaceable>float</replaceable></option></term> <listitem> - <para>Limit for the fraction of the filesystem space that - should be free.</para> + <para>Limit of the filesystem space that should be + free. Either a fraction of the whole filesystem for an absolute + value. An absolute value must use the C locale.</para> <para>Only supported for btrfs.</para> <para>Default value is "0.2".</para> - <para>New in version 0.8.0.</para> + <para>New in version 0.8.0, absolute value new in version 0.9.0.</para> </listitem> </varlistentry> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/po/de.po new/snapper-0.8.16/po/de.po --- old/snapper-0.8.16/po/de.po 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/po/de.po 2021-04-08 02:00:00.000000000 +0200 @@ -7,8 +7,8 @@ "Project-Id-Version: snapper\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-12-17 13:34+0100\n" -"PO-Revision-Date: 2021-03-07 13:54+0000\n" -"Last-Translator: Gemineo <[email protected]>\n" +"PO-Revision-Date: 2021-03-29 16:37+0000\n" +"Last-Translator: Bernd Ritter <[email protected]>\n" "Language-Team: German <https://l10n.opensuse.org/projects/snapper/master/de/>" "\n" "Language: de\n" @@ -354,21 +354,30 @@ #, c-format msgid "Cannot delete snapshot %d since it is the current system." -msgstr "Schnappschuss %d kann nicht gel??scht werden, seitdem es das derzeit laufende System ist." +msgstr "" +"Schnappschuss %d kann nicht gel??scht werden, weil es das derzeitige System " +"ist." #, c-format msgid "Cannot delete snapshot %d since it is the currently mounted snapshot." -msgstr "Schnappschuss %d kann nicht gel??scht werden, seitdem es der derzeit gemountete Schnappschuss ist." +msgstr "" +"Schnappschuss %d kann nicht gel??scht werden, weil es der derzeit gemountete " +"Schnappschuss ist." #, c-format msgid "Cannot delete snapshot %d since it is the next to be mounted snapshot." -msgstr "Schnappschuss %d kann nicht gel??scht werden, seitdem es der n??chste zu mountende Schnappschuss ist." +msgstr "" +"Schnappschuss %d kann nicht gel??scht werden, weil es der n??chste zu " +"mountende Schnappschuss ist." msgid "Cannot detect ambit since default subvolume is unknown." -msgstr "Anwendungsbereich kann nicht erkannt werden, seitdem das Standard-Subvolume unbekannt ist." +msgstr "" +"Anwendungsbereich kann nicht erkannt werden, weil das Standard-Subvolume " +"unbekannt ist." msgid "Cannot do rollback since default subvolume is unknown." -msgstr "Kann kein Rollback durchf??hren, seitdem das Standard-Subvolume unbekannt ist." +msgstr "" +"Kann kein Rollback durchf??hren, weil das Standard-Subvolume unbekannt ist." msgid "Cleanup" msgstr "Bereinigen" @@ -800,7 +809,7 @@ #. %1$s is replaced by list of possible values #, c-format msgid "Use %1$s." -msgstr "%1$s verwenden." +msgstr "Verwendung von %1$s." #, c-format msgid "Use an integer number from %d to %d." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/snapper/AppUtil.cc new/snapper-0.8.16/snapper/AppUtil.cc --- old/snapper-0.8.16/snapper/AppUtil.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/snapper/AppUtil.cc 2021-04-08 02:00:00.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2004-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -425,4 +425,29 @@ return std::equal(std::begin(value), std::end(value), std::begin(rhs.value)); } + + bool + Uuid::operator<(const Uuid& rhs) const + { + return std::lexicographical_compare(std::begin(value), std::end(value), + std::begin(rhs.value), std::end(rhs.value)); + } + + + std::ostream& + operator<<(std::ostream& s, const Uuid& uuid) + { + for (int i = 0; i < 16; ++i) + { + char buf[4]; + snprintf(buf, 4, "%02x", uuid.value[i]); + s << buf; + + if (i == 3 || i == 5 || i == 7 || i == 9) + s << '-'; + } + + return s; + } + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/snapper/AppUtil.h new/snapper-0.8.16/snapper/AppUtil.h --- old/snapper-0.8.16/snapper/AppUtil.h 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/snapper/AppUtil.h 2021-04-08 02:00:00.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2004-2015] Novell, Inc. - * Copyright (c) 2020 SUSE LLC + * Copyright (c) [2020-2021] SUSE LLC * * All Rights Reserved. * @@ -29,6 +29,7 @@ #include <pwd.h> #include <grp.h> #include <unistd.h> +#include <ostream> #include <sstream> #include <locale> #include <string> @@ -185,6 +186,9 @@ uint8_t value[16]; bool operator==(const Uuid& rhs) const; + bool operator<(const Uuid& rhs) const; + + friend std::ostream& operator<<(std::ostream& s, const Uuid& uuid); }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/snapper/BtrfsUtils.cc new/snapper-0.8.16/snapper/BtrfsUtils.cc --- old/snapper-0.8.16/snapper/BtrfsUtils.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/snapper/BtrfsUtils.cc 2021-04-08 02:00:00.000000000 +0200 @@ -287,18 +287,8 @@ if (ioctl(fd, BTRFS_IOC_QUOTA_RESCAN, &args) < 0) throw runtime_error_with_errno("ioctl(BTRFS_IOC_QUOTA_RESCAN) failed", errno); - while (true) - { - sleep(1); - - memset(&args, 0, sizeof(args)); - - if (ioctl(fd, BTRFS_IOC_QUOTA_RESCAN_STATUS, &args) < 0) - throw runtime_error_with_errno("ioctl(BTRFS_IOC_QUOTA_RESCAN_STATUS) failed", errno); - - if (!args.flags) - break; - } + if (ioctl(fd, BTRFS_IOC_QUOTA_RESCAN_WAIT, &args) < 0) + throw runtime_error_with_errno("ioctl(BTRFS_IOC_QUOTA_WAIT_RESCAN) failed", errno); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/snapper/Version.h new/snapper-0.8.16/snapper/Version.h --- old/snapper-0.8.16/snapper/Version.h 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/snapper/Version.h 2021-04-08 02:00:00.000000000 +0200 @@ -25,8 +25,8 @@ #define LIBSNAPPER_MAJOR="5" -#define LIBSNAPPER_MINOR="2" -#define LIBSNAPPER_PATCHLEVEL="1" +#define LIBSNAPPER_MINOR="3" +#define LIBSNAPPER_PATCHLEVEL="0" #define LIBSNAPPER_VERSION ( LIBSNAPPER_MAJOR * 10000 + \\ LIBSNAPPER_MINOR * 100 + \\ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/snapper.spec.in new/snapper-0.8.16/snapper.spec.in --- old/snapper-0.8.16/snapper.spec.in 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/snapper.spec.in 2021-04-08 02:00:00.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package snapper # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -55,8 +55,9 @@ BuildRequires: pkg-config %endif %if 0%{?fedora_version} >= 24 || 0%{?centos_version} >= 800 -BuildRequires: glibc-langpack-en BuildRequires: glibc-langpack-de +BuildRequires: glibc-langpack-fr +BuildRequires: glibc-langpack-en %endif %if ! 0%{?mandriva_version} %if 0%{?fedora_version} >= 23 @@ -87,6 +88,7 @@ %endif Requires: diffutils Requires: libsnapper@LIBVERSION_MAJOR@ = %version +Requires: systemd %if 0%{?suse_version} Recommends: logrotate snapper-zypp-plugin Supplements: btrfsprogs @@ -192,7 +194,10 @@ %endif %config(noreplace) %{_sysconfdir}/logrotate.d/snapper %{_unitdir}/snapper*.* -%config /etc/dbus-1/system.d/org.opensuse.Snapper.conf +%if 0%{?suse_version} <= 1500 +%dir %{_datadir}/dbus-1/system.d +%endif +%{_datadir}/dbus-1/system.d/org.opensuse.Snapper.conf %{_datadir}/dbus-1/system-services/org.opensuse.Snapper.service %package -n libsnapper@LIBVERSION_MAJOR@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/testsuite/Makefile.am new/snapper-0.8.16/testsuite/Makefile.am --- old/snapper-0.8.16/testsuite/Makefile.am 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/testsuite/Makefile.am 2021-04-08 02:00:00.000000000 +0200 @@ -7,9 +7,9 @@ LDADD = ../snapper/libsnapper.la ../dbus/libdbus.la -lboost_unit_test_framework check_PROGRAMS = sysconfig-get1.test dirname1.test basename1.test \ - equal-date.test dbus-escape.test cmp-lt.test humanstring.test \ + equal-date.test dbus-escape.test cmp-lt.test humanstring.test uuid.test \ table.test table-formatter.test csv-formatter.test json-formatter.test \ - getopts.test scan-datetime.test root-prefix.test + getopts.test scan-datetime.test root-prefix.test range.test limit.test if ENABLE_BTRFS_QUOTA check_PROGRAMS += qgroup1.test @@ -31,6 +31,8 @@ humanstring_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la +uuid_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la + table_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la table_formatter_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la @@ -42,3 +44,7 @@ getopts_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la lvm_utils_test_LDADD = -lboost_unit_test_framework ../snapper/libsnapper.la + +range_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la + +limit_test_LDADD = -lboost_unit_test_framework ../client/utils/libutils.la diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/testsuite/humanstring.cc new/snapper-0.8.16/testsuite/humanstring.cc --- old/snapper-0.8.16/testsuite/humanstring.cc 2021-03-19 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/testsuite/humanstring.cc 2021-04-08 02:00:00.000000000 +0200 @@ -23,7 +23,7 @@ { locale::global(locale(loc)); - return byte_to_humanstring(size, precision); + return byte_to_humanstring(size, false, precision); } @@ -32,7 +32,7 @@ { locale::global(locale(loc)); - return humanstring_to_byte(str); + return humanstring_to_byte(str, false); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/testsuite/limit.cc new/snapper-0.8.16/testsuite/limit.cc --- old/snapper-0.8.16/testsuite/limit.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/testsuite/limit.cc 2021-04-08 02:00:00.000000000 +0200 @@ -0,0 +1,85 @@ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE snapper + +#include <boost/test/unit_test.hpp> + +#include <locale> + +#include <snapper/Exception.h> +#include "../client/utils/Limit.h" +#include "../client/utils/HumanString.h" + + +using namespace std; +using namespace snapper; + + +string +test(const char* loc, const string& s) +{ + locale::global(locale(loc)); + + Limit limit(0.5); + limit.parse(s); + + locale::global(locale::classic()); + + ostringstream tmp; + tmp << limit; + return tmp.str(); +} + + +BOOST_AUTO_TEST_CASE(parse1) +{ + BOOST_CHECK_EQUAL(test("en_US.UTF-8", "0.10"), "0.1"); + BOOST_CHECK_EQUAL(test("de_DE.UTF-8", "0.10"), "0.1"); + BOOST_CHECK_EQUAL(test("fr_FR.UTF-8", "0.10"), "0.1"); +} + + +BOOST_AUTO_TEST_CASE(parse2) +{ + BOOST_CHECK_EQUAL(test("en_US.UTF-8", "2.5 GiB"), "2.50 GiB"); + BOOST_CHECK_EQUAL(test("de_DE.UTF-8", "2.5 GiB"), "2.50 GiB"); + BOOST_CHECK_EQUAL(test("fr_FR.UTF-8", "2.5 GiB"), "2.50 GiB"); + + BOOST_CHECK_EQUAL(test("en_US.UTF-8", "2.5 gib"), "2.50 GiB"); + BOOST_CHECK_EQUAL(test("en_US.UTF-8", "2.5 gb"), "2.50 GiB"); +} + + +BOOST_AUTO_TEST_CASE(error1) +{ + BOOST_CHECK_THROW(test("de_DE.UTF-8", "0,5"), Exception); +} + + +BOOST_AUTO_TEST_CASE(error2) +{ + BOOST_CHECK_THROW(test("de_DE.UTF-8", "2,5 GiB"), Exception); + BOOST_CHECK_THROW(test("fr_FR.UTF-8", "2,5 Gio"), Exception); +} + + +BOOST_AUTO_TEST_CASE(test1) +{ + MaxUsedLimit used_limit(0.5); + + BOOST_CHECK(used_limit.is_enabled()); + + BOOST_CHECK(used_limit.is_satisfied(1 * TiB, 0.45 * TiB)); + BOOST_CHECK(!used_limit.is_satisfied(1 * TiB, 0.55 * TiB)); +} + + +BOOST_AUTO_TEST_CASE(test2) +{ + MinFreeLimit free_limit(0.2); + + BOOST_CHECK(free_limit.is_enabled()); + + BOOST_CHECK(free_limit.is_satisfied(1 * TiB, 0.25 * TiB)); + BOOST_CHECK(!free_limit.is_satisfied(1 * TiB, 0.15 * TiB)); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/testsuite/range.cc new/snapper-0.8.16/testsuite/range.cc --- old/snapper-0.8.16/testsuite/range.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/testsuite/range.cc 2021-04-08 02:00:00.000000000 +0200 @@ -0,0 +1,68 @@ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE snapper + +#include <boost/test/unit_test.hpp> + +#include <locale> + +#include <snapper/Exception.h> +#include "../client/utils/Range.h" + +using namespace std; +using namespace snapper; + + +string +test(const char* loc, const string& s) +{ + locale::global(locale(loc)); + + Range range(10); + range.parse(s); + + ostringstream tmp; + tmp << range; + return tmp.str(); +} + + +BOOST_AUTO_TEST_CASE(parse1) +{ + BOOST_CHECK_EQUAL(test("en_US.UTF-8", "10"), "10-10"); + BOOST_CHECK_EQUAL(test("de_DE.UTF-8", "10"), "10-10"); +} + + +BOOST_AUTO_TEST_CASE(parse2) +{ + BOOST_CHECK_EQUAL(test("en_US.UTF-8", "10-20"), "10-20"); + BOOST_CHECK_EQUAL(test("de_DE.UTF-8", "10-20"), "10-20"); +} + + +BOOST_AUTO_TEST_CASE(error1) +{ + BOOST_CHECK_THROW(test("en_US.UTF-8", "10 - 20"), Exception); + BOOST_CHECK_THROW(test("en_US.UTF-8", "10-"), Exception); + BOOST_CHECK_THROW(test("en_US.UTF-8", "-20"), Exception); + + BOOST_CHECK_THROW(test("en_US.UTF-8", "a-b"), Exception); +} + + +BOOST_AUTO_TEST_CASE(test1) +{ + Range range(10); + + BOOST_CHECK(range.is_degenerated()); +} + + +BOOST_AUTO_TEST_CASE(test2) +{ + Range range(10); + range.parse("2-10"); + + BOOST_CHECK(!range.is_degenerated()); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/snapper-0.8.16/testsuite/uuid.cc new/snapper-0.8.16/testsuite/uuid.cc --- old/snapper-0.8.16/testsuite/uuid.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/snapper-0.8.16/testsuite/uuid.cc 2021-04-08 02:00:00.000000000 +0200 @@ -0,0 +1,24 @@ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE snapper + +#include <sstream> +#include <boost/test/unit_test.hpp> + +#include "../snapper/AppUtil.h" + +using namespace snapper; + + +BOOST_AUTO_TEST_CASE(test1) +{ + uint8_t value[16] = { 0x78, 0x9e, 0x39, 0xcd, 0x96, 0x7f, 0x41, 0xf0, + 0x8a, 0x17, 0xcc, 0xc8, 0xf0, 0x00, 0x2e, 0xae }; + + Uuid uuid; + std::copy(std::begin(value), std::end(value), std::begin(uuid.value)); + std::ostringstream s; + s << uuid; + + BOOST_CHECK_EQUAL(s.str(), "789e39cd-967f-41f0-8a17-ccc8f0002eae"); +} ++++++ snapper-Debian_10.0.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.398327590 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.398327590 +0200 @@ -11,4 +11,4 @@ # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-Debian_9.0.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.418327613 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.422327618 +0200 @@ -11,4 +11,4 @@ # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-Debian_Unstable.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.438327637 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.438327637 +0200 @@ -11,4 +11,4 @@ # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_17.04.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.466327670 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.466327670 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_17.10.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.486327693 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.486327693 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_18.04.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.502327712 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.506327717 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_18.10.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.522327736 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.522327736 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_19.04.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.538327754 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.538327754 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_19.10.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.554327773 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.554327773 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_20.04.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.570327792 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.570327792 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2 ++++++ snapper-xUbuntu_20.10.dsc ++++++ --- /var/tmp/diff_new_pack.bIf3xs/_old 2021-04-10 15:26:39.586327811 +0200 +++ /var/tmp/diff_new_pack.bIf3xs/_new 2021-04-10 15:26:39.586327811 +0200 @@ -4,11 +4,11 @@ Binary: snapper Maintainer: Arvin Schnell <[email protected]> Architecture: any -Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, ncurses-dev +Build-Depends: debhelper (>= 4.1.16), acl-dev, dbus, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libjson-c-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de, language-pack-fr, ncurses-dev # # The 'Files' line is generated during 'make package': # Files: # 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz # Files: -618a72dea5f41306d700ab0891278baf 637009 snapper-0.8.16.tar.bz2 +3cb90e7933c2bcc64645ecfbb9aab3a6 639349 snapper-0.8.16.tar.bz2
