Hello community,

here is the log from the commit of package libstorage-ng for openSUSE:Factory 
checked in at 2019-10-16 09:10:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libstorage-ng (Old)
 and      /work/SRC/openSUSE:Factory/.libstorage-ng.new.2352 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libstorage-ng"

Wed Oct 16 09:10:24 2019 rev:65 rq:737620 version:4.2.16

Changes:
--------
--- /work/SRC/openSUSE:Factory/libstorage-ng/libstorage-ng.changes      
2019-10-03 14:06:04.432622842 +0200
+++ /work/SRC/openSUSE:Factory/.libstorage-ng.new.2352/libstorage-ng.changes    
2019-10-16 09:10:29.148209745 +0200
@@ -1,0 +2,16 @@
+Sat Oct 12 02:54:34 UTC 2019 - [email protected]
+
+- Translated using Weblate (Chinese (Taiwan)) (bsc#1149754)
+- 4.2.16
+
+--------------------------------------------------------------------
+Fri Oct 11 12:15:41 UTC 2019 - [email protected]
+
+- merge gh#openSUSE/libstorage-ng#674
+- cache luks activation information (for bsc#1129496)
+- use password from LUKS activation for resize
+- extended integration test
+- fixed typos
+- 4.2.15
+
+--------------------------------------------------------------------

Old:
----
  libstorage-ng-4.2.14.tar.xz

New:
----
  libstorage-ng-4.2.16.tar.xz

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

Other differences:
------------------
++++++ libstorage-ng.spec ++++++
--- /var/tmp/diff_new_pack.Ep8K4L/_old  2019-10-16 09:10:30.232206951 +0200
+++ /var/tmp/diff_new_pack.Ep8K4L/_new  2019-10-16 09:10:30.236206941 +0200
@@ -18,7 +18,7 @@
 
 %define libname %{name}1
 Name:           libstorage-ng
-Version:        4.2.14
+Version:        4.2.16
 Release:        0
 Summary:        Library for storage management
 License:        GPL-2.0-only

++++++ libstorage-ng-4.2.14.tar.xz -> libstorage-ng-4.2.16.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/LIBVERSION 
new/libstorage-ng-4.2.16/LIBVERSION
--- old/libstorage-ng-4.2.14/LIBVERSION 2019-09-30 14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/LIBVERSION 2019-10-12 07:52:56.000000000 +0200
@@ -1 +1 @@
-1.18.0
+1.19.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/VERSION 
new/libstorage-ng-4.2.16/VERSION
--- old/libstorage-ng-4.2.14/VERSION    2019-09-30 14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/VERSION    2019-10-12 07:52:56.000000000 +0200
@@ -1 +1 @@
-4.2.14
+4.2.16
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libstorage-ng-4.2.14/integration-tests/misc/resize-info.py 
new/libstorage-ng-4.2.16/integration-tests/misc/resize-info.py
--- old/libstorage-ng-4.2.14/integration-tests/misc/resize-info.py      
2019-09-30 14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/integration-tests/misc/resize-info.py      
2019-10-12 07:52:56.000000000 +0200
@@ -78,6 +78,12 @@
 if resize_info.reasons & RB_MAX_SIZE_FOR_LVM_LV_THIN:
     print("RB_MAX_SIZE_FOR_LVM_LV_THIN")
 
+if resize_info.reasons & RB_SHRINK_NOT_SUPPORTED_BY_MULTIDEVICE_FILESYSTEM:
+    print("RB_SHRINK_NOT_SUPPORTED_BY_MULTIDEVICE_FILESYSTEM")
+
+if resize_info.reasons & RB_PASSWORD_REQUIRED:
+    print("RB_PASSWORD_REQUIRED")
+
 if resize_info.resize_ok:
     print(byte_to_humanstring(resize_info.min_size, False, 2, True))
     print(byte_to_humanstring(resize_info.max_size, False, 2, True))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/po/zh_TW.po 
new/libstorage-ng-4.2.16/po/zh_TW.po
--- old/libstorage-ng-4.2.14/po/zh_TW.po        2019-09-30 14:00:00.000000000 
+0200
+++ new/libstorage-ng-4.2.16/po/zh_TW.po        2019-10-12 07:52:56.000000000 
+0200
@@ -12,8 +12,8 @@
 "Project-Id-Version: libstorage\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2019-09-04 09:26+0200\n"
-"PO-Revision-Date: 2019-03-23 20:24+0000\n"
-"Last-Translator: Emily Dong <[email protected]>\n"
+"PO-Revision-Date: 2019-10-12 05:52+0000\n"
+"Last-Translator: Yi-Jyun Pan <[email protected]>\n"
 "Language-Team: Chinese (Taiwan) <https://l10n.opensuse.org/projects/";
 "libstorage/ng-master/zh_TW/>\n"
 "Language: zh_TW\n"
@@ -21,7 +21,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 3.3\n"
+"X-Generator: Weblate 3.6.1\n"
 
 msgid ""
 "\n"
@@ -165,9 +165,9 @@
 #. %2$s is replaced by the device size (e.g. 2.0 GiB),
 #. %3$s is replaced by one or more devices (e.g /dev/sda1 (2.0 GiB)
 #. and /dev/sdb2 (2.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Add %1$s (%2$s) to btrfs on %3$s"
-msgstr "將 %1$s 新增至 %2$s"
+msgstr "新增 %1$s (%2$s) 到 %3$s 上的 btrfs"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sdd),
@@ -213,9 +213,9 @@
 #. %2$s is replaced by the device size (e.g. 2.0 GiB),
 #. %3$s is replaced by one or more devices (e.g /dev/sda1 (2.0 GiB)
 #. and /dev/sdb2 (2.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Adding %1$s (%2$s) to btrfs on %3$s"
-msgstr "正在將 %1$s 新增至 %2$s"
+msgstr "正在新增 %1$s (%2$s) 至 %3$s 上的 btrfs"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sdd),
@@ -260,17 +260,17 @@
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by device name (e.g. /dev/bcache0),
 #. %3$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Attach bcache cache set on %1$s to bcache %2$s (%3$s)"
-msgstr "將設定在 %1$s 上的 Bcache 快取連接到 Bcache %2$s (%3$s)"
+msgstr "將 %1$s 上的 bcache 快取集合連結至 bcache %2$s (%3$s)"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by device name (e.g. /dev/bcache0),
 #. %3$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Attaching bcache cache set on %1$s to bcache %2$s (%3$s)"
-msgstr "正在將設定在 %1$s 上的 Bcache 快取連接到 Bcache %2$s (%3$s)"
+msgstr "正在將 %1$s 上的 bcache 快取集合連結至 bcache %2$s (%3$s)"
 
 #. TRANSLATORS: symbol for "bytes" (best keep untranslated)
 msgid "B"
@@ -405,9 +405,9 @@
 #. %1$s is replaced by file system name (e.g. ext4),
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Create %1$s on %2$s"
-msgstr "在 %2$s (%3$s) 上建立 %1$s"
+msgstr "在 %2$s\t建立 %1$s"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sda)
@@ -497,9 +497,9 @@
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/bcache0),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Create bcache %1$s (%2$s)"
-msgstr "建立 Bcache %1$s (%2$s)"
+msgstr "建立 bcache %1$s (%2$s)"
 
 #. TRANSLATORS:
 #. %1$s is replaced with the bcache name (e.g. /dev/bcache0),
@@ -539,9 +539,9 @@
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Create bcache cache set on %1$s (%2$s)"
-msgstr "建立在 %1$s (%2$s) 上的 Bcache 叢集"
+msgstr "在 %1$s (%2$s) 建立 bcache 快取集合"
 
 #. TRANSLATORS:
 #. %1$s is replaced with the md name (e.g. /dev/md0),
