diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2014-01-24 14:48:30 +0100 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2014-01-30 10:49:51 +0100 |
commit | ec0f629ed2a07d2a509e13b5092833cceeac2cf5 (patch) | |
tree | 0e40e74f7b2b941ba6ef647ce2149e1b4881f607 | |
parent | 2d523bd8001231766488c65358e87f5f1433722e (diff) | |
download | NetworkManager-ec0f629ed2a07d2a509e13b5092833cceeac2cf5.tar.gz |
cli: persistent vs. temporary save for 'nmcli con edit'
-rw-r--r-- | cli/src/connections.c | 81 |
1 files changed, 65 insertions, 16 deletions
diff --git a/cli/src/connections.c b/cli/src/connections.c index 656d6c9a6a..ba448855a3 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -4944,6 +4944,18 @@ add_new_connection (gboolean persistent, return nm_remote_settings_add_connection_unsaved (settings, connection, callback, user_data); } +static void +update_connection (gboolean persistent, + NMRemoteConnection *connection, + NMRemoteConnectionResultFunc callback, + gpointer user_data) +{ + if (persistent) + nm_remote_connection_commit_changes (connection, callback, user_data); + else + nm_remote_connection_commit_changes_unsaved (connection, callback, user_data); +} + static NMCResultCode do_connection_add (NmCli *nmc, int argc, char **argv) { @@ -5246,6 +5258,13 @@ gen_cmd_print2 (char *text, int state) } static char * +gen_cmd_save (char *text, int state) +{ + const char *words[] = { "persistent", "temporary", NULL }; + return gen_func_basic (text, state, words); +} + +static char * gen_connection_types (char *text, int state) { static int list_idx, len; @@ -5619,6 +5638,8 @@ nmcli_editor_tab_completion (char *text, int start, int end) generator_func = gen_cmd_verify0; } else if (should_complete_cmd (line, end, "activate", &num, NULL) && num <= 2) { generator_func = gen_compat_devices; + } else if (should_complete_cmd (line, end, "save", &num, NULL) && num <= 2) { + generator_func = gen_cmd_save; } else if (should_complete_cmd (line, end, "help", &num, NULL) && num <= 2) generator_func = gen_nmcli_cmds_menu; } @@ -5948,7 +5969,7 @@ editor_main_usage (void) "describe [<setting>.<prop>] :: describe property\n" "print [all] :: print the connection\n" "verify [all] :: verify the connection\n" - "save :: save the connection\n" + "save [persistent|temporary] :: save the connection\n" "activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n" "back :: go one level up (back)\n" "help/? [<command>] :: print this help\n" @@ -6004,8 +6025,15 @@ editor_main_help (const char *command) " nmcli bond> verify\n")); break; case NMC_EDITOR_MAIN_CMD_SAVE: - printf (_("save :: save the connection\n\n" - "Sends the connection to NetworkManager that will save it.\n")); + printf (_("save [persistent|temporary] :: save the connection\n\n" + "Sends the connection profile to NetworkManager that either will save it\n" + "pesistently, or will only keep it in memory. 'save' without an argument\n" + "means 'save persistent'.\n" + "Note that once you save the profile persistently those settings are saved\n" + "across reboot or restart. Subsequent changes can also be temporary or\n" + "persistent, but any temporary changes will not persist across reboot or\n" + "restart. If you want to fully remove the persistent connection, the connection\n" + "profile must be deleted.\n")); break; case NMC_EDITOR_MAIN_CMD_ACTIVATE: printf (_("activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n\n" @@ -6332,7 +6360,7 @@ connection_remove_setting (NMConnection *connection, NMSetting *setting) } static void -editor_show_status_line (NMConnection *connection, gboolean dirty) +editor_show_status_line (NMConnection *connection, gboolean dirty, gboolean temp) { NMSettingConnection *s_con; const char *con_type, *con_id, *con_uuid; @@ -6344,8 +6372,10 @@ editor_show_status_line (NMConnection *connection, gboolean dirty) con_uuid = nm_connection_get_uuid (connection); /* TRANSLATORS: status line in nmcli connection editor */ - printf (_("[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"), - con_type, con_id, con_uuid, dirty ? _("yes") : _("no")); + printf (_("[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"), + con_type, con_id, con_uuid, + dirty ? _("yes") : _("no"), + temp ? _("yes") : _("no")); } static gboolean @@ -6392,6 +6422,7 @@ property_edit_submenu (NmCli *nmc, char *prompt; gboolean dirty; GValue prop_g_value = G_VALUE_INIT; + gboolean temp_changes; gboolean removed; prompt = nmc_colorize (nmc->editor_prompt_color, "nmcli %s.%s> ", @@ -6409,8 +6440,9 @@ property_edit_submenu (NmCli *nmc, /* Connection is dirty? (not saved or differs from the saved) */ dirty = is_connection_dirty (connection, *rem_con); + temp_changes = *rem_con ? nm_remote_connection_get_unsaved (*rem_con) : TRUE; if (nmc->editor_status_line) - editor_show_status_line (connection, dirty); + editor_show_status_line (connection, dirty, temp_changes); cmd_property_user = readline_x (prompt); if (!cmd_property_user || *cmd_property_user == '\0') @@ -6785,6 +6817,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t char *valid_settings_str = NULL; AddConnectionInfo *info = NULL; gboolean dirty; + gboolean temp_changes; GError *err1 = NULL; NmcEditorMenuContext menu_ctx; @@ -6807,8 +6840,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t while (cmd_loop) { /* Connection is dirty? (not saved or differs from the saved) */ dirty = is_connection_dirty (connection, rem_con); + temp_changes = rem_con ? nm_remote_connection_get_unsaved (rem_con) : TRUE; if (nmc->editor_status_line) - editor_show_status_line (connection, dirty); + editor_show_status_line (connection, dirty, temp_changes); /* Read user input */ cmd_user = readline_x (menu_ctx.main_prompt); @@ -7176,6 +7210,20 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t case NMC_EDITOR_MAIN_CMD_SAVE: /* Save the connection */ if (nm_connection_verify (connection, &err1)) { + gboolean persistent = TRUE; + + /* parse argument */ + if (cmd_arg) { + if (matches (cmd_arg, "temporary") == 0) + persistent = FALSE; + else if (matches (cmd_arg, "persistent") == 0) + persistent = TRUE; + else { + printf (_("Error: invalid argument '%s'\n"), cmd_arg); + break; + } + } + /* Ask for save confirmation if the connection changes to autoconnect=yes */ if (nmc->editor_save_confirmation) if (!confirm_connection_saving (connection, NM_CONNECTION (rem_con))) @@ -7186,18 +7234,17 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t info = g_malloc0 (sizeof (AddConnectionInfo)); info->nmc = nmc; info->con_name = g_strdup (nm_connection_get_id (connection)); - nm_remote_settings_add_connection (nmc->system_settings, - connection, - add_connection_editor_cb, - info); + add_new_connection (persistent, + nmc->system_settings, + connection, + add_connection_editor_cb, + info); } else { /* Save/update already saved (existing) connection */ nm_connection_replace_settings_from_connection (NM_CONNECTION (rem_con), connection, NULL); - nm_remote_connection_commit_changes (rem_con, - update_connection_editor_cb, - NULL); + update_connection (persistent, rem_con, update_connection_editor_cb, NULL); } g_mutex_lock (&nmc_editor_mutex); @@ -7213,7 +7260,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t g_error_free (nmc_editor_error); } else { - printf (_("Connection '%s' (%s) successfully saved.\n"), + printf (!rem_con ? + _("Connection '%s' (%s) successfully saved.\n") : + _("Connection '%s' (%s) successfully updated.\n"), nm_connection_get_id (connection), nm_connection_get_uuid (connection)); |