diff --git a/client/cleanup.cc b/client/cleanup.cc index 782e58b47..c45dc04e7 100644 --- a/client/cleanup.cc +++ b/client/cleanup.cc @@ -117,7 +117,7 @@ do_cleanup_number(DBus::Connection& conn, const string& config_name) filter2(snapshots, tmp); for (list::const_iterator it = tmp.begin(); it != tmp.end(); ++it) - command_delete_xsnapshot(conn, config_name, (*it)->getNum()); + command_delete_xsnapshots(conn, config_name, { (*it)->getNum() }); } return true; @@ -286,7 +286,7 @@ do_cleanup_timeline(DBus::Connection& conn, const string& config_name) filter2(snapshots, tmp); for (list::const_iterator it = tmp.begin(); it != tmp.end(); ++it) - command_delete_xsnapshot(conn, config_name, (*it)->getNum()); + command_delete_xsnapshots(conn, config_name, { (*it)->getNum() }); return true; } @@ -333,7 +333,7 @@ do_cleanup_empty_pre_post(DBus::Connection& conn, const string& config_name) filter2(snapshots, tmp); for (list::const_iterator it = tmp.begin(); it != tmp.end(); ++it) - command_delete_xsnapshot(conn, config_name, (*it)->getNum()); + command_delete_xsnapshots(conn, config_name, { (*it)->getNum() }); return true; } diff --git a/client/commands.cc b/client/commands.cc index 9a7fae973..3e87226d7 100644 --- a/client/commands.cc +++ b/client/commands.cc @@ -179,12 +179,13 @@ command_create_post_xsnapshot(DBus::Connection& conn, const string& config_name, void -command_delete_xsnapshot(DBus::Connection& conn, const string& config_name, unsigned int num) +command_delete_xsnapshots(DBus::Connection& conn, const string& config_name, + list nums) { - DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "DeleteSnapshot"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "DeleteSnapshots"); DBus::Hoho hoho(call); - hoho << config_name << num; + hoho << config_name << nums; DBus::Message reply = conn.send_and_reply_and_block(call); } diff --git a/client/commands.h b/client/commands.h index fa6889f8e..c672ca180 100644 --- a/client/commands.h +++ b/client/commands.h @@ -69,7 +69,8 @@ command_create_post_xsnapshot(DBus::Connection& conn, const string& config_name, const string& cleanup, const map& userdata); void -command_delete_xsnapshot(DBus::Connection& conn, const string& config_name, unsigned int num); +command_delete_xsnapshots(DBus::Connection& conn, const string& config_name, + list nums); void command_create_xcomparison(DBus::Connection& conn, const string& config_name, unsigned int number1, diff --git a/client/snapper.cc b/client/snapper.cc index 50af7a71b..df7b0fdc1 100644 --- a/client/snapper.cc +++ b/client/snapper.cc @@ -690,7 +690,7 @@ command_delete(DBus::Connection& conn) { unsigned int num = read_num(getopts.popArg()); - command_delete_xsnapshot(conn, config_name, num); + command_delete_xsnapshots(conn, config_name, { num }); } } catch (const IllegalSnapshotException& e) diff --git a/dbus/DBusMessage.cc b/dbus/DBusMessage.cc index b9cc69f96..2141b6195 100644 --- a/dbus/DBusMessage.cc +++ b/dbus/DBusMessage.cc @@ -62,6 +62,7 @@ namespace DBus } + const char* TypeInfo::signature = "u"; const char* TypeInfo::signature = "s"; diff --git a/dbus/DBusMessage.h b/dbus/DBusMessage.h index 4ed7243c7..e5a40c08d 100644 --- a/dbus/DBusMessage.h +++ b/dbus/DBusMessage.h @@ -152,6 +152,7 @@ namespace DBus template struct TypeInfo {}; + template <> struct TypeInfo { static const char* signature; }; template <> struct TypeInfo { static const char* signature; }; diff --git a/doc/dbus-protocol.txt b/doc/dbus-protocol.txt index dfad02a44..47401ab12 100644 --- a/doc/dbus-protocol.txt +++ b/doc/dbus-protocol.txt @@ -23,11 +23,11 @@ method CreateSingleSnapshot config-name description cleanup userdata -> number method CreatePreSnapshot config-name pre-number description cleanup userdata -> number method CreatePostSnapshot config-name description cleanup userdata -> number method ModifySnapshot config-name number description cleanup userdata -method DeleteSnapshot config-name number +method DeleteSnapshots config-name list(numbers) signal SnapshotCreated config-name number signal SnapshotModified config-name number -signal SnapshotDeleted config-name number +signal SnapshotsDeleted config-name list(numbers) method MountSnapshot config-name number method UmountSnapshot config-name number diff --git a/examples/python/delete.py b/examples/python/delete.py index 68b317cc4..4e2a1e9b1 100755 --- a/examples/python/delete.py +++ b/examples/python/delete.py @@ -8,5 +8,5 @@ dbus_interface='org.opensuse.snapper') -snapper.DeleteSnapshot("root", 1450) +snapper.DeleteSnapshots("root", [ 510 ]) diff --git a/server/snapperd.cc b/server/snapperd.cc index caeecd129..628b05d54 100644 --- a/server/snapperd.cc +++ b/server/snapperd.cc @@ -33,6 +33,7 @@ #include #include #include +#include #include "dbus/DBusConnection.h" #include "dbus/DBusMessage.h" @@ -123,9 +124,9 @@ reply_to_introspect(DBus::Connection& conn, DBus::Message& msg) " \n" " \n" - " \n" + " \n" " \n" - " \n" + " \n" " \n" " \n" @@ -289,13 +290,13 @@ send_signal_snapshot_created(DBus::Connection& conn, const string& config_name, void -send_signal_snapshot_deleted(DBus::Connection& conn, const string& config_name, - unsigned int num) +send_signal_snapshots_deleted(DBus::Connection& conn, const string& config_name, + list nums) { - DBus::MessageSignal msg(PATH, INTERFACE, "SnapshotDeleted"); + DBus::MessageSignal msg(PATH, INTERFACE, "SnapshotsDeleted"); DBus::Hoho hoho(msg); - hoho << config_name << num; + hoho << config_name << nums; conn.send(msg); } @@ -540,15 +541,15 @@ reply_to_command_create_post_snapshot(DBus::Connection& conn, DBus::Message& msg void -reply_to_command_delete_snapshot(DBus::Connection& conn, DBus::Message& msg) +reply_to_command_delete_snapshots(DBus::Connection& conn, DBus::Message& msg) { string config_name; - unsigned int num; + list nums; DBus::Hihi hihi(msg); - hihi >> config_name >> num; + hihi >> config_name >> nums; - y2mil("DeleteSnapshot config_name:" << config_name << " num:" << num); + y2mil("DeleteSnapshots config_name:" << config_name << " nums:" << nums); check_permission(conn, msg, config_name); check_lock(conn, msg, config_name); @@ -557,15 +558,18 @@ reply_to_command_delete_snapshot(DBus::Connection& conn, DBus::Message& msg) Snapshots& snapshots = snapper->getSnapshots(); - Snapshots::iterator snap = snapshots.find(num); + for (list::const_iterator it = nums.begin(); it != nums.end(); ++it) + { + Snapshots::iterator snap = snapshots.find(*it); - snapper->deleteSnapshot(snap); + snapper->deleteSnapshot(snap); + } DBus::MessageMethodReturn reply(msg); conn.send(reply); - send_signal_snapshot_deleted(conn, config_name, num); + send_signal_snapshots_deleted(conn, config_name, nums); } @@ -901,8 +905,8 @@ dispatch(DBus::Connection& conn, DBus::Message& msg) reply_to_command_create_pre_snapshot(conn, msg); else if (msg.is_method_call(INTERFACE, "CreatePostSnapshot")) reply_to_command_create_post_snapshot(conn, msg); - else if (msg.is_method_call(INTERFACE, "DeleteSnapshot")) - reply_to_command_delete_snapshot(conn, msg); + else if (msg.is_method_call(INTERFACE, "DeleteSnapshots")) + reply_to_command_delete_snapshots(conn, msg); else if (msg.is_method_call(INTERFACE, "CreateComparison")) reply_to_command_create_comparison(conn, msg); else if (msg.is_method_call(INTERFACE, "GetFiles"))