]> git.sur5r.net Git - bacula/bacula/commitdiff
When doing a tree selection restore, look at the PurgedFiles column
authorKern Sibbald <kern@sibbald.com>
Sat, 23 May 2009 12:01:08 +0000 (12:01 +0000)
committerKern Sibbald <kern@sibbald.com>
Sat, 23 May 2009 12:01:08 +0000 (12:01 +0000)
     in the first JobId, and if non-zero, the Job was purged, so do
     not do selection

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8853 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/ua_restore.c
bacula/technotes

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) {
index 41272f3d5ce7bcba47bb577a865b70069a0171e4..b517b0a3ad8e6f1e869893198a76179c9df715bb 100644 (file)
@@ -3,6 +3,9 @@
 General:
 
 23May09
+kes  When doing a tree selection restore, look at the PurgedFiles column
+     in the first JobId, and if non-zero, the Job was purged, so do
+     not do selection.
 kes  Yet another try to get qmake to install bat correctly. It looks
      like the trick is to have an executable bat file when qmake is
      run during ./configure.