@@ -898,9 +898,9 @@
 #. %1$s is replaced by file system name (e.g. ext4),
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Creating %1$s on %2$s"
-msgstr "正於 %2$s (%3$s) 上建立 %1$s"
+msgstr "在 %2$s 建立 %1$s"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda)
@@ -933,16 +933,16 @@
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/bcache0),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Creating bcache %1$s (%2$s)"
-msgstr "正在建立 Bcache %1$s (%2$s)"
+msgstr "正在建立 bcache %1$s (%2$s)"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Creating bcache cache set %1$s (%2$s)"
-msgstr "正在建立 Bcache 快取叢集 %1$s (%2$s)"
+msgstr "正在建立 bcache 快取叢集 %1$s (%2$s)"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1)
@@ -1068,16 +1068,16 @@
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/bcache0),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Deactivate bcache %1$s (%2$s)"
-msgstr "取消啟用 %1$s (%2$s)"
+msgstr "停用 bcache %1$s (%2$s)"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Deactivate bcache cache set on %1$s (%2$s)"
-msgstr "取消啟用 %1$s (%2$s) 上的 Bcache 快取叢集"
+msgstr "停用 %1$s (%2$s) 上的 bcache 快取叢集"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sda1)
@@ -1127,16 +1127,16 @@
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/bcache0),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Deactivating bcache %1$s (%2$s)"
-msgstr "正在取消啟用 Bcache %1$s (%2$s)"
+msgstr "正在停用 bcache %1$s (%2$s)"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Deactivating bcache cache set on %1$s (%2$s)"
-msgstr "正在停用 %1$s (%2$s) 上的 Bcache 快取叢集"
+msgstr "正在停用 %1$s (%2$s) 上的 bcache 快取叢集"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1)
@@ -1220,9 +1220,9 @@
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/bcache0),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Delete bcache %1$s (%2$s)"
-msgstr "刪除 Bcache %1$s (%2$s)"
+msgstr "刪除 bcache %1$s (%2$s)"
 
 #. TRANSLATORS:
 #. %1$s is replaced with the bcache name (e.g. /dev/bcache0),
@@ -1235,9 +1235,9 @@
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Delete bcache cache set on %1$s (%2$s)"
-msgstr "刪除 %1$s (%2$s) 上的 Bcache 快取叢集"
+msgstr "刪除 %1$s (%2$s) 上的 bcache 快取叢集"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sda1)
@@ -1381,16 +1381,16 @@
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/bcache0),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Deleting bcache %1$s (%2$s)"
-msgstr "正在刪除 Bcache %1$s (%2$s)"
+msgstr "正在刪除 bcache %1$s (%2$s)"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Deleting bcache cache set on %1$s (%2$s)"
-msgstr "正在刪除 %1$s (%2$s) 上的 Bcache 快取叢集"
+msgstr "正在刪除 %1$s (%2$s) 上的 bcache 快取叢集"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1)
@@ -1488,17 +1488,17 @@
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by device name (e.g. /dev/bcache0),
 #. %3$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Detach bcache cache set on %1$s from bcache %2$s (%3$s)"
-msgstr "將 %1$s 上設定的 Bcache 快取從 Bcache %2$s (%3$s) 解除關聯"
+msgstr "從 bcache %2$s (%3$s) 解除對 %1$s 上 bcache 快取叢集的連結"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
 #. %2$s is replaced by device name (e.g. /dev/bcache0),
 #. %3$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Detaching bcache cache set on %1$s from bcache %2$s (%3$s)"
-msgstr "正在將 %1$s 上設定的 Bcache 快取從 Bcache %2$s (%3$s) 解除關聯"
+msgstr "正在從 bcache %2$s (%3$s) 解除對 %1$s 上 bcache 快取叢集的連結"
 
 #. TRANSLATORS: Error message displayed during probing,
 #. %1$s is replaced by a list of device names joined by newlines (e.g.
