[prev in list] [next in list] [prev in thread] [next in thread] 

List:       bacula-commits
Subject:    [Bacula-commits] [bacula.org] Bacula Community source branch
From:       git () bacula ! org
Date:       2011-04-15 11:54:20
Message-ID: 20110415115421.486C11CD4AA () bacula ! bacula ! org
[Download RAW message or body]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Bacula Community source".

The branch, Branch-5.1 has been updated
       via  ae721024b04eec87e899473703e8b5dfd88b7a0b (commit)
       via  68f3a84db66e3715ebae3a4aa4501460a46bd7fc (commit)
       via  fb038947a2d4a8ffcc774603f4db0ce41469dcde (commit)
       via  b48c48e856d57f50f9fa7b17281193a16101d5d7 (commit)
       via  e0df8a2ad1f66a1b6fe59138a542a9641550f453 (commit)
      from  05ef666d31afd16c61a9c10a86956a4485927f85 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ae721024b04eec87e899473703e8b5dfd88b7a0b
Author: Eric Bollengier <eric@eb.homelinux.org>
Date:   Fri Apr 15 13:52:08 2011 +0200

    bweb: update tpl

commit 68f3a84db66e3715ebae3a4aa4501460a46bd7fc
Author: Eric Bollengier <eric@eb.homelinux.org>
Date:   Fri Apr 15 13:51:49 2011 +0200

    bweb: Fix recyclepool problem reported by Magnus Kulk

commit fb038947a2d4a8ffcc774603f4db0ce41469dcde
Author: Eric Bollengier <eric@eb.homelinux.org>
Date:   Wed Apr 13 11:32:09 2011 +0200

    regress: add checks checksums for #1612

commit b48c48e856d57f50f9fa7b17281193a16101d5d7
Author: Eric Bollengier <eric@eb.homelinux.org>
Date:   Wed Apr 13 11:31:44 2011 +0200

    Fix #1612 about checksum for hardlinks

commit e0df8a2ad1f66a1b6fe59138a542a9641550f453
Author: Marco van Wieringen <mvw@planets.elm.net>
Date:   Mon Apr 11 20:31:54 2011 +0200

    Tweak configure

-----------------------------------------------------------------------

Summary of changes:
diff --git a/bacula/autoconf/acconfig.h b/bacula/autoconf/acconfig.h
index 55a7c95..de62f6c 100644
--- a/bacula/autoconf/acconfig.h
+++ b/bacula/autoconf/acconfig.h
@@ -179,6 +179,7 @@
 #undef HAVE_SOCKLEN_T
 
 #undef HAVE_OLD_SOCKOPT
+#undef USE_THR_SETCONCURRENCY
  
 /* Defined if Gtk+-2.4 or greater is present */
 #undef HAVE_GTK_2_4
diff --git a/bacula/autoconf/config.h.in b/bacula/autoconf/config.h.in
index c0fe5e9..2b4f018 100644
--- a/bacula/autoconf/config.h.in
+++ b/bacula/autoconf/config.h.in
@@ -179,6 +179,7 @@
 #undef HAVE_SOCKLEN_T
 
 #undef HAVE_OLD_SOCKOPT
+#undef USE_THR_SETCONCURRENCY
  
 /* Defined if Gtk+-2.4 or greater is present */
 #undef HAVE_GTK_2_4
diff --git a/bacula/autoconf/config.h.in.save b/bacula/autoconf/config.h.in.save
index 33dfaab..3590d47 100644
--- a/bacula/autoconf/config.h.in.save
+++ b/bacula/autoconf/config.h.in.save
@@ -176,6 +176,7 @@
 #undef HAVE_SOCKLEN_T
 
 #undef HAVE_OLD_SOCKOPT
+#undef USE_THR_SETCONCURRENCY
  
 /* Defined if Gtk+-2.4 or greater is present */
 #undef HAVE_GTK_2_4
