]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl Add Nigel Stepp patch for item 20
authorEric Bollengier <eric@eb.homelinux.org>
Tue, 4 Sep 2007 17:41:15 +0000 (17:41 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Tue, 4 Sep 2007 17:41:15 +0000 (17:41 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5452 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/patches/testing/project-allvols.patch [new file with mode: 0644]
bacula/projects

diff --git a/bacula/patches/testing/project-allvols.patch b/bacula/patches/testing/project-allvols.patch
new file mode 100644 (file)
index 0000000..1307bc6
--- /dev/null
@@ -0,0 +1,175 @@
+Index: src/dird/ua_update.c
+===================================================================
+--- src/dird/ua_update.c       (revision 5406)
++++ src/dird/ua_update.c       (working copy)
+@@ -402,6 +402,42 @@
+    }
+ }
++static void update_all_vols(UAContext *ua)
++{
++   int i, num_pools;
++   uint32_t *ids;
++   POOL_DBR pr;
++   MEDIA_DBR mr;
++
++   memset(&pr, 0, sizeof(pr));
++   memset(&mr, 0, sizeof(mr));
++   
++   if (!db_get_pool_ids(ua->jcr, ua->db, &num_pools, &ids)) {
++      ua->error_msg(_("Error obtaining pool ids. ERR=%s\n"), db_strerror(ua->db));
++      return;
++   }
++
++   for (i=0; i<num_pools; i++) {
++      pr.PoolId = ids[i];
++      if (!db_get_pool_record(ua->jcr, ua->db, &pr)) { /* ***FIXME*** use acl? */
++         ua->warning_msg(_("Updating all pools, but skipped PoolId=%d. ERR=%s\n"), db_strerror(ua->db));
++         continue;
++      }
++
++      set_pool_dbr_defaults_in_media_dbr(&mr, &pr);
++      mr.PoolId = pr.PoolId;
++
++      if (!db_update_media_defaults(ua->jcr, ua->db, &mr)) {
++         ua->error_msg(_("Error updating Volume records: ERR=%s"), db_strerror(ua->db));
++      } else {
++         ua->info_msg(_("All Volume defaults updated from \"%s\" Pool record.\n"),
++            pr.Name);
++      }
++   }
++
++   free(ids);
++}
++
+ static void update_volenabled(UAContext *ua, char *val, MEDIA_DBR *mr)
+ {
+    mr->Enabled = get_enabled(ua, val);
+@@ -455,6 +491,7 @@
+    for (i=0; kw[i]; i++) {
+       int j;
+       POOL_DBR pr;
++
+       if ((j=find_arg_with_value(ua, kw[i])) > 0) {
+          /* If all from pool don't select a media record */
+          if (i != AllFromPool && !select_media_dbr(ua, &mr)) {
+@@ -514,6 +551,12 @@
+       }
+    }
++   /* Allow user to simply update all volumes */
++   if (find_arg(ua, NT_("allvolume")) > 0) {
++      update_all_vols(ua);
++      return 1;
++   }
++
+    for ( ; !done; ) {
+       start_prompt(ua, _("Parameters to modify:\n"));
+       add_prompt(ua, _("Volume Status"));              /* 0 */
+@@ -529,13 +572,15 @@
+       add_prompt(ua, _("Pool"));                       /* 10 */
+       add_prompt(ua, _("Volume from Pool"));           /* 11 */
+       add_prompt(ua, _("All Volumes from Pool"));      /* 12 */
+-      add_prompt(ua, _("Enabled")),                    /* 13 */
+-      add_prompt(ua, _("RecyclePool")),                /* 14 */
+-      add_prompt(ua, _("Done"));                       /* 15 */
++      add_prompt(ua, _("Volumes from all Pools"));     /* 13 */
++      add_prompt(ua, _("Enabled")),                    /* 14 */
++      add_prompt(ua, _("RecyclePool")),                /* 15 */
++      add_prompt(ua, _("Done"));                       /* 16 */
+       i = do_prompt(ua, "", _("Select parameter to modify"), NULL, 0);  
+-      /* For All Volumes from Pool and Done, we don't need a Volume record */
+-      if (i != 12 && i != 15) {
++      /* For All Volumes, All Volumes from Pool, and Done, we don't need
++         * a Volume record */
++      if ( i != 12 && i != 13 && i != 16) {
+          if (!select_media_dbr(ua, &mr)) {  /* Get Volume record */
+             return 0;
+          }
+@@ -692,6 +737,10 @@
+          return 1;
+       case 13:
++         update_all_vols(ua);
++         return 1;
++
++      case 14:
+          ua->info_msg(_("Current Enabled is: %d\n"), mr.Enabled);
+          if (!get_cmd(ua, _("Enter new Enabled: "))) {
+             return 0;
+@@ -708,7 +757,7 @@
+          update_volenabled(ua, ua->cmd, &mr);
+          break;
+-      case 14:
++      case 15:
+          memset(&pr, 0, sizeof(POOL_DBR));
+          pr.PoolId = mr.RecyclePoolId;
+          if (db_get_pool_record(ua->jcr, ua->db, &pr)) {
+Index: src/qt-console/medialist/medialist.h
+===================================================================
+--- src/qt-console/medialist/medialist.h       (revision 5406)
++++ src/qt-console/medialist/medialist.h       (working copy)
+@@ -60,6 +60,7 @@
+    void pruneVolume();
+    void relabelVolume();
+    void allVolumesFromPool();
++   void allVolumes();
+    void volumeFromPool();
+ private:
+Index: src/qt-console/medialist/medialist.ui
+===================================================================
+--- src/qt-console/medialist/medialist.ui      (revision 5406)
++++ src/qt-console/medialist/medialist.ui      (working copy)
+@@ -99,6 +99,23 @@
+     <string>Update all Volumes From Pool</string>
+    </property>
+   </action>
++  <action name="actionAllVolumes" >
++   <property name="icon" >
++    <iconset resource="../main.qrc" >:/images/cartridge-edit.png</iconset>
++   </property>
++   <property name="text" >
++    <string>Update all Volumes from Pool</string>
++   </property>
++   <property name="iconText" >
++    <string>Update all Volumes from Pool</string>
++   </property>
++   <property name="toolTip" >
++    <string>Update all Volumes from Pool</string>
++   </property>
++   <property name="statusTip" >
++    <string>Update all Volumes from Pool</string>
++   </property>
++  </action>
+   <action name="actionVolumeFromPool" >
+    <property name="icon" >
+     <iconset resource="../main.qrc" >:/images/cartridge-edit.png</iconset>
+Index: src/qt-console/medialist/medialist.cpp
+===================================================================
+--- src/qt-console/medialist/medialist.cpp     (revision 5406)
++++ src/qt-console/medialist/medialist.cpp     (working copy)
+@@ -251,6 +251,7 @@
+    /* connect to the action specific to this pages class */
+    connect(actionRefreshMediaList, SIGNAL(triggered()), this,
+                 SLOT(populateTree()));
++   connect(actionAllVolumes, SIGNAL(triggered()), this, SLOT(allVolumes()));
+    connect(actionAllVolumesFromPool, SIGNAL(triggered()), this, SLOT(allVolumesFromPool()));
+    connect(actionVolumeFromPool, SIGNAL(triggered()), this, SLOT(volumeFromPool()));
+ }
+@@ -340,6 +341,13 @@
+    populateTree();
+ }
++void MediaList::allVolumes()
++{
++   QString cmd = "update volume allvolume";
++   consoleCommand(cmd);
++   populateTree();
++}
++
+ /*
+  * Called from the signal of the context sensitive menu to purge!
+  */
index 3653905742db006563ec0853c4f8542b04d3f8fd..173de4bb6261f3d529ee1c60615294c6dda397cc 100644 (file)
@@ -679,7 +679,7 @@ Item 19:  Automatic disabling of devices
 Item 20:  An option to operate on all pools with update vol parameters
   Origin: Dmitriy Pinchukov <absh@bossdev.kiev.ua>
    Date:  16 August 2006
-  Status:
+  Status: Patch made by  Nigel Stepp
 
    What:  When I do update -> Volume parameters -> All Volumes
           from Pool, then I have to select pools one by one.  I'd like