1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/DiskUsage.cc
12 #include "zypp/DiskUsage.h"
17 ///////////////////////////////////////////////////////////////////
19 { /////////////////////////////////////////////////////////////////
20 std::ostream & operator<<( std::ostream & str, const DiskUsage::Entry & obj )
22 return str << obj.path << '\t' << obj._size << "; files " << obj._files;
25 DiskUsage::Entry DiskUsage::extract( const std::string & dirname_r )
27 Entry ret( dirname_r );
29 iterator fst = begin();
30 for ( ; fst != end() && !fst->isBelow( ret ); ++fst )
31 ; // seek 1st equal or below
37 // return the first found, the value is sum of all subdirectories below
39 for ( ; lst != end() && lst->isBelow( ret ); ++lst ) {
42 _dirs.erase( fst, lst );
45 // the dir entry has been found, update all parent entries
48 std::string dname = dirname_r;
49 if (dname.size() > 1 && dname[0] != '/')
51 dname.insert(dname.begin(), '/');
56 tmp._size = ret._size;
57 tmp._files = ret._files;
58 // subtract du from directories above
59 iterator fst = begin();
60 for ( ; fst != end(); ++fst )
62 // add slash if it's missing
63 std::string dd = fst->path;
64 if (dd.size() > 1 && dd[0] != '/')
66 dd.insert(dd.begin(), '/');
80 std::ostream & operator<<( std::ostream & str, const DiskUsage & obj )
82 str << "Package Disk Usage {" << endl;
83 for ( DiskUsage::EntrySet::const_iterator it = obj._dirs.begin(); it != obj._dirs.end(); ++it ) {
84 str << " " << *it << endl;
91 ///////////////////////////////////////////////////////////////////