diff --git a/bacula/configure b/bacula/configure
index 53f7c3a..483d915 100755
--- a/bacula/configure
+++ b/bacula/configure
@@ -29763,10 +29763,17 @@ solaris)
        platforms/solaris/bacula-fd \
        platforms/solaris/bacula-sd \
        platforms/solaris/bacula-dir"
-   if test x$DISTVER = x5.6 ; then
+   case ${DISTVER} in
+   5.5|5.6)
        $as_echo "#define HAVE_OLD_SOCKOPT 1" >>confdefs.h
-
-   fi
+       $as_echo "#define USE_THR_SETCONCURRENCY 1" >>confdefs.h
+      ;;
+   5.7|5.8)
+       $as_echo "#define USE_THR_SETCONCURRENCY 1" >>confdefs.h
+      ;;
+   *)
+      ;;
+   esac
    LIBS="$LIBS -lresolv -lrt"
   ;;
 suse)
diff --git a/bacula/src/filed/backup.c b/bacula/src/filed/backup.c
index 562621d..ab842c3 100644
--- a/bacula/src/filed/backup.c
+++ b/bacula/src/filed/backup.c
@@ -741,11 +741,29 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
          goto bail_out;
       }
 
+      /* Keep the checksum if this file is a hardlink */
+      if (ff_pkt->linked) {
+         ff_pkt_set_link_digest(ff_pkt, digest_stream, sd->msg, size);
+      }
+
       sd->msglen = size;
       sd->send();
       sd->signal(BNET_EOD);              /* end of checksum */
    }
 
+   /* Check if original file has a digest, and send it */
+   if (ff_pkt->type == FT_LNKSAVED && ff_pkt->digest) {
+      Dmsg2(300, "Link %s digest %d\n", ff_pkt->fname, ff_pkt->digest_len);
+      sd->fsend("%ld %d 0", jcr->JobFiles, ff_pkt->digest_stream);
+
+      sd->msg = check_pool_memory_size(sd->msg, ff_pkt->digest_len);
+      memcpy(sd->msg, ff_pkt->digest, ff_pkt->digest_len);
+      sd->msglen = ff_pkt->digest_len;
+      sd->send();
+
+      sd->signal(BNET_EOD);              /* end of hardlink record */
+   }
+
 good_rtn:
    rtnstat = jcr->is_canceled() ? 0 : 1; /* good return if not canceled */
 
