Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libstorage-ng for openSUSE:Factory checked in at 2021-06-01 10:33:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libstorage-ng (Old) and /work/SRC/openSUSE:Factory/.libstorage-ng.new.1898 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libstorage-ng" Tue Jun 1 10:33:47 2021 rev:117 rq:896349 version:4.4.11 Changes: -------- --- /work/SRC/openSUSE:Factory/libstorage-ng/libstorage-ng.changes 2021-05-23 23:30:47.676690010 +0200 +++ /work/SRC/openSUSE:Factory/.libstorage-ng.new.1898/libstorage-ng.changes 2021-06-01 10:34:00.452460193 +0200 @@ -1,0 +2,14 @@ +Mon May 31 11:30:21 UTC 2021 - aschn...@suse.com + +- merge gh#openSUSE/libstorage-ng#809 +- work on image mode +- 4.4.11 + +-------------------------------------------------------------------- +Fri May 28 06:34:26 UTC 2021 - aschn...@suse.com + +- merge gh#openSUSE/libstorage-ng#808 +- adjust partition names from set_source +- 4.4.10 + +-------------------------------------------------------------------- Old: ---- libstorage-ng-4.4.9.tar.xz New: ---- libstorage-ng-4.4.11.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libstorage-ng.spec ++++++ --- /var/tmp/diff_new_pack.vNld9k/_old 2021-06-01 10:34:00.932461011 +0200 +++ /var/tmp/diff_new_pack.vNld9k/_new 2021-06-01 10:34:00.932461011 +0200 @@ -18,7 +18,7 @@ %define libname %{name}1 Name: libstorage-ng -Version: 4.4.9 +Version: 4.4.11 Release: 0 Summary: Library for storage management License: GPL-2.0-only ++++++ libstorage-ng-4.4.9.tar.xz -> libstorage-ng-4.4.11.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/LIBVERSION new/libstorage-ng-4.4.11/LIBVERSION --- old/libstorage-ng-4.4.9/LIBVERSION 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/LIBVERSION 2021-05-31 13:30:21.000000000 +0200 @@ -1 +1 @@ -1.53.1 +1.54.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/VERSION new/libstorage-ng-4.4.11/VERSION --- old/libstorage-ng-4.4.9/VERSION 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/VERSION 2021-05-31 13:30:21.000000000 +0200 @@ -1 +1 @@ -4.4.9 +4.4.11 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/configure.ac new/libstorage-ng-4.4.11/configure.ac --- old/libstorage-ng-4.4.9/configure.ac 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/configure.ac 2021-05-31 13:30:21.000000000 +0200 @@ -150,6 +150,7 @@ integration-tests/bcache/Makefile integration-tests/misc/Makefile integration-tests/pools/Makefile + integration-tests/image/Makefile bindings/Makefile bindings/python/Makefile bindings/python/examples/Makefile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/integration-tests/Makefile.am new/libstorage-ng-4.4.11/integration-tests/Makefile.am --- old/libstorage-ng-4.4.9/integration-tests/Makefile.am 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/integration-tests/Makefile.am 2021-05-31 13:30:21.000000000 +0200 @@ -3,7 +3,7 @@ # SUBDIRS = partition-tables partitions filesystems mount-points md lvm \ - plain-encryption luks bcache pools misc + plain-encryption luks bcache pools misc image python_PYTHON = storageitu.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/integration-tests/image/Makefile.am new/libstorage-ng-4.4.11/integration-tests/image/Makefile.am --- old/libstorage-ng-4.4.9/integration-tests/image/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.4.11/integration-tests/image/Makefile.am 2021-05-31 13:30:21.000000000 +0200 @@ -0,0 +1,10 @@ +# +# Makefile.am for libstorage/integration-tests/image +# + +integration_testsdir = /usr/lib/libstorage-ng/integration-tests/image + +integration_tests_SCRIPTS = *.py + +EXTRA_DIST = $(integration_tests_SCRIPTS) + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/integration-tests/image/create.py new/libstorage-ng-4.4.11/integration-tests/image/create.py --- old/libstorage-ng-4.4.9/integration-tests/image/create.py 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.4.11/integration-tests/image/create.py 2021-05-31 13:30:21.000000000 +0200 @@ -0,0 +1,54 @@ +#!/usr/bin/python3 + +# requirements: + + +from storage import * +from storageitu import * + + +def create_partition(gpt, size): + + for slot in gpt.get_unused_partition_slots(): + + if not slot.primary_possible: + continue + + region = slot.region + region.set_length(int(size / region.get_block_size())) + region = gpt.align(region) + partition = gpt.create_partition(slot.name, region, PartitionType_PRIMARY) + return partition + + raise "no slot for partition found" + + +set_logger(get_logfile_logger()) + +environment = Environment(False, ProbeMode_NONE, TargetMode_IMAGE) + +storage = Storage(environment) +storage.set_rootprefix("/mnt") + +staging = storage.get_staging() + +# TODO find free loop device + +disk = Disk.create(staging, "/dev/loop0", 3 * GiB) +disk.set_image_filename("/tmp/test.image") + +gpt = to_gpt(disk.create_partition_table(PtType_GPT)) + +partition1 = create_partition(gpt, 1 * GiB) +file_system1 = partition1.create_filesystem(FsType_EXT4) +mount_point1 = file_system1.create_mount_point("/") + +partition2 = create_partition(gpt, 1.5 * GiB) +file_system2 = partition2.create_filesystem(FsType_XFS) +mount_point2 = file_system2.create_mount_point("/data") + +print(staging) + +commit(storage) + +# TODO allow cleanup: unmount, deactivate loop devices, ... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/DevicegraphImpl.cc new/libstorage-ng-4.4.11/storage/DevicegraphImpl.cc --- old/libstorage-ng-4.4.9/storage/DevicegraphImpl.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/DevicegraphImpl.cc 2021-05-31 13:30:21.000000000 +0200 @@ -474,6 +474,9 @@ remove_edge(old_edge); + Device* target = graph[target_vertex].get(); + target->get_impl().has_new_parent(); + return new_edge; } @@ -493,6 +496,9 @@ remove_edge(old_edge); + Device* target = graph[target_vertex].get(); + target->get_impl().has_new_parent(); + return new_edge; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/DeviceImpl.cc new/libstorage-ng-4.4.11/storage/Devices/DeviceImpl.cc --- old/libstorage-ng-4.4.9/storage/Devices/DeviceImpl.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/DeviceImpl.cc 2021-05-31 13:30:21.000000000 +0200 @@ -245,6 +245,12 @@ void + Device::Impl::has_new_parent() + { + } + + + void Device::Impl::parent_has_new_region(const Device* parent) { } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/DeviceImpl.h new/libstorage-ng-4.4.11/storage/Devices/DeviceImpl.h --- old/libstorage-ng-4.4.9/storage/Devices/DeviceImpl.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/DeviceImpl.h 2021-05-31 13:30:21.000000000 +0200 @@ -146,6 +146,8 @@ virtual ResizeInfo detect_resize_info(const BlkDevice* blk_device = nullptr) const = 0; + virtual void has_new_parent(); + virtual void parent_has_new_region(const Device* parent); virtual uf_t used_features(UsedFeaturesDependencyType used_features_dependency_type) const { return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/Disk.cc new/libstorage-ng-4.4.11/storage/Devices/Disk.cc --- old/libstorage-ng-4.4.9/storage/Devices/Disk.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/Disk.cc 2021-05-31 13:30:21.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2014-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -166,6 +166,20 @@ } + const string& + Disk::get_image_filename() const + { + return get_impl().get_image_filename(); + } + + + void + Disk::set_image_filename(const string& image_filename) + { + get_impl().set_image_filename(image_filename); + } + + vector<Disk*> Disk::get_all(Devicegraph* devicegraph) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/Disk.h new/libstorage-ng-4.4.11/storage/Devices/Disk.h --- old/libstorage-ng-4.4.9/storage/Devices/Disk.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/Disk.h 2021-05-31 13:30:21.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2014-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -141,6 +141,17 @@ bool is_nvme() const; /** + * Get the filename for the underlying image. Only for TargetMode::IMAGE. + */ + const std::string& get_image_filename() const; + + /** + * Set the filename for the underlying image. The file must not exist already. + * Only for TargetMode::IMAGE. + */ + void set_image_filename(const std::string& image_filename); + + /** * Find a Disk by its name. Only the name returned by get_name() is * considered. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/DiskImpl.cc new/libstorage-ng-4.4.11/storage/Devices/DiskImpl.cc --- old/libstorage-ng-4.4.9/storage/Devices/DiskImpl.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/DiskImpl.cc 2021-05-31 13:30:21.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2014-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -40,6 +40,7 @@ #include "storage/UsedFeatures.h" #include "storage/Prober.h" #include "storage/Utils/Format.h" +#include "storage/Utils/SystemCmd.h" namespace storage @@ -234,6 +235,7 @@ { vector<Action::Base*> actions; actions.push_back(new Action::Create(get_sid())); + actions.push_back(new Action::Activate(get_sid())); actiongraph.add_chain(actions); } else @@ -332,17 +334,66 @@ Text Disk::Impl::do_create_text(Tense tense) const { + // only used for TargetMode::IMAGE + Text text = tenser(tense, // TRANSLATORS: displayed before action, - // %1$s is replaced by the device name (e.g. /dev/vda), + // %1$s is replaced by the device name (e.g. /dev/loop0), // %2$s is replaced by the size (e.g. 20.00 GiB) _("Create hard disk %1$s (%2$s)"), // TRANSLATORS: displayed during action, - // %1$s is replaced by the device name (e.g. /dev/vda), + // %1$s is replaced by the device name (e.g. /dev/loop0), // %2$s is replaced by the size (e.g. 20.00 GiB) _("Creating hard disk %1$s (%2$s)")); return sformat(text, get_displayname(), get_size_text()); } + + void + Disk::Impl::do_create() + { + // only used for TargetMode::IMAGE + + if (image_filename.empty()) + ST_THROW(Exception("image filename empty")); + + string cmd_line = DD_BIN " if='" DEV_ZERO_FILE "' of=" + quote(image_filename) + + " obs=" + to_string(get_region().get_block_size()) + " seek=" + + to_string(get_region().get_length()) + " count=0 conv=excl"; + + SystemCmd cmd(cmd_line, SystemCmd::DoThrow); + } + + + Text + Disk::Impl::do_activate_text(Tense tense) const + { + // only used for TargetMode::IMAGE + + Text text = tenser(tense, + // TRANSLATORS: displayed before action, + // %1$s is replaced by the device name (e.g. /dev/loop0), + // %2$s is replaced by the size (e.g. 20.00 GiB) + _("Activate hard disk %1$s (%2$s)"), + // TRANSLATORS: displayed during action, + // %1$s is replaced by the device name (e.g. /dev/loop0), + // %2$s is replaced by the size (e.g. 20.00 GiB) + _("Activating hard disk %1$s (%2$s)")); + + return sformat(text, get_displayname(), get_size_text()); + } + + + void + Disk::Impl::do_activate() const + { + // only used for TargetMode::IMAGE + + string cmd_line = LOSETUP_BIN " --sector-size " + to_string(get_region().get_block_size()) + " " + + quote(get_name()) + " " + quote(image_filename); + + SystemCmd cmd(cmd_line, SystemCmd::DoThrow); + } + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/DiskImpl.h new/libstorage-ng-4.4.11/storage/Devices/DiskImpl.h --- old/libstorage-ng-4.4.9/storage/Devices/DiskImpl.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/DiskImpl.h 2021-05-31 13:30:21.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2014-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -85,6 +85,9 @@ bool is_pmem() const; bool is_nvme() const; + const string& get_image_filename() const { return image_filename; } + void set_image_filename(const string& image_filename) { Impl::image_filename = image_filename; } + static void probe_disks(Prober& prober); virtual void probe_pass_1a(Prober& prober) override; @@ -101,6 +104,10 @@ virtual void process_udev_ids(vector<string>& udev_ids) const override; virtual Text do_create_text(Tense tense) const override; + virtual void do_create() override; + + virtual Text do_activate_text(Tense tense) const override; + virtual void do_activate() const override; private: @@ -111,6 +118,8 @@ ZoneModel zone_model = ZoneModel::NONE; + string image_filename; + }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/PartitionImpl.cc new/libstorage-ng-4.4.11/storage/Devices/PartitionImpl.cc --- old/libstorage-ng-4.4.9/storage/Devices/PartitionImpl.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/PartitionImpl.cc 2021-05-31 13:30:21.000000000 +0200 @@ -515,6 +515,15 @@ void + Partition::Impl::update_name() + { + const Partitionable* partitionable = get_partitionable(); + + set_name(name_and_number_to_device(partitionable->get_name(), get_number())); + } + + + void Partition::Impl::update_sysfs_name_and_path() { const Partitionable* partitionable = get_partitionable(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/PartitionImpl.h new/libstorage-ng-4.4.11/storage/Devices/PartitionImpl.h --- old/libstorage-ng-4.4.9/storage/Devices/PartitionImpl.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/PartitionImpl.h 2021-05-31 13:30:21.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2014-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -101,6 +101,7 @@ const string& get_uuid() const { return uuid; } void set_uuid(const string& uuid) { Impl::uuid = uuid; } + void update_name(); void update_sysfs_name_and_path(); void update_udev_paths_and_ids(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/PartitionTableImpl.cc new/libstorage-ng-4.4.11/storage/Devices/PartitionTableImpl.cc --- old/libstorage-ng-4.4.9/storage/Devices/PartitionTableImpl.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/PartitionTableImpl.cc 2021-05-31 13:30:21.000000000 +0200 @@ -234,6 +234,20 @@ } + void + PartitionTable::Impl::has_new_parent() + { + for (Partition* partition : get_partitions()) + { + partition->get_impl().update_name(); + partition->get_impl().update_sysfs_name_and_path(); + partition->get_impl().update_udev_paths_and_ids(); + + // TODO topology? at least block size? could cascade to even more devices + } + } + + bool PartitionTable::Impl::equal(const Device::Impl& rhs_base) const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/PartitionTableImpl.h new/libstorage-ng-4.4.11/storage/Devices/PartitionTableImpl.h --- old/libstorage-ng-4.4.9/storage/Devices/PartitionTableImpl.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/PartitionTableImpl.h 2021-05-31 13:30:21.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2014-2015] Novell, Inc. - * Copyright (c) [2016-2020] SUSE LLC + * Copyright (c) [2016-2021] SUSE LLC * * All Rights Reserved. * @@ -68,6 +68,8 @@ Partitionable* get_partitionable(); const Partitionable* get_partitionable() const; + virtual void has_new_parent() override; + virtual bool equal(const Device::Impl& rhs) const override = 0; virtual void log_diff(std::ostream& log, const Device::Impl& rhs_base) const override = 0; virtual void print(std::ostream& out) const override = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Devices/PartitionableImpl.cc new/libstorage-ng-4.4.11/storage/Devices/PartitionableImpl.cc --- old/libstorage-ng-4.4.9/storage/Devices/PartitionableImpl.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Devices/PartitionableImpl.cc 2021-05-31 13:30:21.000000000 +0200 @@ -31,12 +31,10 @@ #include "storage/Devices/ImplicitPt.h" #include "storage/Holders/User.h" #include "storage/Devicegraph.h" -#include "storage/Action.h" #include "storage/Utils/XmlFile.h" #include "storage/Utils/Enum.h" #include "storage/Utils/StorageTmpl.h" #include "storage/Utils/StorageDefines.h" -#include "storage/Utils/SystemCmd.h" #include "storage/Utils/CallbacksImpl.h" #include "storage/SystemInfo/SystemInfo.h" #include "storage/StorageImpl.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Environment.h new/libstorage-ng-4.4.11/storage/Environment.h --- old/libstorage-ng-4.4.9/storage/Environment.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Environment.h 2021-05-31 13:30:21.000000000 +0200 @@ -41,11 +41,21 @@ READ_MOCKUP // fake probe - for testsuite }; - //! Is the target a disk, chroot, or image? + + /** + * Enum with target modes. + */ enum class TargetMode { - DIRECT, // direct target - CHROOT, // the target is chrooted, e.g. inst-sys - IMAGE // the target is image based + + /** Direct target. */ + DIRECT, + + /** The target is chrooted, e.g. inst-sys. */ + CHROOT, + + /** The target is image based. Experimental. */ + IMAGE + }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/EnvironmentImpl.h new/libstorage-ng-4.4.11/storage/EnvironmentImpl.h --- old/libstorage-ng-4.4.9/storage/EnvironmentImpl.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/EnvironmentImpl.h 2021-05-31 13:30:21.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2014-2015] Novell, Inc. - * Copyright (c) [2018-2020] SUSE LLC + * Copyright (c) [2018-2021] SUSE LLC * * All Rights Reserved. * @@ -64,9 +64,10 @@ private: - bool read_only; - ProbeMode probe_mode; - TargetMode target_mode; + const bool read_only; + const ProbeMode probe_mode; + const TargetMode target_mode; + string devicegraph_filename; string arch_filename; string mockup_filename; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Holders/Holder.h new/libstorage-ng-4.4.11/storage/Holders/Holder.h --- old/libstorage-ng-4.4.9/storage/Holders/Holder.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Holders/Holder.h 2021-05-31 13:30:21.000000000 +0200 @@ -72,9 +72,10 @@ /** * Set the source device of the holder. Experimental. * - * So far this function does not adjust the devices connected to the holder. E.g. - * setting a disk as source for a partition table does not adjust the device names - * of the partitions. This may change in the future. + * So far it is undefined whether this function adjusts the devices connected to + * the holder. E.g. setting a disk as source for a partition table adjusts the + * device names of the partitions but not the topology. This may change in the + * future. * * @throw Exception */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/SystemInfo/CmdBlkid.cc new/libstorage-ng-4.4.11/storage/SystemInfo/CmdBlkid.cc --- old/libstorage-ng-4.4.9/storage/SystemInfo/CmdBlkid.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/SystemInfo/CmdBlkid.cc 2021-05-31 13:30:21.000000000 +0200 @@ -40,7 +40,7 @@ Blkid::Blkid() { - SystemCmd cmd(BLKID_BIN " -c '/dev/null'", SystemCmd::DoThrow); + SystemCmd cmd(BLKID_BIN " -c '" DEV_NULL_FILE "'", SystemCmd::DoThrow); parse(cmd.stdout()); } @@ -48,7 +48,7 @@ Blkid::Blkid(const string& device) { - SystemCmd cmd(BLKID_BIN " -c '/dev/null' " + quote(device), SystemCmd::DoThrow); + SystemCmd cmd(BLKID_BIN " -c '" DEV_NULL_FILE "' " + quote(device), SystemCmd::DoThrow); parse(cmd.stdout()); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/storage/Utils/StorageDefines.h new/libstorage-ng-4.4.11/storage/Utils/StorageDefines.h --- old/libstorage-ng-4.4.9/storage/Utils/StorageDefines.h 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/storage/Utils/StorageDefines.h 2021-05-31 13:30:21.000000000 +0200 @@ -42,6 +42,13 @@ #define EFIVARS_DIR SYSFS_DIR "/firmware/efi/efivars" +// files + +#define DEV_NULL_FILE DEV_DIR "/null" +#define DEV_ZERO_FILE DEV_DIR "/zero" +#define DEV_URANDOM_FILE DEV_DIR "/urandom" + + // commands #define SH_BIN "/bin/sh" @@ -99,6 +106,8 @@ #define TEST_BIN "/usr/bin/test" #define STAT_BIN "/usr/bin/stat" +#define LOSETUP_BIN "/sbin/losetup" + #define LSATTR_BIN "/usr/bin/lsattr" #define CHATTR_BIN "/usr/bin/chattr" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/testsuite/Makefile.am new/libstorage-ng-4.4.11/testsuite/Makefile.am --- old/libstorage-ng-4.4.9/testsuite/Makefile.am 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/testsuite/Makefile.am 2021-05-31 13:30:21.000000000 +0200 @@ -19,7 +19,7 @@ md1.test md2.test md3.test md4.test md5.test encryption1.test \ encryption2.test lvm1.test lvm-pv-usable-size.test graphviz.test \ copy-individual.test mountpoint.test bcache1.test graph.test \ - restore.test + restore.test set-source.test AM_DEFAULT_SOURCE_EXT = .cc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/testsuite/disk.cc new/libstorage-ng-4.4.11/testsuite/disk.cc --- old/libstorage-ng-4.4.9/testsuite/disk.cc 2021-05-21 16:52:25.000000000 +0200 +++ new/libstorage-ng-4.4.11/testsuite/disk.cc 2021-05-31 13:30:21.000000000 +0200 @@ -50,5 +50,5 @@ Actiongraph actiongraph(storage, lhs, rhs); - BOOST_CHECK_EQUAL(actiongraph.get_commit_actions().size(), 1); + BOOST_CHECK_EQUAL(actiongraph.get_commit_actions().size(), 2); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.4.9/testsuite/set-source.cc new/libstorage-ng-4.4.11/testsuite/set-source.cc --- old/libstorage-ng-4.4.9/testsuite/set-source.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.4.11/testsuite/set-source.cc 2021-05-31 13:30:21.000000000 +0200 @@ -0,0 +1,63 @@ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE libstorage + +#include <boost/test/unit_test.hpp> + +#include "storage/Utils/HumanString.h" +#include "storage/Devices/DiskImpl.h" +#include "storage/Devices/Gpt.h" +#include "storage/Holders/Holder.h" +#include "storage/Devicegraph.h" +#include "storage/Storage.h" +#include "storage/Environment.h" + + +using namespace std; +using namespace storage; + + +BOOST_AUTO_TEST_CASE(test1) +{ + Environment environment(true, ProbeMode::NONE, TargetMode::DIRECT); + + Storage storage(environment); + + Devicegraph* staging = storage.get_staging(); + + Disk* sda = Disk::create(staging, "/dev/sda"); + sda->set_size(16 * GiB); + sda->get_impl().set_sysfs_name("sda"); + sda->get_impl().set_sysfs_path("/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda"); + sda->get_impl().set_udev_paths({ "pci-0000:00:1f.2-ata-1.0" }); + sda->get_impl().set_udev_ids({ "scsi-SATA_VBOX_HARDDISK_VB098dbc19-95da593f" }); + + Disk* sdb = Disk::create(staging, "/dev/sdb"); + sdb->set_size(16 * GiB); + sdb->get_impl().set_sysfs_name("sdb"); + sdb->get_impl().set_sysfs_path("/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb"); + sdb->get_impl().set_udev_paths({ "pci-0000:00:1f.2-ata-2.0" }); + sdb->get_impl().set_udev_ids({ "scsi-SATA_VBOX_HARDDISK_VB20a8f410-8a3f17dc" }); + + Gpt* gpt = to_gpt(sda->create_partition_table(PtType::GPT)); + Partition* sda1 = gpt->create_partition("/dev/sda1", Region(2048, 1048576, 512), PartitionType::PRIMARY); + + BOOST_CHECK_EQUAL(sda1->get_name(), "/dev/sda1"); + BOOST_CHECK_EQUAL(sda1->get_sysfs_name(), "sda1"); + BOOST_CHECK_EQUAL(sda1->get_sysfs_path(), "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda1"); + BOOST_CHECK_EQUAL(sda1->get_udev_paths().size(), 1); + BOOST_CHECK_EQUAL(sda1->get_udev_paths()[0], "pci-0000:00:1f.2-ata-1.0-part1"); + BOOST_CHECK_EQUAL(sda1->get_udev_ids().size(), 1); + BOOST_CHECK_EQUAL(sda1->get_udev_ids()[0], "scsi-SATA_VBOX_HARDDISK_VB098dbc19-95da593f-part1"); + + Holder* holder = staging->find_holder(sda->get_sid(), gpt->get_sid()); + holder->set_source(sdb); + + BOOST_CHECK_EQUAL(sda1->get_name(), "/dev/sdb1"); + BOOST_CHECK_EQUAL(sda1->get_sysfs_name(), "sdb1"); + BOOST_CHECK_EQUAL(sda1->get_sysfs_path(), "/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb/sdb1"); + BOOST_CHECK_EQUAL(sda1->get_udev_paths().size(), 1); + BOOST_CHECK_EQUAL(sda1->get_udev_paths()[0], "pci-0000:00:1f.2-ata-2.0-part1"); + BOOST_CHECK_EQUAL(sda1->get_udev_ids().size(), 1); + BOOST_CHECK_EQUAL(sda1->get_udev_ids()[0], "scsi-SATA_VBOX_HARDDISK_VB20a8f410-8a3f17dc-part1"); +}