@@ -1815,9 +1815,9 @@
 #. /dev/sdb2 (1.0 GiB)),
 #. %4$s is replaced by old size (e.g. 1.0 GiB),
 #. %5$s is replaced by new size (e.g. 2.0 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Grow %1$s of %2$s on %3$s from %4$s to %5$s"
-msgstr "將 %2$s 上的 %1$s 從 %3$s 增大到 %4$s"
+msgstr "把 %3$s 上的 %1$s (%2$s) 從 %4$s 增大到 %5$s"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by file system (e.g. ext4),
@@ -1887,9 +1887,9 @@
 #. /dev/sdb2 (1.0 GiB)),
 #. %4$s is replaced by old size (e.g. 1.0 GiB),
 #. %5$s is replaced by new size (e.g. 2.0 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Growing %1$s of %2$s on %3$s from %4$s to %5$s"
-msgstr "正在將 %2$s 上的 %1$s 從 %3$s 增大到 %4$s"
+msgstr "正在把 %3$s 上的 %1$s (%2$s) 從 %4$s 增大到 %5$s"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by file system (e.g. ext4),
@@ -2152,9 +2152,8 @@
 msgstr "PiB"
 
 #. TRANSLATORS: name of object
-#, fuzzy
 msgid "Plain Encryption"
-msgstr "加密"
+msgstr "明文加密"
 
 #. TRANSLATORS: error message
 #, c-format
@@ -2266,9 +2265,9 @@
 msgstr "在 %s 上查探檔案系統失敗"
 
 #. TRANSLATORS: error message
-#, fuzzy, c-format
+#, c-format
 msgid "Probing file system with UUID %s failed"
-msgstr "在 %s 上查探檔案系統失敗"
+msgstr "探測 UUID 為 %s 的檔案系統失敗"
 
 #. TRANSLATORS: progress message
 msgid "Probing file systems"
@@ -2300,14 +2299,12 @@
 msgstr "查探 %s 上分割區失敗"
 
 #. TRANSLATORS: progress message
-#, fuzzy
 msgid "Probing plain encryptions"
-msgstr "正在查探分割區"
+msgstr "正在探測明文加密"
 
 #. TRANSLATORS: error message
-#, fuzzy
 msgid "Probing plain encryptions failed"
-msgstr "查探分割區失敗"
+msgstr "探測明文加密失敗"
 
 #. TRANSLATORS: error message
 #, c-format
@@ -2343,9 +2340,9 @@
 #. %2$s is replaced by the device size (e.g. 2.0 GiB),
 #. %3$s is replaced by one or more devices (e.g /dev/sda1 (2.0 GiB)
 #. and /dev/sdb2 (2.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Remove %1$s (%2$s) from btrfs on %3$s"
-msgstr "從 %2$s 移除 %1$s"
+msgstr "從 %3$s 上的 btrfs 移除 %1$s (%2$s)"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sdd),
@@ -2391,9 +2388,9 @@
 #. %2$s is replaced by the device size (e.g. 2.0 GiB),
 #. %3$s is replaced by one or more devices (e.g /dev/sda1 (2.0 GiB)
 #. and /dev/sdb2 (2.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Removing %1$s (%2$s) from btrfs on %3$s"
-msgstr "正在從 %2$s 移除 %1$s"
+msgstr "正在從 %3$s 上的 btrfs 移除 %1$s (%2$s)"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by device name (e.g. /dev/sdd),
@@ -2488,9 +2485,9 @@
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB)),
 #. %3$s is replaced by UUID (e.g. 3cfa63b5-4d29-43e6-8658-57b74f68fd7f)
-#, fuzzy, c-format
+#, c-format
 msgid "Set UUID of %1$s on %2$s to %3$s"
-msgstr "將 %1$s 上的 UUID 設定為 %2$s"
+msgstr "設定 %2$s 上 %1$s 的 UUID 至 %3$s"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by partition name (e.g. /dev/sda1)
@@ -2502,9 +2499,9 @@
 #. %1$s is replaced by cache mode (e.g. writeback),
 #. %2$s is replaced by device name (e.g. /dev/bcache0),
 #. %3$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Set cache mode to %1$s for bcache %2$s (%3$s)"