@@ -1199,7 +1217,7 @@ bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int \
&data_stream)  switch (ff_pkt->type) {
    case FT_LNK:
    case FT_LNKSAVED:
-      Dmsg2(300, "Link %s to %s\n", ff_pkt->fname, ff_pkt->link);
+      Dmsg3(300, "Link %d %s to %s\n", jcr->JobFiles, ff_pkt->fname, ff_pkt->link);
       stat = sd->fsend("%ld %d %s%c%s%c%s%c%s%c%u%c", jcr->JobFiles,
                        ff_pkt->type, ff_pkt->fname, 0, attribs, 0, 
                        ff_pkt->link, 0, attribsEx, 0, ff_pkt->delta_seq, 0);
diff --git a/bacula/src/findlib/find.h b/bacula/src/findlib/find.h
index 8671094..804eeae 100644
--- a/bacula/src/findlib/find.h
+++ b/bacula/src/findlib/find.h
@@ -165,7 +165,10 @@ struct FF_PKT {
    POOLMEM *sys_fname;                /* system filename */
    POOLMEM *fname_save;               /* save when stripping path */
    POOLMEM *link_save;                /* save when stripping path */
+   char *digest;                      /* set to file digest when the file is a \
hardlink */  struct stat statp;                 /* stat packet */
+   uint32_t digest_len;               /* set to the digest len when the file is a \
hardlink*/ +   int32_t digest_stream;             /* set to digest type when the file \
is hardlink */  int32_t FileIndex;                 /* FileIndex of this file */
    int32_t LinkFI;                    /* FileIndex of main hard linked file */
    int32_t delta_seq;                 /* Delta Sequence number */
diff --git a/bacula/src/findlib/find_one.c b/bacula/src/findlib/find_one.c
index 64a5ec0..b2d7f98 100644
--- a/bacula/src/findlib/find_one.c
+++ b/bacula/src/findlib/find_one.c
@@ -59,6 +59,9 @@ struct f_link {
     dev_t dev;                        /* device */
     ino_t ino;                        /* inode with device is unique */
     uint32_t FileIndex;               /* Bacula FileIndex of this file */
+    int32_t digest_stream;            /* Digest type if needed */
+    uint32_t digest_len;              /* Digest len if needed */
+    char *digest;                     /* Checksum of the file if needed */
     char name[1];                     /* The name */
 };
 
@@ -326,6 +329,22 @@ static bool have_ignoredir(FF_PKT *ff_pkt)
    return false;
 }
 
+/* 
+ * When the current file is a hardlink, the backup code can compute
+ * the checksum and store it into the link_t structure.
+ */
+void
+ff_pkt_set_link_digest(FF_PKT *ff_pkt,
+                       int32_t digest_stream, const char *digest, uint32_t len)
+{
+   if (ff_pkt->linked && !ff_pkt->linked->digest) {     /* is a hardlink */
+      ff_pkt->linked->digest = (char *) bmalloc(len);
+      memcpy(ff_pkt->linked->digest, digest, len);
+      ff_pkt->linked->digest_len = len;
+      ff_pkt->linked->digest_stream = digest_stream;
+   }
+}
+
 /*
  * Find a single file.
  * handle_file is the callback for handling the file.
@@ -473,6 +492,9 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt,
              ff_pkt->type = FT_LNKSAVED;       /* Handle link, file already saved */
              ff_pkt->LinkFI = lp->FileIndex;
              ff_pkt->linked = 0;
+             ff_pkt->digest = lp->digest;
+             ff_pkt->digest_stream = lp->digest_stream;
+             ff_pkt->digest_len = lp->digest_len;
              rtn_stat = handle_file(jcr, ff_pkt, top_level);
              Dmsg3(400, "FT_LNKSAVED FI=%d LinkFI=%d file=%s\n", 
                 ff_pkt->FileIndex, lp->FileIndex, lp->name);
@@ -482,6 +504,9 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt,
       /* File not previously dumped. Chain it into our list. */
       len = strlen(fname) + 1;
       lp = (struct f_link *)bmalloc(sizeof(struct f_link) + len);
+      lp->digest = NULL;                /* set later */
+      lp->digest_stream = 0;            /* set later */
+      lp->digest_len = 0;               /* set later */
       lp->ino = ff_pkt->statp.st_ino;
       lp->dev = ff_pkt->statp.st_dev;
       lp->FileIndex = 0;                  /* set later */
@@ -808,16 +833,19 @@ int term_find_one(FF_PKT *ff)
 
    for (i =0 ; i < LINK_HASHTABLE_SIZE; i ++) {
    /* Free up list of hard linked files */
-       lp = ff->linkhash[i];
-       while (lp) {
-      lc = lp;
-      lp = lp->next;
-      if (lc) {
-         free(lc);
-         count++;
+      lp = ff->linkhash[i];
+      while (lp) {
+         lc = lp;
+         lp = lp->next;
+         if (lc) {
+            if (lc->digest) {
+               free(lc->digest);
+            }
+            free(lc);
+            count++;
+         }
       }
-   }
-       ff->linkhash[i] = NULL;
+      ff->linkhash[i] = NULL;
    }
    free(ff->linkhash);
    ff->linkhash = NULL;
diff --git a/bacula/src/findlib/protos.h b/bacula/src/findlib/protos.h
index 71076c6..b738b21 100644
--- a/bacula/src/findlib/protos.h
+++ b/bacula/src/findlib/protos.h
@@ -70,6 +70,8 @@ int   find_one_file(JCR *jcr, FF_PKT *ff,
 int   term_find_one(FF_PKT *ff);
 bool  has_file_changed(JCR *jcr, FF_PKT *ff_pkt);
 bool check_changes(JCR *jcr, FF_PKT *ff_pkt);
+void ff_pkt_set_link_digest(FF_PKT *ff_pkt, 
+                            int32_t digest_stream, const char *digest, uint32_t \
len);  
 /* From get_priv.c */
 int enable_backup_privileges(JCR *jcr, int ignore_errors);
diff --git a/gui/bweb/lang/en/tpl/update_media.tpl \
b/gui/bweb/lang/en/tpl/update_media.tpl index 1d835a5..2ca82d7 100644
--- a/gui/bweb/lang/en/tpl/update_media.tpl
+++ b/gui/bweb/lang/en/tpl/update_media.tpl
@@ -97,6 +97,7 @@
     </tr>
     <tr><td>Recycle Pool:</td>
         <td><select name='poolrecycle' class='formulaire'>
+             <option value='' title='*None*'></option>
 <TMPL_LOOP db_pools>
              <option value='<TMPL_VAR name>'><TMPL_VAR name></option>
 </TMPL_LOOP>
diff --git a/gui/bweb/lang/es/tpl/update_media.tpl \
b/gui/bweb/lang/es/tpl/update_media.tpl index 050f742..2ca82d7 100644
--- a/gui/bweb/lang/es/tpl/update_media.tpl
+++ b/gui/bweb/lang/es/tpl/update_media.tpl
@@ -1,6 +1,6 @@
 <br/>
 <div class='titlediv'>
- <h1 class='newstitle'>Update medium <TMPL_VAR volumename></h1>
+ <h1 class='newstitle'>Update media <TMPL_VAR volumename></h1>
 </div>
 <div class='bodydiv'>
   <form name='form1' action="?" method='GET'>
@@ -17,7 +17,7 @@
            </select>
         </td>
     </tr>
-    <tr><td>Estado:</td>
+    <tr><td>Status:</td>
         <td><select name='volstatus' class='formulaire'>
            <option value='Append'>Append</option>
            <option value='Archive'>Archive</option>
@@ -40,14 +40,14 @@
         </td>
     </tr>
 
-    <tr><td>Cargado:</td>
+    <tr><td>InChanger Flag:</td>
         <td> 
           <input class='formulaire' type='checkbox' 
                name='inchanger' <TMPL_IF inchanger>checked</TMPL_IF>>
         </td>
     </tr>
 
-    <tr><td>Activado :</td>
+    <tr><td>Enabled:</td>
         <td> <select name='enabled' class='formulaire'>
            <option value='yes'>yes</option>
            <option value='no'>no</option>
@@ -56,7 +56,7 @@
         </td>
     </tr>
 
-    <tr><td> Ubicación : </td>
+    <tr><td> Location: </td>
         <td><select name='location' class='formulaire'>
         <option value=''></option>
   <TMPL_LOOP db_locations>
@@ -65,7 +65,7 @@
     </select>
         </td>
     </tr>
-    <tr><td> Período de Retención: </td>
+    <tr><td> Retention period: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 3 days, 1 month'
                name='volretention' value='<TMPL_VAR volretention>'>
@@ -77,19 +77,19 @@
                name='voluseduration' value='<TMPL_VAR voluseduration>'>
         </td>
     </tr>
-    <tr><td> Jobs Máximos: </td>
+    <tr><td> Max Jobs: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 10'
                name='maxvoljobs' value='<TMPL_VAR maxvoljobs>'>
         </td>
     </tr>
-    <tr><td> Archivos Máximos: </td>
+    <tr><td> Max Files: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 10000'
                name='maxvolfiles' value='<TMPL_VAR maxvolfiles>'>
         </td>
     </tr>
-    <tr><td> Bytes Máximos: </td>
+    <tr><td> Max Bytes: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 10M, 11G'
                name='maxvolbytes' value='<TMPL_VAR maxvolbytes>'>
@@ -97,13 +97,14 @@
     </tr>
     <tr><td>Recycle Pool:</td>
         <td><select name='poolrecycle' class='formulaire'>
+             <option value='' title='*None*'></option>
 <TMPL_LOOP db_pools>
              <option value='<TMPL_VAR name>'><TMPL_VAR name></option>
 </TMPL_LOOP>
            </select>
         </td>
     </tr>
-    <tr><td> Comentario: </td>
+    <tr><td> Comment: </td>
         <td>
           <input class='formulaire' type='text' title='a comment'
                name='comment' value='<TMPL_VAR comment>'>
@@ -114,15 +115,15 @@
 <table>
  <td>
   <button type="submit" class="bp" name='action' value='do_update_media'> <img \
                src='/bweb/apply.png' alt=''> Apply </button>
-  <button type="submit" class="bp" name='action' title='Actualizar del Pool'
-    value='update_from_pool'> <img src='/bweb/update.png' alt=''> Actualizar del \
Pool </button> +  <button type="submit" class="bp" name='action' title='Update from \
pool' +    value='update_from_pool'> <img src='/bweb/update.png' alt=''> Update from \
pool </button>  </form>
  </td>
  <td>
   <form action='?' method='GET'>
    <input type='hidden' name='pool' value='<TMPL_VAR poolname>'>
     <button type="submit" class="bp" name='action' value='media'>
-     <img src='/bweb/zoom.png' alt=''>Ver Pool </button>
+     <img src='/bweb/zoom.png' alt=''>View Pool </button>
   </form>
  </td>
 </table>
diff --git a/gui/bweb/lang/fr/tpl/update_media.tpl \
b/gui/bweb/lang/fr/tpl/update_media.tpl index a1a60ee..2ca82d7 100644
--- a/gui/bweb/lang/fr/tpl/update_media.tpl
+++ b/gui/bweb/lang/fr/tpl/update_media.tpl
@@ -1,15 +1,15 @@
 <br/>
 <div class='titlediv'>
- <h1 class='newstitle'>Modifier le media <TMPL_VAR volumename></h1>
+ <h1 class='newstitle'>Update media <TMPL_VAR volumename></h1>
 </div>
 <div class='bodydiv'>
   <form name='form1' action="?" method='GET'>
    <table>
-    <tr><td>Nom du volume :</td>
-        <td><input type='text' name='media' class='formulaire' value='<TMPL_VAR \
volumename>' title='Modifiez ce champs pour mettre à jour un autre média'> +    \
<tr><td>Volume Name:</td> +        <td><input type='text' name='media' \
class='formulaire' value='<TMPL_VAR volumename>' title='Change this to update an \
other volume'>  </td>
     </tr>
-    <tr><td>Pool :</td>
+    <tr><td>Pool:</td>
         <td><select name='pool' class='formulaire'>
 <TMPL_LOOP db_pools>
              <option value='<TMPL_VAR name>'><TMPL_VAR name></option>
@@ -17,7 +17,7 @@
            </select>
         </td>
     </tr>
-    <tr><td>Statut :</td>
+    <tr><td>Status:</td>
         <td><select name='volstatus' class='formulaire'>
            <option value='Append'>Append</option>
            <option value='Archive'>Archive</option>
@@ -33,30 +33,30 @@
         </td>
     </tr>
 
-    <tr><td>Slot :</td>
+    <tr><td>Slot:</td>
         <td> 
           <input class='formulaire' type='text' 
                  name='slot' value='<TMPL_VAR slot>'>
         </td>
     </tr>
 
-    <tr><td>En ligne :</td>
+    <tr><td>InChanger Flag:</td>
         <td> 
           <input class='formulaire' type='checkbox' 
                name='inchanger' <TMPL_IF inchanger>checked</TMPL_IF>>
         </td>
     </tr>
 
-    <tr><td>En ligne :</td>
+    <tr><td>Enabled:</td>
         <td> <select name='enabled' class='formulaire'>
-           <option value='yes'>oui</option>
-           <option value='no'>non</option>
-           <option value='archived'>archivé</option>
+           <option value='yes'>yes</option>
+           <option value='no'>no</option>
+           <option value='archived'>archived</option>
            </select>
         </td>
     </tr>
 
-    <tr><td> Localisation : </td>
+    <tr><td> Location: </td>
         <td><select name='location' class='formulaire'>
         <option value=''></option>
   <TMPL_LOOP db_locations>
@@ -65,47 +65,48 @@
     </select>
         </td>
     </tr>
-    <tr><td> Période de rétention : </td>
+    <tr><td> Retention period: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 3 days, 1 month'
                name='volretention' value='<TMPL_VAR volretention>'>
         </td>
     </tr>
-    <tr><td> Durée d'utilisation : </td>
+    <tr><td> Use duration: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 3 days, 1 month'
                name='voluseduration' value='<TMPL_VAR voluseduration>'>
         </td>
     </tr>
-    <tr><td> Nombre de jobs maxi : </td>
+    <tr><td> Max Jobs: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 10'
                name='maxvoljobs' value='<TMPL_VAR maxvoljobs>'>
         </td>
     </tr>
-    <tr><td> Nombre de fichiers maxi : </td>
+    <tr><td> Max Files: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 10000'
                name='maxvolfiles' value='<TMPL_VAR maxvolfiles>'>
         </td>
     </tr>
-    <tr><td> Taille maxi : </td>
+    <tr><td> Max Bytes: </td>
         <td>
           <input class='formulaire' type='text' title='ex: 10M, 11G'
                name='maxvolbytes' value='<TMPL_VAR maxvolbytes>'>
         </td>
     </tr>
-    <tr><td>Pool de recyclage :</td>
+    <tr><td>Recycle Pool:</td>
         <td><select name='poolrecycle' class='formulaire'>
+             <option value='' title='*None*'></option>
 <TMPL_LOOP db_pools>
              <option value='<TMPL_VAR name>'><TMPL_VAR name></option>
 </TMPL_LOOP>
            </select>
         </td>
     </tr>
-    <tr><td> Commentaire : </td>
+    <tr><td> Comment: </td>
         <td>
-          <input class='formulaire' type='text' title='un commentaire'
+          <input class='formulaire' type='text' title='a comment'
                name='comment' value='<TMPL_VAR comment>'>
         </td>
     </tr>
@@ -113,16 +114,16 @@
     </table>
 <table>
  <td>
-  <button type="submit" class="bp" name='action' value='do_update_media'> <img \
                src='/bweb/apply.png' alt=''> Appliquer </button>
-  <button type="submit" class="bp" name='action' title='Mettre à jour à partir du \
                pool'
-    value='update_from_pool'> <img src='/bweb/update.png' alt=''> Mettre à jour à \
partir du pool </button> +  <button type="submit" class="bp" name='action' \
value='do_update_media'> <img src='/bweb/apply.png' alt=''> Apply </button> +  \
<button type="submit" class="bp" name='action' title='Update from pool' +    \
value='update_from_pool'> <img src='/bweb/update.png' alt=''> Update from pool \
</button>  </form>
  </td>
  <td>
   <form action='?' method='GET'>
    <input type='hidden' name='pool' value='<TMPL_VAR poolname>'>
     <button type="submit" class="bp" name='action' value='media'>
-     <img src='/bweb/zoom.png' alt=''>Voir le pool </button>
+     <img src='/bweb/zoom.png' alt=''>View Pool </button>
   </form>
  </td>
 </table>
diff --git a/gui/bweb/lib/Bweb.pm b/gui/bweb/lib/Bweb.pm
index 174d3e4..b938c19 100644
--- a/gui/bweb/lib/Bweb.pm
+++ b/gui/bweb/lib/Bweb.pm
@@ -1863,6 +1863,8 @@ sub get_form
                  new_dir => 1,
                  job     => 1,
                  storage => 1,
+                 pool   => 1,
+                 poolrecycle => 1,
                  );
     my %opt_s = (               # default to ''
                  ach    => 1,
@@ -1871,14 +1873,12 @@ sub get_form
                  inchanger => 1,
                  client => 1,
                  level  => 1,
-                 pool   => 1,
                  media  => 1,
                  ach    => 1,
                  jobtype=> 1,
                  graph  => 1,
                  gtype  => 1,
                  type   => 1,
-                 poolrecycle => 1,
                  replace => 1,
                  expired => 1,
                  enabled => 1,
@@ -4569,7 +4569,9 @@ sub do_update_media
 
     if (defined $arg->{poolrecycle}) {
         $update .= " recyclepool=\"$arg->{poolrecycle}\" " ;
-    }        
+    } else {
+        $update .= " recyclepool= " ;
+    }
     
     my $b = $self->get_bconsole();
 
diff --git a/gui/bweb/tpl/update_media.tpl b/gui/bweb/tpl/update_media.tpl
index d270667..63ad435 100644
--- a/gui/bweb/tpl/update_media.tpl
+++ b/gui/bweb/tpl/update_media.tpl
@@ -97,6 +97,7 @@
     </tr>
     <tr><td>__Recycle Pool:__</td>
         <td><select name='poolrecycle' class='formulaire'>
+             <option value='' title='*__None__*'></option>
 <TMPL_LOOP db_pools>
              <option value='<TMPL_VAR name>'><TMPL_VAR name></option>
 </TMPL_LOOP>
diff --git a/regress/tests/hardlink-test b/regress/tests/hardlink-test
index 33d6329..6d9bfd2 100755
--- a/regress/tests/hardlink-test
+++ b/regress/tests/hardlink-test
@@ -34,6 +34,7 @@ messages
 @$out ${cwd}/tmp/log1.out
 label storage=File
 TestVolume001
+setdebug level=500 client=localhost-fd trace=1
 run job=$JobName    
 yes
 wait
@@ -42,7 +43,7 @@ messages
 @# now do a restore
 @#
 @$out ${cwd}/tmp/log2.out
-setdebug level=200 client=localhost-fd
+setdebug level=200 client=localhost-fd trace=0
 restore where=${cwd}/tmp/bacula-restores storage=File
 5
 cd ${cwd}/weird-files/subdir
@@ -51,6 +52,21 @@ done
 yes
 wait
 messages
+@$out ${cwd}/tmp/log3.out
+@# They should all have a MD5
+sql
+SELECT Name, Md5
+  FROM File JOIN Filename USING (FilenameId)
+ WHERE Name LIKE 'hard%' OR Name = 'normalfile';
+
+@$out ${cwd}/tmp/log4.out
+@# As we backup two times the same directory, the number should be 4
+sql
+SELECT count(1), Md5
+  FROM File JOIN Filename USING (FilenameId)
+ WHERE Name = 'hardlink-to-normalfile' OR Name = 'normalfile'
+ GROUP By Md5;
+
 quit
 END_OF_DATA
 
@@ -62,4 +78,18 @@ check_two_logs
 diff ${cwd}/weird-files/subdir/another-hardlink \
   ${cwd}/tmp/bacula-restores/${cwd}/weird-files/subdir/another-hardlink 2>&1 \
>/dev/null  dstat=$?
+
+grep ' 0 ' $tmp/log3.out > /dev/null
+if [ $? -eq 0 ]; then
+    print_debug "ERROR: All hardlinks should have checksums"
+    estat=1
+fi
+
+# if you change the file-list, adjust the number here
+grep ' 4 ' $tmp/log4.out > /dev/null
+if [ $? -ne 0 ]; then
+    print_debug "ERROR: All selected hardlinks should have the same checksum"
+    estat=1
+fi
+
 end_test


hooks/post-receive
-- 
Bacula Community source



------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev

_______________________________________________
Bacula-commits mailing list
Bacula-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic