Fix disk usage computation for single packages (bnc#852943)
authorMichael Andres <ma@suse.de>
Thu, 12 Dec 2013 16:06:01 +0000 (17:06 +0100)
committerMichael Andres <ma@suse.de>
Thu, 12 Dec 2013 16:11:36 +0000 (17:11 +0100)
tests/sat/Solvable_test.cc
zypp/DiskUsageCounter.cc

index 4f3396a..4532a5d 100644 (file)
@@ -203,4 +203,10 @@ BOOST_AUTO_TEST_CASE(SplitIdent)
 
 }
 
+BOOST_AUTO_TEST_CASE(duData)
+{
+  DiskUsageCounter ducounter( DiskUsageCounter::justRootPartition() );
 
+  sat::Solvable s = *sat::WhatProvides( Capability("glibc-devel.x86_64 == 2.8.90-2.3") ).begin();
+  BOOST_CHECK_EQUAL( (*ducounter.disk_usage( s ).begin()).pkg_size, 30629 );
+}
index aa33a75..551af8f 100644 (file)
@@ -19,6 +19,7 @@ extern "C"
 
 #include "zypp/base/Easy.h"
 #include "zypp/base/LogTools.h"
+#include "zypp/base/DtorReset.h"
 #include "zypp/base/String.h"
 
 #include "zypp/DiskUsageCounter.h"
@@ -37,7 +38,7 @@ namespace zypp
 
     struct SatMap : private base::NonCopyable
     {
-      SatMap( unsigned capacity_r = 1 )
+      SatMap()
       {
         ::map_init( &_installedmap, sat::Pool::instance().capacity() );
       }
@@ -56,10 +57,8 @@ namespace zypp
       mutable ::Map _installedmap;
     };
 
-    DiskUsageCounter::MountPointSet calcDiskUsage( const DiskUsageCounter::MountPointSet & mps_r, const SatMap & installedmap_r )
+    DiskUsageCounter::MountPointSet calcDiskUsage( DiskUsageCounter::MountPointSet result, const SatMap & installedmap_r )
     {
-      DiskUsageCounter::MountPointSet result = mps_r;
-
       if ( result.empty() )
       {
         // partitioning is not set
@@ -92,7 +91,6 @@ namespace zypp
         for_( it, result.begin(), result.end() )
         {
           static const ByteCount blockAdjust( 2, ByteCount::K ); // (files * blocksize) / (2 * 1K)
-
           it->pkg_size = it->used_size          // current usage
                        + duchanges[idx].kbytes  // package data size
                        + ( duchanges[idx].files * it->block_size / blockAdjust ); // half block per file
@@ -109,7 +107,7 @@ namespace zypp
 
   DiskUsageCounter::MountPointSet DiskUsageCounter::disk_usage( const ResPool & pool_r )
   {
-    SatMap installedmap( sat::Pool::instance().capacity() );
+    SatMap installedmap;
     // build installedmap (installed != transact)
     // stays installed or gets installed
     for_( it, pool_r.begin(), pool_r.end() )
@@ -126,6 +124,11 @@ namespace zypp
   {
     SatMap installedmap;
     installedmap.add( solv_r );
+
+    // temp. unset @system Repo
+    DtorReset tmp( sat::Pool::instance().get()->installed );
+    sat::Pool::instance().get()->installed = nullptr;
+
     return calcDiskUsage( mps, installedmap );
   }