-msgstr "將 Bcache %2$s (%3$s) 的快取模式設定為 %1$s"
+msgstr "設定 bcache %2$s (%3$s) 的快取模式至 %1$s"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by the subvolume path (e.g. var/log),
@@ -2542,9 +2539,9 @@
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB)),
 #. %3$s is replaced by label (e.g. ROOT)
-#, fuzzy, c-format
+#, c-format
 msgid "Set label of %1$s on %2$s to %3$s"
-msgstr "將 %1$s 的標籤設定為 %2$s"
+msgstr "設定 %2$s 上 %1$s 的標籤至 %3$s"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by partition name (e.g. /dev/sda1)
@@ -2570,18 +2567,18 @@
 #. %1$s is replaced by file system name (e.g. ext4),
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Set tune options of %1$s on %2$s"
-msgstr "設定 %1$s 的調整選項"
+msgstr "設定 %2$s 上 %1$s 的調整選項"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by file system name (e.g. ext4),
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB)),
 #. %3$s is replaced by UUID (e.g. 3cfa63b5-4d29-43e6-8658-57b74f68fd7f)
-#, fuzzy, c-format
+#, c-format
 msgid "Setting UUID of %1$s on %2$s to %3$s"
-msgstr "正在將 %1$s 的 UUID 設定為 %2$s"
+msgstr "正在設定 %2$s 上 %1$s 的 UUID 至 %3$s"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by partition name (e.g. /dev/sda1)
@@ -2593,9 +2590,9 @@
 #. %1$s is replaced by cache mode (e.g. writeback),
 #. %2$s is replaced by device name (e.g. /dev/bcache0),
 #. %3$s is replaced by size (e.g. 2 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Setting cache mode to %1$s for bcache %2$s (%3$s)"
-msgstr "正在將 Bcache %2$s (%3$s) 的快取模式設定為 %1$s"
+msgstr "正在設定 bcache %2$s (%3$s) 的快取模式至 %1$s"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by the subvolume path (e.g. var/log),
@@ -2633,9 +2630,9 @@
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB)),
 #. %3$s is replaced by label (e.g. ROOT)
-#, fuzzy, c-format
+#, c-format
 msgid "Setting label of %1$s on %2$s to %3$s"
-msgstr "正在將 %1$s 的標籤設定為 %2$s"
+msgstr "正在設定 %2$s 上 %1$s 的標籤至 %3$s"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by partition name (e.g. /dev/sda1)
@@ -2661,9 +2658,9 @@
 #. %1$s is replaced by file system name (e.g. ext4),
 #. %2$s is replaced by one or more devices (e.g /dev/sda1 (1.0 GiB) and
 #. /dev/sdb2 (1.0 GiB))
-#, fuzzy, c-format
+#, c-format
 msgid "Setting tune options of %1$s on %2$s"
-msgstr "正在設定 %1$s 的調整選項"
+msgstr "正在設定 %2$s 上 %1$s 的調整選項"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by device name (e.g. /dev/sda1),
@@ -2672,9 +2669,9 @@
 #. /dev/sdb2 (1.0 GiB)),
 #. %4$s is replaced by old size (e.g. 2.0 GiB),
 #. %5$s is replaced by new size (e.g. 1.0 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Shrink %1$s of %2$s on %3$s from %4$s to %5$s"
-msgstr "將 %2$s 上的 %1$s 從 %3$s 縮減到 %4$s"
+msgstr "將 %3$s 上的 %1$s (%2$s) 從 %4$s 縮小至 %5$s"
 
 #. TRANSLATORS: displayed before action,
 #. %1$s is replaced by file system (e.g. ext4),
@@ -2744,9 +2741,9 @@
 #. /dev/sdb2 (1.0 GiB)),
 #. %4$s is replaced by old size (e.g. 2.0 GiB),
 #. %5$s is replaced by new size (e.g. 1.0 GiB)
