From: Michal Rakowski Date: Mon, 19 Oct 2020 21:01:15 +0000 (+0200) Subject: Fix #6852 About 'restore copies' X-Git-Tag: Release-11.3.2~897 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8544ae931e335229da33bbfee112bcd5411ce0e4;p=thirdparty%2Fbacula.git Fix #6852 About 'restore copies' --- diff --git a/bacula/src/dird/ua_restore.c b/bacula/src/dird/ua_restore.c index f57905ac7..14ec828f3 100644 --- a/bacula/src/dird/ua_restore.c +++ b/bacula/src/dird/ua_restore.c @@ -548,7 +548,7 @@ static int get_restore_client_name(UAContext *ua, RESTORE_CTX &rx, char * Restor } -static int select_files_from_plugin_obj(UAContext *ua, OBJECT_DBR *obj_r, RESTORE_CTX *rx) +static int select_files_from_plugin_obj(UAContext *ua, OBJECT_DBR *obj_r, RESTORE_CTX *rx, bool copies) { if (!db_get_plugin_object_record(ua->jcr, ua->db, obj_r)) { ua->error_msg(_("Failed to get plugin object for specified object parameters\n")); @@ -597,6 +597,12 @@ static int select_files_from_plugin_obj(UAContext *ua, OBJECT_DBR *obj_r, RESTOR } pm_strcpy(rx->JobIds, jobids.list); + if (copies) { + /* Display a list of all copies */ + db_list_copies_records(ua->jcr, ua->db, 0, rx->JobIds, + prtit, ua, HORZ_LIST); + } + if (!get_client_name(ua, rx)) { return 0; } @@ -637,7 +643,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) utime_t now = time(NULL) + 1; JobId_t JobId; JOB_DBR jr = { (JobId_t)-1 }; - bool done = false; + bool done = false, copies = false; int i, j; const char *list[] = { _("List last 20 Jobs run"), @@ -783,14 +789,15 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) case 7: /* all specified */ rx->all = true; break; - /* - * All keywords 7 or greater are ignored or handled by a select prompt - */ + + case 20: /* copies */ + copies = true; + break; case 30: { OBJECT_DBR obj_r; obj_r.ObjectId = str_to_int64(ua->argv[i]); - if (!select_files_from_plugin_obj(ua, &obj_r, rx)) { + if (!select_files_from_plugin_obj(ua, &obj_r, rx, copies)) { return 0; } return 2; @@ -1105,7 +1112,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) OBJECT_DBR obj_r; obj_r.ObjectId = ua->pint32_val; - if (!select_files_from_plugin_obj(ua, &obj_r, rx)) { + if (!select_files_from_plugin_obj(ua, &obj_r, rx, copies)) { return 0; } @@ -1165,6 +1172,12 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) return 0; } + if (copies) { + /* Display a list of all copies for selected jobs */ + db_list_copies_records(ua->jcr, ua->db, 0, rx->JobIds, + prtit, ua, HORZ_LIST); + } + if (strchr(rx->JobIds,',')) { ua->info_msg(_("You have selected the following JobIds: %s\n"), rx->JobIds); } else { @@ -1839,15 +1852,9 @@ static bool select_backups_before_date(UAContext *ua, RESTORE_CTX *rx, char *dat } if (rx->JobIds[0] != 0) { - if (find_arg(ua, NT_("copies")) > 0) { - /* Display a list of all copies */ - db_list_copies_records(ua->jcr, ua->db, 0, rx->JobIds, - prtit, ua, HORZ_LIST); - } /* Display a list of Jobs selected for this restore */ db_list_sql_query(ua->jcr, ua->db, uar_list_temp, prtit, ua, 1,HORZ_LIST); ok = true; - } else { ua->warning_msg(_("No jobs found.\n")); }