]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_restore.c
When doing a tree selection restore, look at the PurgedFiles column
[bacula/bacula] / bacula / src / dird / ua_restore.c
index 36857ed38793e802097e481cf6b9808e2fc7142e..e924dadabf2b013c87cb667030e78f5ab2196395 100644 (file)
@@ -994,7 +994,7 @@ static bool ask_for_fileregex(UAContext *ua, RESTORE_CTX *rx)
       return true;                       /* select everything */
    }
    ua->send_msg(_("\nThere were no files inserted into the tree, so file selection\n"
-                  "is not possible.Most likely your retention policy pruned the files\n"));
+                  "is not possible. Most likely your retention policy pruned the files\n"));
    if (get_yesno(ua, _("\nDo you want to restore all the files? (yes|no): "))) {
       if (ua->pint32_val == 1)
          return true;
@@ -1084,6 +1084,25 @@ static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx)
       }
    }
 #endif
+   /*
+    * Look at the first JobId on the list (presumably the oldest) and
+    *  if it is marked purged, don't do the manual selection because
+    *  the Job was pruned, so the tree is incomplete.
+    */
+   if (tree.FileCount != 0) {
+      p = rx->JobIds;
+      if (get_next_jobid_from_list(&p, &JobId) > 0) {
+         /* Find out if first Job is purged */
+         Mmsg(rx->query, "SELECT PurgedFiles from Job WHERE JobId=%s", edit_int64(JobId, ed1));
+         if (!db_sql_query(ua->db, rx->query, restore_count_handler, (void *)rx)) {
+            ua->error_msg("%s\n", db_strerror(ua->db));
+         }
+         /* rx->JobId is the PurgedFiles flag */
+         if (rx->found && rx->JobId > 0) {
+            tree.FileCount = 0;           /* set count to zero, no tree selection */
+         }
+      }
+   }
    if (tree.FileCount == 0) {
       OK = ask_for_fileregex(ua, rx);
       if (OK) {