-#, fuzzy, c-format
+#, c-format
 msgid "Shrinking %1$s of %2$s on %3$s from %4$s to %5$s"
-msgstr "正在將 %2$s 上的 %1$s 從 %3$s 縮減到 %4$s"
+msgstr "正在將 %3$s 上的 %1$s (%2$s) 從 %4$s 縮小至 %5$s"
 
 #. TRANSLATORS: displayed during action,
 #. %1$s is replaced by file system (e.g. ext4),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/storage/Devices/BcacheImpl.cc 
new/libstorage-ng-4.2.16/storage/Devices/BcacheImpl.cc
--- old/libstorage-ng-4.2.14/storage/Devices/BcacheImpl.cc      2019-09-30 
14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/storage/Devices/BcacheImpl.cc      2019-10-12 
07:52:56.000000000 +0200
@@ -580,7 +580,7 @@
     void
     Bcache::Impl::add_create_actions(Actiongraph::Impl& actiongraph) const
     {
-       // TODO Flash-only Bache
+       // TODO Flash-only Bcache
 
        if(get_type() == BcacheType::BACKED)
        {
@@ -635,7 +635,7 @@
     void
     Bcache::Impl::add_delete_actions(Actiongraph::Impl& actiongraph) const
     {
-       // TODO Flash-only Bache
+       // TODO Flash-only Bcache
 
        if(get_type() == BcacheType::BACKED)
        {
@@ -671,7 +671,7 @@
     void
     Bcache::Impl::do_create()
     {
-       // TODO Flash-only Bache
+       // TODO Flash-only Bcache
 
        if(get_type() == BcacheType::BACKED)
        {
@@ -712,7 +712,7 @@
     void
     Bcache::Impl::do_delete() const
     {
-       // TODO Flash-only Bache
+       // TODO Flash-only Bcache
 
        if(get_type() == BcacheType::BACKED)
            get_backing_device()->get_impl().wipe_device();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libstorage-ng-4.2.14/storage/Devices/EncryptionImpl.cc 
new/libstorage-ng-4.2.16/storage/Devices/EncryptionImpl.cc
--- old/libstorage-ng-4.2.14/storage/Devices/EncryptionImpl.cc  2019-09-30 
14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/storage/Devices/EncryptionImpl.cc  2019-10-12 
07:52:56.000000000 +0200
@@ -134,6 +134,7 @@
        set_mount_by(get_storage()->get_default_mount_by());
     }
 
+
     void
     Encryption::Impl::set_dm_table_name(const string& dm_table_name)
     {
@@ -496,7 +497,10 @@
        if (resize_mode == ResizeMode::SHRINK)
            cmd_line += " --size " + 
to_string(encryption_rhs->get_impl().get_size() / (512 * B));
 
-       SystemCmd cmd(cmd_line, SystemCmd::DoThrow);
+       if (do_resize_needs_password())
+           add_key_file_option_and_execute(cmd_line);
+       else
+           SystemCmd cmd(cmd_line, SystemCmd::DoThrow);
     }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libstorage-ng-4.2.14/storage/Devices/EncryptionImpl.h 
new/libstorage-ng-4.2.16/storage/Devices/EncryptionImpl.h
--- old/libstorage-ng-4.2.14/storage/Devices/EncryptionImpl.h   2019-09-30 
14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/storage/Devices/EncryptionImpl.h   2019-10-12 
07:52:56.000000000 +0200
@@ -106,6 +106,11 @@
 
        const BlkDevice* get_blk_device() const;
 
+       /**
+        * Does do_resize need the password?
+        */
+       virtual bool do_resize_needs_password() const { return false; }
+
        virtual Impl* clone() const override { return new Impl(*this); }
 
        virtual void check(const CheckCallbacks* check_callbacks) const 
override;
@@ -157,6 +162,11 @@
 
        EncryptionType type;
 
+       /**
+        * The password.
+        *
+        * Note: The password can be empty. At least for LUKS that does work.
+        */
        string password;
 
        string key_file;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/storage/Devices/LuksImpl.cc 
new/libstorage-ng-4.2.16/storage/Devices/LuksImpl.cc
--- old/libstorage-ng-4.2.14/storage/Devices/LuksImpl.cc        2019-09-30 
14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/storage/Devices/LuksImpl.cc        2019-10-12 
07:52:56.000000000 +0200
@@ -133,24 +133,61 @@
     }
 
 
+    /**
+     * Activation information about LUKS.
+     */
+    struct LuksActivationInfo
+    {
+       LuksActivationInfo() : canceled(false), password() {}
+
+       bool canceled;
+       string password;
+    };
+
+
+    /**
+     * Map with activation information about LUKS using the LUKS UUID as the 
key.
+     */
+    map<string, LuksActivationInfo> luks_activation_infos;
+
+
     bool
     Luks::Impl::activate_luks(const ActivateCallbacks* activate_callbacks, 
SystemInfo& system_info,
                              const string& name, const string& uuid, const 
string& label)
     {
+       map<string, LuksActivationInfo>::const_iterator it = 
luks_activation_infos.find(uuid);
+
        int attempt = 1;
        string dm_name;
+       string password;
 
        while (true)
        {
-           pair<bool, string> tmp = activate_callbacks->luks(uuid, attempt);
-           if (!tmp.first)
+           if (it == luks_activation_infos.end())
+           {
+               pair<bool, string> tmp = activate_callbacks->luks(uuid, 
attempt);
+               if (!tmp.first)
+               {
+                   y2mil("user canceled activation of luks " << uuid);
+                   luks_activation_infos[uuid].canceled = true;
+
+                   return false;
+               }
+               else
+               {
+                   y2mil("user allowed activation of luks " << uuid);
+                   password = tmp.second;
+               }
+           }
+           else if (it->second.canceled)
            {
-               y2mil("user canceled activation of luks " << uuid);
+               y2mil("activation of luks " << uuid << " skipped since 
previously canceled");
                return false;
            }
            else
            {
-               y2mil("user allowed activation of luks " << uuid);
+               y2mil("activation of luks " << uuid << " with cached password");
+               password = it->second.password;
            }
 
            // TRANSLATORS: progress message
@@ -174,7 +211,7 @@
                quote(dm_name) + " --tries 1 --key-file -";
 
            SystemCmd::Options cmd_options(cmd_line, SystemCmd::DoThrow);
-           cmd_options.stdin_text = tmp.second;
+           cmd_options.stdin_text = password;
            cmd_options.verify = [](int exit_code) { return exit_code == 0 || 
exit_code == 2; };
 
            try
@@ -188,6 +225,9 @@
                    continue;
                }
 
+               // save the password only if it is correct
+               luks_activation_infos[uuid].password = password;
+
                return true;
            }
            catch (const Exception& exception)
@@ -230,13 +270,6 @@
                y2mil("inactive luks name:" << key_value1.first << " uuid:" <<
                      key_value1.second.luks_uuid << " label:" << 
key_value1.second.luks_label);
 
-               // TODO During a second loop of Storage::Impl::activate() the
-               // library should not bother the user with popups to lukses 
where
-               // an activation was canceled by the user. Maybe the library
-               // should also remember the passwords (map<uuid, password>) in
-               // case the activation is run again, e.g. after deactivation and
-               // reprobe.
-
                if (activate_luks(activate_callbacks, system_info, 
key_value1.first,
                                  key_value1.second.luks_uuid, 
key_value1.second.luks_label))
                    ret = true;
@@ -348,6 +381,13 @@
            luks->get_impl().set_active(it2 != cmd_dmsetup_table.end());
            luks->set_in_etc_crypttab(crypttab_entry);
 
+           /*
+            * Copy the password if it is known from activation.
+            */
+           const map<string, LuksActivationInfo>::const_iterator it = 
luks_activation_infos.find(uuid);
+           if (it != luks_activation_infos.end() && !it->second.canceled)
+               luks->set_password(it->second.password);
+
            const CmdCryptsetupLuksDump& cmd_cryptsetup_luks_dump = 
system_info.getCmdCryptsetupLuksDump(blk_device->get_name());
            
luks->get_impl().Encryption::Impl::set_type(cmd_cryptsetup_luks_dump.get_encryption_type());
            luks->get_impl().set_cipher(cmd_cryptsetup_luks_dump.get_cipher());
@@ -476,14 +516,22 @@
     }
 
 
+    bool
+    Luks::Impl::do_resize_needs_password() const
+    {
+       // Resizing an LUKS2 device might require the password
+       // (depending on use of kernel keyring).
+
+       return get_type() == EncryptionType::LUKS2;
+    }
+
+
     ResizeInfo
     Luks::Impl::detect_resize_info(const BlkDevice* blk_device) const
     {
-       // Resizing an active LUKS2 device might require the password
-       // (depending on use of kernel keyring). For the time being
-       // just disable it.
-       if (get_type() == EncryptionType::LUKS2)
-           return ResizeInfo(false, RB_RESIZE_NOT_SUPPORTED_BY_DEVICE);
+       // TODO Strictly speaking "empty" does not mean "unknown".
+       if (do_resize_needs_password() && get_password().empty())
+           return ResizeInfo(false, RB_PASSWORD_REQUIRED);
 
        ResizeInfo resize_info = 
BlkDevice::Impl::detect_resize_info(get_non_impl());
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/storage/Devices/LuksImpl.h 
new/libstorage-ng-4.2.16/storage/Devices/LuksImpl.h
--- old/libstorage-ng-4.2.14/storage/Devices/LuksImpl.h 2019-09-30 
14:00:00.000000000 +0200
+++ new/libstorage-ng-4.2.16/storage/Devices/LuksImpl.h 2019-10-12 
07:52:56.000000000 +0200
@@ -85,6 +85,8 @@
 
        virtual void parent_has_new_region(const Device* parent) override;
 
+       virtual bool do_resize_needs_password() const override;
+
        virtual bool equal(const Device::Impl& rhs) const override;
        virtual void log_diff(std::ostream& log, const Device::Impl& rhs_base) 
const override;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/storage/FreeInfo.h 
new/libstorage-ng-4.2.16/storage/FreeInfo.h
--- old/libstorage-ng-4.2.14/storage/FreeInfo.h 2019-09-30 14:00:00.000000000 
+0200
+++ new/libstorage-ng-4.2.16/storage/FreeInfo.h 2019-10-12 07:52:56.000000000 
+0200
@@ -177,7 +177,13 @@
         *
         * Blocks shrink.
         */
-       RB_SHRINK_NOT_SUPPORTED_BY_MULTIDEVICE_FILESYSTEM = 1 << 17
+       RB_SHRINK_NOT_SUPPORTED_BY_MULTIDEVICE_FILESYSTEM = 1 << 17,
+
+       /**
+        * The encryption password is required.
+        */
+       RB_PASSWORD_REQUIRED = 1 << 18
+
     };
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libstorage-ng-4.2.14/storage/Storage.h 
new/libstorage-ng-4.2.16/storage/Storage.h
--- old/libstorage-ng-4.2.14/storage/Storage.h  2019-09-30 14:00:00.000000000 
+0200
+++ new/libstorage-ng-4.2.16/storage/Storage.h  2019-10-12 07:52:56.000000000 
+0200
@@ -101,6 +101,12 @@
        /**
         * Decide whether the LUKS with uuid should be activated.
         *
+        * The result of the callback is cached (for the lifetime of
+        * the program). So the callback for a specific LUKS will not
+        * be called again (not even if Storage::activate() is called
+        * again) if 1. the activation was canceled or 2. the
+        * activation was successful.
+        *
         * TODO Add label parameter for LUKS2.
         * TODO Also allow to return a key file?
         */


Reply via email to