Hello community,
here is the log from the commit of package snapper for openSUSE:Factory checked in at 2019-09-07 11:28:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/snapper (Old)
and /work/SRC/openSUSE:Factory/.snapper.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "snapper"
Sat Sep 7 11:28:08 2019 rev:108 rq:727331 version:0.8.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/snapper/snapper.changes 2019-04-01 12:33:52.833806015 +0200
+++ /work/SRC/openSUSE:Factory/.snapper.new.7948/snapper.changes 2019-09-07 11:28:11.158473567 +0200
@@ -1,0 +2,6 @@
+Fri Aug 30 17:29:34 CET 2019 - iforster@suse.com
+
+- reusing existing subvolumes on mksubvolume run
+ (bsc#1138725, bsc#1126900, gh#openSUSE/snapper#236)
+
+-------------------------------------------------------------------
New:
----
snapper-xUbuntu_19.04.dsc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ debian.tar.gz ++++++
++++++ snapper-0.8.3.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/Makefile.am new/snapper-0.8.3/Makefile.am
--- old/snapper-0.8.3/Makefile.am 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/Makefile.am 2019-08-30 02:00:00.000000000 +0200
@@ -28,7 +28,8 @@
xUbuntu_17.04 \
xUbuntu_17.10 \
xUbuntu_18.04 \
- xUbuntu_18.10
+ xUbuntu_18.10 \
+ xUbuntu_19.04
show-debian:
@echo "Debian flavors: $(DEBIAN_FLAVOURS)"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/Makefile.in new/snapper-0.8.3/Makefile.in
--- old/snapper-0.8.3/Makefile.in 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/Makefile.in 2019-08-30 02:00:00.000000000 +0200
@@ -409,7 +409,8 @@
xUbuntu_17.04 \
xUbuntu_17.10 \
xUbuntu_18.04 \
- xUbuntu_18.10
+ xUbuntu_18.10 \
+ xUbuntu_19.04
# Create all the files necessary for building the package with OBS:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/aclocal.m4 new/snapper-0.8.3/aclocal.m4
--- old/snapper-0.8.3/aclocal.m4 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/aclocal.m4 2019-08-30 02:00:00.000000000 +0200
@@ -9049,7 +9049,7 @@
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-# serial 12 (pkg-config-0.29.2)
+# serial 11 (pkg-config-0.29.1)
dnl Copyright © 2004 Scott James Remnant .
dnl Copyright © 2012-2015 Dan Nicholson
@@ -9091,7 +9091,7 @@
dnl See the "Since" comment for each macro you use to see what version
dnl of the macros you require.
m4_defun([PKG_PREREQ],
-[m4_define([PKG_MACROS_VERSION], [0.29.2])
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
[m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
])dnl PKG_PREREQ
@@ -9192,7 +9192,7 @@
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
-AC_MSG_CHECKING([for $2])
+AC_MSG_CHECKING([for $1])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
@@ -9202,11 +9202,11 @@
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
- AC_MSG_RESULT([no])
+ AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
- else
+ else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
@@ -9223,7 +9223,7 @@
_PKG_TEXT])[]dnl
])
elif test $pkg_failed = untried; then
- AC_MSG_RESULT([no])
+ AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
@@ -9324,6 +9324,74 @@
AS_VAR_IF([$1], [""], [$5], [$4])dnl
])dnl PKG_CHECK_VAR
+dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------
+dnl
+dnl Prepare a "--with-" configure option using the lowercase
+dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
+dnl PKG_CHECK_MODULES in a single macro.
+AC_DEFUN([PKG_WITH_MODULES],
+[
+m4_pushdef([with_arg], m4_tolower([$1]))
+
+m4_pushdef([description],
+ [m4_default([$5], [build with ]with_arg[ support])])
+
+m4_pushdef([def_arg], [m4_default([$6], [auto])])
+m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
+m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
+
+m4_case(def_arg,
+ [yes],[m4_pushdef([with_without], [--without-]with_arg)],
+ [m4_pushdef([with_without],[--with-]with_arg)])
+
+AC_ARG_WITH(with_arg,
+ AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
+ [AS_TR_SH([with_]with_arg)=def_arg])
+
+AS_CASE([$AS_TR_SH([with_]with_arg)],
+ [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
+ [auto],[PKG_CHECK_MODULES([$1],[$2],
+ [m4_n([def_action_if_found]) $3],
+ [m4_n([def_action_if_not_found]) $4])])
+
+m4_popdef([with_arg])
+m4_popdef([description])
+m4_popdef([def_arg])
+
+])dnl PKG_WITH_MODULES
+
+dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl -----------------------------------------------
+dnl
+dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
+dnl check._[VARIABLE-PREFIX] is exported as make variable.
+AC_DEFUN([PKG_HAVE_WITH_MODULES],
+[
+PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
+
+AM_CONDITIONAL([HAVE_][$1],
+ [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
+])dnl PKG_HAVE_WITH_MODULES
+
+dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------------------
+dnl
+dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
+dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
+dnl and preprocessor variable.
+AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
+[
+PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
+
+AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
+ [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
+])dnl PKG_HAVE_DEFINE_WITH_MODULES
+
# Copyright (C) 2002-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/client/mksubvolume.cc new/snapper-0.8.3/client/mksubvolume.cc
--- old/snapper-0.8.3/client/mksubvolume.cc 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/client/mksubvolume.cc 2019-08-30 02:00:00.000000000 +0200
@@ -89,7 +89,15 @@
if (fd < 0)
throw runtime_error_with_errno("open failed", errno);
- create_subvolume(fd, basename(subvolume_name));
+ try
+ {
+ create_subvolume(fd, basename(subvolume_name));
+ }
+ catch(...)
+ {
+ close(fd);
+ throw;
+ }
close(fd);
}
@@ -120,13 +128,10 @@
}
-void
-do_add_fstab_and_mount(MntTable& mnt_table, const libmnt_fs* fs, const string& subvol_option,
- const string& subvolume_name)
+libmnt_fs*
+create_fstab_line(const libmnt_fs* fs, const string& subvol_option,
+ const string& subvolume_name)
{
- if (verbose)
- cout << "do-add-fstab-and-mount" << endl;
-
libmnt_fs* x = mnt_copy_fs(NULL, fs);
if (!x)
throw runtime_error("mnt_copy_fs failed");
@@ -144,20 +149,41 @@
mnt_fs_set_options(x, options);
free(options);
- // Caution: mnt_context_mount may change the source of x so the fstab
- // functions must be called first.
- mnt_table.add_fs(x);
- mnt_table.replace_file();
+ return x;
+}
+
+
+void
+do_add_fstab_and_mount(MntTable& mnt_table, libmnt_fs* x)
+{
+ if (verbose)
+ cout << "do-add-fstab-and-mount" << endl;
+
+ if (mnt_table.find_target(target.c_str(), MNT_ITER_FORWARD) == NULL)
+ {
+ // Caution: mnt_context_mount may change the source of x so the fstab
+ // functions must be called first.
+ mnt_table.add_fs(x);
+ mnt_table.replace_file();
+ }
+ else
+ cout << "reusing existing fstab entry" << endl;
if (mkdir(target.c_str(), 0777) != 0 && errno != EEXIST)
throw runtime_error_with_errno("mkdir failed", errno);
struct libmnt_context* cxt = mnt_new_context();
- mnt_context_set_fs(cxt, x);
+ libmnt_fs* y;
+ if (mnt_context_find_umount_fs(cxt, target.c_str(), &y))
+ {
+ mnt_context_set_fs(cxt, x);
- int ret = mnt_context_mount(cxt);
- if (ret != 0)
- throw runtime_error(sformat("mnt_context_mount failed, ret:%d", ret));
+ int ret = mnt_context_mount(cxt);
+ if (ret != 0)
+ throw runtime_error(sformat("mnt_context_mount failed, ret:%d", ret));
+ }
+ else
+ cout << "reusing mounted target" << endl;
mnt_free_context(cxt);
@@ -166,13 +192,10 @@
void
-do_set_nocow()
+do_set_cow_flag()
{
- if (!set_nocow)
- return;
-
if (verbose)
- cout << "do-set-nocow" << endl;
+ cout << "do-set-cow-flag" << endl;
int fd = open(target.c_str(), O_RDONLY);
if (fd == -1)
@@ -188,7 +211,10 @@
throw runtime_error_with_errno("ioctl(EXT2_IOC_GETFLAGS) failed", errno);
}
- flags |= FS_NOCOW_FL;
+ if (set_nocow)
+ flags |= FS_NOCOW_FL;
+ else
+ flags &= ~FS_NOCOW_FL;
if (ioctl(fd, EXT2_IOC_SETFLAGS, &flags) == -1)
{
@@ -201,16 +227,12 @@
bool
-is_subvol_mount(const string& fs_options)
+is_subvol_mount(libmnt_fs* fs)
{
- vector<string> tmp1;
- boost::split(tmp1, fs_options, boost::is_any_of(","), boost::token_compress_on);
- for (const string& tmp2 : tmp1)
- {
- if (boost::starts_with(tmp2, "subvol=") || boost::starts_with(tmp2, "subvolid="))
- return true;
- }
-
+ if (mnt_fs_get_option(fs, "subvol", NULL, NULL) == 0)
+ return true;
+ if (mnt_fs_get_option(fs, "subvolid", NULL, NULL) == 0)
+ return true;
return false;
}
@@ -242,10 +264,7 @@
if (fs_fstype != "btrfs")
throw runtime_error("filesystem is not btrfs");
- if (fs_target == target)
- throw runtime_error("target exists in fstab");
-
- if (!is_subvol_mount(fs_options))
+ if (!is_subvol_mount(fs))
return fs;
if (verbose)
@@ -259,6 +278,111 @@
}
+string
+get_abs_subvol_path(string subvolume)
+{
+ if(!boost::starts_with(subvolume, "/"))
+ subvolume.insert(0, "/");
+ return subvolume;
+}
+
+
+void
+do_consistency_checks(MntTable& mnt_table, libmnt_fs* fs, libmnt_fs* expected_fs)
+{
+ // Set up cache for UUID / LABEL resolution in mnt_table_find_source
+ libmnt_cache* cache = mnt_new_cache();
+ MntTable mtab_table("/");
+ mtab_table.set_cache(cache);
+ mtab_table.parse_mtab();
+
+ char* subvol_expected;
+ if (mnt_fs_get_option(expected_fs, "subvol", &subvol_expected, NULL) != 0)
+ throw runtime_error("mnt_fs_get_option failed");
+
+ // Consistency checks on (partially) existing entries
+ libmnt_fs* fstab_entry = mnt_table.find_target(target, MNT_ITER_FORWARD);
+ libmnt_fs* mounted_entry = mtab_table.find_target(mnt_fs_get_target(expected_fs),
+ MNT_ITER_BACKWARD);
+ // Map UUID / LABEL to a physical device name
+ const char* dev_expected = mnt_resolve_spec(mnt_fs_get_source(expected_fs), cache);
+ const char* dev_fstab = mnt_resolve_spec(mnt_fs_get_source(fstab_entry), cache);
+ if (dev_expected == NULL)
+ throw runtime_error("parent volume in fstab does not match expected device");
+ if (fstab_entry != NULL && dev_fstab == NULL)
+ throw runtime_error("fstab entry does not map to a real device");
+ if (fstab_entry != NULL && strcmp(dev_fstab, dev_expected) != 0)
+ throw runtime_error("existing fstab entry doesn't match target device");
+ if (fstab_entry != NULL)
+ {
+ char* subvol_fstab;
+ if (mnt_fs_get_option(fstab_entry, "subvol", &subvol_fstab, NULL) != 0 ||
+ get_abs_subvol_path(subvol_fstab) != get_abs_subvol_path(subvol_expected))
+ throw runtime_error("existing fstab entry's subvolume doesn't match");
+ }
+
+ // Something is mounted there already. Is it the correct device?
+ if (mounted_entry != NULL)
+ {
+ if (strcmp(dev_expected, mnt_fs_get_source(mounted_entry)) != 0)
+ {
+ // In case of multi device btrfs the device name can differ, so compare the UUIDs.
+ const char* uuid_expected = mnt_cache_find_tag_value(cache, dev_expected, "UUID");
+ const char* uuid_mounted = mnt_cache_find_tag_value(cache, mnt_fs_get_source(mounted_entry), "UUID");
+
+ if (!uuid_expected || !uuid_mounted)
+ throw runtime_error("failed to get uuid");
+
+ if (strcmp(uuid_expected, uuid_mounted) != 0)
+ throw runtime_error("different device mounted on target");
+ }
+
+ char* subvol_real;
+ if (mnt_fs_get_option(mounted_entry, "subvol", &subvol_real, NULL) != 0 ||
+ get_abs_subvol_path(subvol_expected) != get_abs_subvol_path(subvol_real))
+ throw runtime_error("subvolume of mounted target doesn't match");
+ }
+
+ mnt_unref_cache(cache);
+}
+
+
+class TmpMountpoint {
+ unique_ptr mountpoint;
+ const libmnt_fs* fs;
+
+public:
+ TmpMountpoint(const string& tmpMountpoint, const libmnt_fs* libmntfs, const string& subvol_opts)
+ : mountpoint(strdup(tmpMountpoint.c_str())), fs(libmntfs)
+ {
+ if (!mkdtemp(mountpoint.get()))
+ throw runtime_error_with_errno("mkdtemp failed", errno);
+
+ try
+ {
+ do_tmp_mount(fs, mountpoint.get(), subvol_opts);
+ }
+ catch (...)
+ {
+ rmdir(mountpoint.get());
+ throw;
+ }
+ }
+
+ ~TmpMountpoint()
+ {
+ do_tmp_umount(fs, mountpoint.get());
+ rmdir(mountpoint.get());
+ }
+
+ const string
+ get_path()
+ {
+ return mountpoint.get();
+ }
+};
+
+
/*
* The used algorithm is as follow:
*
@@ -286,7 +410,13 @@
throw runtime_error("invalid target");
if (access(target.c_str(), F_OK) == 0)
- throw runtime_error("target exists");
+ {
+ struct stat sb;
+ if (lstat(target.c_str(), &sb) == 0 && sb.st_mode & S_IFDIR)
+ cout << "reusing existing target dir" << endl;
+ else
+ throw runtime_error("target exists");
+ }
if (access(dirname(target).c_str(), F_OK) != 0)
throw runtime_error("parent of target does not exist");
@@ -326,45 +456,45 @@
// Determine name for new subvolume: It is the target name without the
// leading filesystem target.
- string subvolume_name = target.substr(fs_target.size() + (fs_target == "/" ? 0 : 1));
+ string subvolume_name = target.substr(fs_target.size() +
+ (fs_target == "/" || fs_target == target ? 0 : 1));
+ if (subvolume_name.empty())
+ throw runtime_error("target is a dedicated mountpoint");
if (verbose)
cout << "subvolume-name:" << subvolume_name << endl;
- // Execute all steps.
+ // Create the new subvolume in memory and check system environment
- char* tmp_mountpoint = strdup("/tmp/mksubvolume-XXXXXX");
- if (!mkdtemp(tmp_mountpoint))
- throw runtime_error_with_errno("mkdtemp failed", errno);
+ libmnt_fs* expected_fs = create_fstab_line(fs, subvol_option, subvolume_name);
+ do_consistency_checks(mnt_table, fs, expected_fs);
- do_tmp_mount(fs, tmp_mountpoint, subvol_option);
+ // Execute all steps.
+
+ TmpMountpoint tmp_mountpoint("/tmp/mksubvolume-XXXXXX", fs, subvol_option);
try
{
- do_create_subvolume(tmp_mountpoint, subvolume_name);
+ do_create_subvolume(tmp_mountpoint.get_path(), subvolume_name);
}
- catch (...)
+ catch (const runtime_error_with_errno& e)
{
- // Rethrow the original exception, not a potential exception of do_tmp_umount.
- try
- {
- do_tmp_umount(fs, tmp_mountpoint);
- rmdir(tmp_mountpoint);
- free(tmp_mountpoint);
- }
- catch (...)
+ if (e.error_number == EEXIST)
{
- }
+ const string path = tmp_mountpoint.get_path() + "/" + subvolume_name;
+ struct stat sb;
- throw;
+ if (lstat(path.c_str(), &sb) == 0 && is_subvolume(sb))
+ cout << "reusing existing subvolume" << endl;
+ else
+ throw runtime_error_with_errno("cannot reuse path as subvolume", e.error_number);
+ }
+ else
+ throw;
}
- do_tmp_umount(fs, tmp_mountpoint);
- rmdir(tmp_mountpoint);
- free(tmp_mountpoint);
-
- do_add_fstab_and_mount(mnt_table, fs, subvol_option, subvolume_name);
+ do_add_fstab_and_mount(mnt_table, expected_fs);
- do_set_nocow();
+ do_set_cow_flag();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/configure new/snapper-0.8.3/configure
--- old/snapper-0.8.3/configure 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/configure 2019-08-30 02:00:00.000000000 +0200
@@ -16939,8 +16939,8 @@
fi
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbus-1" >&5
-$as_echo_n "checking for dbus-1... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5
+$as_echo_n "checking for DBUS... " >&6; }
if test -n "$DBUS_CFLAGS"; then
pkg_cv_DBUS_CFLAGS="$DBUS_CFLAGS"
@@ -16980,7 +16980,7 @@
if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -17007,7 +17007,7 @@
and DBUS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/po/ca.po new/snapper-0.8.3/po/ca.po
--- old/snapper-0.8.3/po/ca.po 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/po/ca.po 2019-08-30 02:00:00.000000000 +0200
@@ -3,7 +3,7 @@
"Project-Id-Version: @PACKAGE@\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-29 14:27+0100\n"
-"PO-Revision-Date: 2019-03-01 20:28+0000\n"
+"PO-Revision-Date: 2019-05-28 09:49+0000\n"
"Last-Translator: David Medina \n"
"Language-Team: Catalan <https://l10n.opensuse.org/projects/snapper/master/ca/"
">\n"
@@ -12,7 +12,7 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.3\n"
+"X-Generator: Weblate 3.6.1\n"
msgid "\t--all-configs, -a\t\tList snapshots from all accessible configs."
msgstr "\t--all-configs, -a\t\tLlista les instantànies des de totes les configuracions accessibles."
@@ -604,7 +604,7 @@
msgstr "Opció desconeguda '%s' per a l'ordre '%s'."
msgid "Unknown type of snapshot."
-msgstr "Tipus desconegut d'instantània."
+msgstr "Tipus d'instantània desconegut."
msgid "Unknown type of snapshots."
msgstr "Tipus desconegut d'instantànies."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/po/de.po new/snapper-0.8.3/po/de.po
--- old/snapper-0.8.3/po/de.po 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/po/de.po 2019-08-30 02:00:00.000000000 +0200
@@ -7,8 +7,8 @@
"Project-Id-Version: snapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-29 14:27+0100\n"
-"PO-Revision-Date: 2019-03-26 16:46+0000\n"
-"Last-Translator: Maximilian Trummer \n"
+"PO-Revision-Date: 2019-04-04 18:42+0000\n"
+"Last-Translator: Sarah Kriesch \n"
"Language-Team: German https://l10n.opensuse.org/projects/snapper/master/de/"
"\n"
"Language: de\n"
@@ -43,10 +43,12 @@
msgstr "\t--diff-cmd <Kommando>\t\tKommando zum Vergleichen von Dateien."
msgid "\t--disable-used-space\t\tDisable showing used space."
-msgstr "\t--disable-used-space\t\tVerbrauchten Platz nicht anzeigen."
+msgstr "\t--disable-used-space\t\tBenutzten Platz nicht anzeigen."
msgid "\t--extensions, -x <options>\tExtra options passed to the diff command."
-msgstr "\t--extensions, -x <Optionen>\tZusätzliche Optionen, die an den diff-Befehl übergeben wurden."
+msgstr ""
+"\t--extensions, -x <Optionen>\tExtra Optionen, die an den diff-Befehl "
+"übergeben wurden."
msgid "\t--fstype, -f <fstype>\t\tManually set filesystem type."
msgstr "\t--fstype, -f <fstype>\t\tDateisystem-Typ manuell setzen."
@@ -263,19 +265,19 @@
#, c-format
msgid "Cannot delete snapshot %d since it is the current system."
msgstr ""
-"Schnappschuss %d kann nicht gelöscht werden, weil es das derzeit laufende "
+"Schnappschuss %d kann nicht gelöscht werden, seitdem es das derzeit laufende "
"System ist."
#, c-format
msgid "Cannot delete snapshot %d since it is the currently mounted snapshot."
msgstr ""
-"Schnappschuss %d kann nicht gelöscht werden, weil es der derzeit gemountete "
-"Schnappschuss ist."
+"Schnappschuss %d kann nicht gelöscht werden, seitdem 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, weil es der nächste zu "
+"Schnappschuss %d kann nicht gelöscht werden, seitdem es der nächste zu "
"mountende Schnappschuss ist."
msgid "Cleanup"
@@ -381,11 +383,11 @@
msgstr "Nur-Lesen-Schnappschuss des derzeit laufenden Systems erstellen."
msgid "Creating read-only snapshot of default subvolume."
-msgstr "Nur-Lesen-Schnappschuss des Standard-Subvolumens erstellen."
+msgstr "Nur-Lesen-Schnappschuss des Standard-Subvolumes erstellen."
msgid "Creating read-write snapshot of current subvolume."
msgstr ""
-"Lesen-Schreiben-Schnappschuss des derzeit laufenden Subvolumens erstellen."
+"Lesen-Schreiben-Schnappschuss des derzeit laufenden Subvolumes erstellen."
#, c-format
msgid "Creating read-write snapshot of snapshot %d."
@@ -449,7 +451,7 @@
#, c-format
msgid "Free space error (%s)."
-msgstr "Freier Speicherplatz-Fehler (%s)."
+msgstr "Speicherplatz-Fehler (%s)."
#. TRANSLATORS: symbol for "gibi bytes" (best keep untranslated)
msgid "GiB"
@@ -561,11 +563,11 @@
msgstr "Quota-Fehler (%s)."
msgid "See 'man snapper' for further instructions."
-msgstr "Weitere Anweisungen finden Sie in \"man snapper\"."
+msgstr "Weitere Anweisungen finden Sie in 'man snapper'."
#, c-format
msgid "Setting default subvolume to snapshot %d."
-msgstr "Einstellung des Standard-Subvolumens zu Schnappschuss %d."
+msgstr "Einstellung des Standard-Subvolumes zu Schnappschuss %d."
#, c-format
msgid "Snapshot '%u' not found."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.8.3/snapper/MntTable.h new/snapper-0.8.3/snapper/MntTable.h
--- old/snapper-0.8.3/snapper/MntTable.h 2019-03-27 01:00:00.000000000 +0100
+++ new/snapper-0.8.3/snapper/MntTable.h 2019-08-30 02:00:00.000000000 +0200
@@ -52,7 +52,7 @@
~MntTable()
{
- mnt_reset_table(table);
+ mnt_unref_table(table);
}
void parse_fstab()
@@ -61,6 +61,18 @@
throw runtime_error("mnt_table_parse_fstab failed");
}
+ void parse_mtab()
+ {
+ if (mnt_table_parse_mtab(table, NULL))
+ throw runtime_error("mnt_table_parse_mtab failed");
+ }
+
+ void set_cache(libmnt_cache* cache)
+ {
+ if (cache == NULL || mnt_table_set_cache(table, cache) != 0)
+ throw runtime_error("Setting the file system cache failed");
+ }
+
void replace_file()
{
if (mnt_table_replace_file(table, target_fstab().c_str()) != 0)
@@ -96,7 +108,6 @@
const string root_prefix;
struct libmnt_table* table;
-
};
}
++++++ snapper-Debian_7.0.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.070473452 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.074473452 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-Debian_8.0.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.086473451 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.086473451 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-Debian_9.0.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.098473449 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.098473449 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_14.04.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.114473447 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.114473447 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_14.10.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.126473446 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.126473446 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_15.04.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.138473444 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.142473444 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_15.10.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.154473442 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.154473442 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_16.04.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.166473441 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.170473440 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_16.10.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.186473438 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.186473438 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_17.04.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.198473437 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.198473437 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_17.10.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.210473435 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.214473435 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_18.04.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.230473432 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.230473432 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_18.10.dsc ++++++
--- /var/tmp/diff_new_pack.8RxzOn/_old 2019-09-07 11:28:12.242473431 +0200
+++ /var/tmp/diff_new_pack.8RxzOn/_new 2019-09-07 11:28:12.246473431 +0200
@@ -11,4 +11,4 @@
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
-19808f5fa6d846e742fef8cc5ddc6d9c 592418 snapper-0.8.3.tar.bz2
+1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2
++++++ snapper-xUbuntu_19.04.dsc ++++++
Format: 1.0
Source: snapper
Version: 0.8.3
Binary: snapper
Maintainer: Arvin Schnell
Architecture: any
Build-Depends: debhelper (>= 4.1.16), acl-dev, g++, libboost-dev, libboost-thread-dev, libboost-system-dev, libboost-test-dev, libxml2-dev, libz-dev, libdbus-1-dev, libpam-dev, xsltproc, docbook-xsl, language-pack-en, language-pack-de
#
# The 'Files' line is generated during 'make package':
# Files:
# 423a20ae6e882d44e65a4eff97f2269f 630905 snapper-0.2.8.tar.gz
#
Files:
1d4c6785d99c3d2573fc29877d9ea05e 593794 snapper-0.8.3.tar.bz2