SET(LIBZYPP_MAJOR "15")
SET(LIBZYPP_COMPATMINOR "19")
SET(LIBZYPP_MINOR "21")
-SET(LIBZYPP_PATCH "0")
+SET(LIBZYPP_PATCH "1")
#
-# LAST RELEASED: 15.21.0 (19)
+# LAST RELEASED: 15.21.1 (19)
# (The number in parenthesis is LIBZYPP_COMPATMINOR)
#=======
%endif
BuildRequires: gettext-devel
BuildRequires: graphviz
-BuildRequires: graphviz-gnome
BuildRequires: libxml2-devel
%if 0%{?suse_version} != 1110
# No libproxy on SLES
-------------------------------------------------------------------
+Fri Jan 29 11:40:51 CET 2016 - ma@suse.de
+
+- Don't buildrequire graphviz-gnome (bsc#964150)
+- Unwanted btrfs subvolumes must be filtered by device (not fsid)
+ (fixes #54)
+- version 15.21.1 (19)
+
+-------------------------------------------------------------------
+Thu Jan 21 01:13:29 CET 2016 - ma@suse.de
+
+- Update zypp-po.tar.bz2
+
+-------------------------------------------------------------------
Wed Jan 20 17:12:42 CET 2016 - ma@suse.de
- Filter unwanted btrfs subvolumes (fixes #54, closes #55, bnc#949945)
{
DiskUsageCounter::MountPointSet ret;
- typedef std::map<ulong, MountPoint> Btrfsfilter;
+ typedef std::map<std::string, MountPoint> Btrfsfilter;
Btrfsfilter btrfsfilter; // see btrfs hack below
std::ifstream procmounts( "/proc/mounts" );
{
// HACK:
// Collect just the top/1st mountpoint of each btrfs volume
- // (by file system ID). This filters away nested subvolumes
+ // (by device). This filters away nested subvolumes
// which otherwise break per package disk usage computation.
// FIX: Computation must learn to handle multiple mount points
// contributing to the same file system.
- MountPoint & bmp( btrfsfilter[sb.f_fsid] );
+ MountPoint & bmp( btrfsfilter[words[0]] );
if ( bmp.fstype.empty() ) // 1st occurance
{
bmp = DiskUsageCounter::MountPoint( mp, words[2], sb.f_bsize,
** FUNCTION TYPE : std::string
*/
std::string toLower( const std::string & s )
+ { return toLower( std::string(s) ); }
+
+ std::string toLower( std::string && s )
{
- if ( s.empty() )
- return s;
+ std::string ret( std::move(s) );
+
+ if ( ret.empty() )
+ return ret;
- std::string ret( s );
for ( std::string::size_type i = 0; i < ret.length(); ++i )
{
if ( isupper( ret[i] ) )
** FUNCTION TYPE : std::string
*/
std::string toUpper( const std::string & s )
+ { return toUpper( std::string(s) ); }
+
+ std::string toUpper( std::string && s )
{
- if ( s.empty() )
- return s;
+ std::string ret( std::move(s) );
+
+ if ( ret.empty() )
+ return ret;
- std::string ret( s );
for ( std::string::size_type i = 0; i < ret.length(); ++i )
{
if ( islower( ret[i] ) )
** FUNCTION TYPE : std::string
*/
std::string trim( const std::string & s, const Trim trim_r )
+ { return trim( std::string(s), trim_r ); }
+
+ std::string trim( std::string && s, const Trim trim_r )
{
- if ( s.empty() || trim_r == NO_TRIM )
- return s;
+ std::string ret( std::move(s) );
- std::string ret( s );
+ if ( ret.empty() || trim_r == NO_TRIM )
+ return ret;
if ( trim_r & L_TRIM )
- {
- std::string::size_type p = ret.find_first_not_of( " \t\n" );
- if ( p == std::string::npos )
- return std::string();
-
- ret = ret.substr( p );
- }
+ {
+ std::string::size_type p = ret.find_first_not_of( " \t\n" );
+ if ( p == std::string::npos )
+ {
+ ret.clear();
+ return ret;
+ }
+ ret.erase( 0, p );
+ }
if ( trim_r & R_TRIM )
- {
- std::string::size_type p = ret.find_last_not_of( " \t\n" );
- if ( p == std::string::npos )
- return std::string();
-
- ret = ret.substr( 0, p+1 );
- }
+ {
+ std::string::size_type p = ret.find_last_not_of( " \t\n" );
+ if ( p == std::string::npos )
+ {
+ ret.clear();
+ return ret;
+ }
+ ret = ret.erase( p+1 );
+ }
return ret;
}
* \todo improve
*/
std::string toLower( const std::string & s );
+ std::string toLower( std::string && s );
/** \overload */
inline std::string toLower( const char * s )
{ return( s ? toLower( std::string(s) ) : std::string() ); }
* \todo improve
*/
std::string toUpper( const std::string & s );
+ std::string toUpper( std::string && s );
/** \overload */
inline std::string toUpper( const char * s )
{ return( s ? toUpper( std::string(s) ) : std::string() ); }
};
std::string trim( const std::string & s, const Trim trim_r = TRIM );
+ std::string trim( std::string && s, const Trim trim_r = TRIM );
inline std::string ltrim( const std::string & s )
{ return trim( s, L_TRIM ); }
+ inline std::string ltrim( std::string && s )
+ { return trim( std::move(s), L_TRIM ); }
inline std::string rtrim( const std::string & s )
{ return trim( s, R_TRIM ); }
+ inline std::string rtrim( std::string && s )
+ { return trim( std::move(s), R_TRIM ); }
//@}
std::string stripFirstWord( std::string & line, const bool ltrim_first = true );