Hello community,
here is the log from the commit of package libzypp for openSUSE:Factory
checked in at Fri Feb 5 14:10:04 CET 2010.
--------
--- libzypp/libzypp.changes 2009-12-08 20:05:05.000000000 +0100
+++ /mounts/work_src_done/STABLE/libzypp/libzypp.changes 2010-02-03 16:19:17.000000000 +0100
@@ -1,0 +2,40 @@
+Wed Feb 3 15:57:13 CET 2010 - ma@suse.de
+
+- Remember the enabled state of removed service repositories. This
+ way we are able to restore service repositories correctly after a
+ subscrition expired and gets renewed. (bnc #572634)
+- version 6.29.2 (19)
+
+-------------------------------------------------------------------
+Thu Jan 28 16:12:25 CET 2010 - jkupec@suse.cz
+
+- Abort aria2c download when the progress callback receives 'false'
+ (bnc #545106)
+
+-------------------------------------------------------------------
+Tue Jan 19 14:50:15 CET 2010 - ma@suse.de
+
+- Evaluate SolvAttr::repositoryToolVersion to prevent loading
+ outdated solv files. (bnc #570623)
+- version 6.29.0 (19)
+
+-------------------------------------------------------------------
+Fri Jan 15 18:15:26 CET 2010 - jkupec@suse.cz
+
+- Use regex to parse aria2c progress lines (bnc #570917)
+- version 6.28.1 (19)
+
+-------------------------------------------------------------------
+Thu Jan 7 12:25:24 CET 2010 - jkupec@suse.cz
+
+- Set SignatureFileChecker context even if the key is not known
+ (bnc #495977)
+- version 6.28.0 (19)
+
+-------------------------------------------------------------------
+Thu Dec 10 17:18:34 CET 2009 - jkupec@suse.cz
+
+- RepoInfoBase::label() added for use in UI messages, plus
+ ZConfig::repoLabelIsAlias()
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
libzypp-6.27.1.tar.bz2
New:
----
libzypp-6.29.2.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libzypp.spec ++++++
--- /var/tmp/diff_new_pack.AbbfiT/_old 2010-02-05 14:09:33.000000000 +0100
+++ /var/tmp/diff_new_pack.AbbfiT/_new 2010-02-05 14:09:33.000000000 +0100
@@ -1,7 +1,7 @@
#
-# spec file for package libzypp (Version 6.27.1)
+# spec file for package libzypp (Version 6.29.2)
#
-# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
BuildRoot: %{_tmppath}/%{name}-%{version}-build
AutoReqProv: on
Summary: Package, Patch, Pattern, and Product Management
-Version: 6.27.1
+Version: 6.29.2
Release: 1
Source: %{name}-%{version}.tar.bz2
Source1: %{name}-rpmlintrc
@@ -35,7 +35,7 @@
BuildRequires: cmake
BuildRequires: openssl-devel
BuildRequires: boost-devel dejagnu doxygen gcc-c++ gettext-devel graphviz hal-devel libxml2-devel
-BuildRequires: libsatsolver-devel >= 0.14.9
+BuildRequires: libsatsolver-devel >= 0.14.13
%requires_eq satsolver-tools
# required for testsuite, webrick
BuildRequires: ruby
++++++ libzypp-6.27.1.tar.bz2 -> libzypp-6.29.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/libzypp.spec.cmake new/libzypp-6.29.2/libzypp.spec.cmake
--- old/libzypp-6.27.1/libzypp.spec.cmake 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/libzypp.spec.cmake 2010-02-03 16:04:23.000000000 +0100
@@ -28,7 +28,7 @@
BuildRequires: openssl-devel
BuildRequires: boost-devel dejagnu doxygen gcc-c++ gettext-devel graphviz hal-devel libxml2-devel
-BuildRequires: libsatsolver-devel >= 0.14.9
+BuildRequires: libsatsolver-devel >= 0.14.13
%requires_eq satsolver-tools
# required for testsuite, webrick
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/package/libzypp.changes new/libzypp-6.29.2/package/libzypp.changes
--- old/libzypp-6.27.1/package/libzypp.changes 2009-12-08 19:43:43.000000000 +0100
+++ new/libzypp-6.29.2/package/libzypp.changes 2010-02-03 16:04:23.000000000 +0100
@@ -1,4 +1,44 @@
-------------------------------------------------------------------
+Wed Feb 3 15:57:13 CET 2010 - ma@suse.de
+
+- Remember the enabled state of removed service repositories. This
+ way we are able to restore service repositories correctly after a
+ subscrition expired and gets renewed. (bnc #572634)
+- version 6.29.2 (19)
+
+-------------------------------------------------------------------
+Thu Jan 28 16:12:25 CET 2010 - jkupec@suse.cz
+
+- Abort aria2c download when the progress callback receives 'false'
+ (bnc #545106)
+
+-------------------------------------------------------------------
+Tue Jan 19 14:50:15 CET 2010 - ma@suse.de
+
+- Evaluate SolvAttr::repositoryToolVersion to prevent loading
+ outdated solv files. (bnc #570623)
+- version 6.29.0 (19)
+
+-------------------------------------------------------------------
+Fri Jan 15 18:15:26 CET 2010 - jkupec@suse.cz
+
+- Use regex to parse aria2c progress lines (bnc #570917)
+- version 6.28.1 (19)
+
+-------------------------------------------------------------------
+Thu Jan 7 12:25:24 CET 2010 - jkupec@suse.cz
+
+- Set SignatureFileChecker context even if the key is not known
+ (bnc #495977)
+- version 6.28.0 (19)
+
+-------------------------------------------------------------------
+Thu Dec 10 17:18:34 CET 2009 - jkupec@suse.cz
+
+- RepoInfoBase::label() added for use in UI messages, plus
+ ZConfig::repoLabelIsAlias()
+
+-------------------------------------------------------------------
Tue Dec 8 19:41:17 CET 2009 - ma@suse.de
- Fix transaction building in presence of multiversion installable items.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/tests/zypp/Capabilities_test.cc new/libzypp-6.29.2/tests/zypp/Capabilities_test.cc
--- old/libzypp-6.27.1/tests/zypp/Capabilities_test.cc 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/tests/zypp/Capabilities_test.cc 2010-02-03 16:04:23.000000000 +0100
@@ -125,12 +125,16 @@
// With no libzypp in the pool, no guess should succeed:
BOOST_REQUIRE( sat::WhatProvides(Capability("libzypp")).empty() );
+ // these must be guessed
BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp-1-2" ), Capability( "", "libzypp-1-2", "", "" ) );
BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp-1-2.i586" ), Capability( "i586", "libzypp-1-2", "", "" ) );
BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp.i586-1-2" ), Capability( "", "libzypp.i586-1-2", "", "" ) );
- // now load some repo prividing libzypp and csee how the guessing
- // changes:
+ // these are unambiguous
+ BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "patch:swmgmt=12" ), Capability( "", "swmgmt", "=", "12", ResKind::patch ) );
+ BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp=0:1.0.2-2" ), Capability( "", "libzypp", "=", "0:1.0.2-2" ) );
+
+ // now load some repo providing libzypp and see how the guessing changes:
test.loadRepo( TESTS_SRC_DIR "/data/openSUSE-11.1", "opensuse" );
BOOST_REQUIRE( ! sat::WhatProvides(Capability("libzypp")).empty() );
@@ -138,6 +142,9 @@
BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp-1-2" ), Capability( "", "libzypp", "=", "1-2" ) );
BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp-1-2.i586" ), Capability( "i586", "libzypp", "=", "1-2" ) );
BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp.i586-1-2" ), Capability( "i586", "libzypp", "=", "1-2" ) );
+ BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp<=1.0.2-2" ), Capability( "", "libzypp", "<=", "1.0.2-2" ) );
+ BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp<=1:1.0.2-2" ), Capability( "", "libzypp", "<=", "1:1.0.2-2" ) );
+ BOOST_CHECK_EQUAL( Capability::guessPackageSpec( "libzypp-0:1.0.2-2" ), Capability( "", "libzypp", "=", "0:1.0.2-2" ) );
// Double arch spec: the trailing one succeeds, the other one gets part of the name.
// As "libzypp.i586' is not in the pool, guessing fails. Result is a named cap.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/tools/NameReqPrv.cc new/libzypp-6.29.2/tools/NameReqPrv.cc
--- old/libzypp-6.27.1/tools/NameReqPrv.cc 2009-12-08 19:43:43.000000000 +0100
+++ new/libzypp-6.29.2/tools/NameReqPrv.cc 2010-02-03 16:04:23.000000000 +0100
@@ -103,12 +103,14 @@
message << str::form( "*** Load Testcase from '%s'", sysRoot.c_str() ) << endl;
TestSetup test;
test.loadTestcaseRepos( sysRoot );
+ dumpRange( message, satpool.reposBegin(), satpool.reposEnd() ) << endl;
}
else if ( TestSetup::isTestSetup( sysRoot ) )
{
message << str::form( "*** Load TestSetup from '%s'", sysRoot.c_str() ) << endl;
TestSetup test( sysRoot, Arch_x86_64 );
test.loadRepos();
+ dumpRange( message, satpool.reposBegin(), satpool.reposEnd() ) << endl;
}
else
{
@@ -183,6 +185,8 @@
}
PoolQuery q;
+ if ( onlyInstalled )
+ q.setInstalledOnly();
std::string qstr( *argv );
if ( *argv == ResKind::product )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/VERSION.cmake new/libzypp-6.29.2/VERSION.cmake
--- old/libzypp-6.27.1/VERSION.cmake 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/VERSION.cmake 2010-02-03 16:04:23.000000000 +0100
@@ -60,9 +60,9 @@
#
SET(LIBZYPP_MAJOR "6")
SET(LIBZYPP_COMPATMINOR "19")
-SET(LIBZYPP_MINOR "27")
-SET(LIBZYPP_PATCH "1")
+SET(LIBZYPP_MINOR "29")
+SET(LIBZYPP_PATCH "2")
#
-# LAST RELEASED: 6.27.1 (19)
+# LAST RELEASED: 6.29.2 (19)
# (The number in parenthesis is LIBZYPP_COMPATMINOR)
#=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/FileChecker.cc new/libzypp-6.29.2/zypp/FileChecker.cc
--- old/libzypp-6.27.1/zypp/FileChecker.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/FileChecker.cc 2010-02-03 16:04:23.000000000 +0100
@@ -105,6 +105,9 @@
{
}
+ void SignatureFileChecker::setKeyContext(const KeyContext & keycontext)
+ { _context = keycontext; }
+
void SignatureFileChecker::addPublicKey( const Pathname & publickey, const KeyContext & keycontext )
{ addPublicKey( PublicKey(publickey), keycontext ); }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/FileChecker.h new/libzypp-6.29.2/zypp/FileChecker.h
--- old/libzypp-6.27.1/zypp/FileChecker.h 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/FileChecker.h 2010-02-03 16:04:23.000000000 +0100
@@ -99,6 +99,14 @@
*/
SignatureFileChecker();
+ /**
+ * Set context for this checker.
+ *
+ * Use this method if you're not adding the key (with context) via
+ * one of the addPublicKey methods. The addPublicKey method overwrites
+ * the context.
+ */
+ void setKeyContext(const KeyContext & keycontext);
/**
* add a public key to the list of known keys
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/media/MediaAria2c.cc new/libzypp-6.29.2/zypp/media/MediaAria2c.cc
--- old/libzypp-6.27.1/zypp/media/MediaAria2c.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/media/MediaAria2c.cc 2010-02-03 16:04:23.000000000 +0100
@@ -17,6 +17,7 @@
#include
#include "zypp/base/Logger.h"
+#include "zypp/base/Regex.h"
#include "zypp/ExternalProgram.h"
#include "zypp/ProgressData.h"
#include "zypp/base/String.h"
@@ -316,36 +317,78 @@
ExternalProgram aria(args, ExternalProgram::Stderr_To_Stdout);
+ // extended regex for parsing of progress lines
// progress line like: [#1 SIZE:8.3MiB/10.1MiB(82%) CN:5 SPD:6899.88KiB/s]
// but since 1.4.0: [#1 SIZE:8.3MiB/10.1MiB(82%) CN:5 SPD:899.8KiBs]
// (bnc #513944) [#1 SIZE:8.3MiB/10.1MiB(82%) CN:5 SPD:3.8MiBs]
// [#1 SIZE:8.3MiB/10.1MiB(82%) CN:5 SPD:38Bs]
- // we save it until we find a string with FILE: later
- string progressLine;
+ // later got also ETA: [#1 SIZE:8.3MiB/10.1MiB(82%) CN:5 SPD:38Bs ETA:02s]
+ static str::regex rxProgress(
+ "^\\[#[0-9]+ SIZE:[0-9\\.]+(|Ki|Mi|Ti)B/[0-9\\.]+(|Ki|Mi|Ti)B\\(?([0-9]+)?%?\\)? CN:[0-9]+ SPD:([0-9\\.]+)(|Ki|Mi|Ti)Bs.*\\]$");
+
+ // whether we received correct progress line before corresponding FILE line
+ bool gotProgress = false;
+ // download progress in %
int progress = 0;
- // file line, which tell which file is the previous progress
- // ie: FILE: ./packages.FL.gz
+ // current download speed in bytes
+ double current_speed = 0;
+ // download speed in bytes
double average_speed = 0;
+ // number of speed measurements
long average_speed_count = 0;
// here we capture aria output exceptions
vector<string> ariaExceptions;
- // TODO: Detect partial downloads!
- bool partialDownload = false; // Whether it makes sense to retry with --continue!
+ // whether it makes sense to retry with --continue
+ bool partialDownload = false;
+ // whether user request abort of the download
+ bool userAbort = false;
//Process response
for(std::string ariaResponse( aria.receiveLine());
ariaResponse.length();
ariaResponse = aria.receiveLine())
{
- //cout << ariaResponse;
string line = str::trim(ariaResponse);
+ // INT << line << endl;
- // look for the progress line and save it for later
+ // look for the progress line and save parsed values until we find
+ // a string with FILE: later.
if ( str::hasPrefix(line, "[#") )
{
- progressLine = line;
+ str::smatch progressValues;
+ if (( gotProgress = str::regex_match(line, progressValues, rxProgress) ))
+ {
+ // INT << "got: progress: '" << progressValues[3]
+ // << "' speed: '" << progressValues[4] << " "
+ // << progressValues[5] << "Bs'" << endl;
+
+ // get the percentage (progress) data
+ progress = std::atoi(progressValues[3].c_str());
+
+ // get the speed
+
+ int factor = 1; // B/KiB/MiB multiplication factor
+ if (progressValues[5] == "Ki")
+ factor = 1024;
+ else if (progressValues[5] == "Mi")
+ factor = 0x100000;
+ else if (progressValues[5] == "Ti")
+ factor = 0x40000000;
+
+ try {
+ current_speed = boost::lexical_cast<double>(progressValues[4]);
+ // convert to and work with bytes everywhere (bnc #537870)
+ current_speed *= factor;
+ }
+ catch (const std::exception&) {
+ ERR << "Can't parse speed from '" << progressValues[4] << "'" << endl;
+ current_speed = 0;
+ }
+ }
+ else
+ ERR << "Can't parse progress line '" << line << "'" << endl;
}
// save error messages for later
else if ( str::hasPrefix(line, "Exception: ") )
@@ -362,6 +405,8 @@
DBG << "aria2c reported: '" << excpMsg << "'" << endl;
ariaExceptions.push_back(excpMsg);
}
+ // The file line tells which file corresponds to the previous progress,
+ // eg.: FILE: ./packages.FL.gz
else if ( str::hasPrefix(line, "FILE: ") )
{
// get the FILE name
@@ -375,48 +420,8 @@
{
// once we find the FILE: line, progress has to be
// non empty
- if ( ! progressLine.empty() )
+ if ( gotProgress )
{
- // get the percentage (progress) data
- progress = 0;
- size_t left_bound = progressLine.find('(',0) + 1;
- size_t count = progressLine.find('%',left_bound) - left_bound;
- string progressStr = progressLine.substr(left_bound, count);
-
- if ( count != string::npos )
- progress = std::atoi(progressStr.c_str());
- else
- ERR << "Can't parse progress from '" << progressStr << "'" << endl;
-
- // get the speed
- double current_speed = 0;
- int factor = 1; // B/KiB/MiB multiplication factor
-
- left_bound = progressLine.find("SPD:",0) + 4;
- if ((count = progressLine.find("KiB",left_bound)) != string::npos)
- factor = 1024;
- else if ((count = progressLine.find("MiB",left_bound)) != string::npos)
- factor = 0x100000;
- else
- count = progressLine.find("Bs",left_bound);
-
- if ( count != string::npos )
- { // convert the string to a double
- count -= left_bound;
- string speedStr = progressLine.substr(left_bound, count);
- try {
- current_speed = boost::lexical_cast<double>(speedStr);
- // convert to and work with bytes everywhere (bnc #537870)
- current_speed *= factor;
- }
- catch (const std::exception&) {
- ERR << "Can't parse speed from '" << speedStr << "'" << endl;
- current_speed = 0;
- }
- }
- else
- ERR << "Can't parse speed from '" << progressLine << "'" << endl;
-
// we have a new average speed
average_speed_count++;
@@ -426,16 +431,19 @@
(((average_speed_count - 1)*average_speed) + current_speed)
/ average_speed_count;
- report->progress ( progress, fileurl, average_speed, current_speed );
- // clear the progress line to detect mismatches between
- // [# and FILE: lines
- progressLine.clear();
+ if (!partialDownload && progress > 0)
+ partialDownload = true;
+
+ if ( ! report->progress ( progress, fileurl, average_speed, current_speed ) )
+ userAbort = true;
+
+ // clear the flag to detect mismatches between [# and FILE: lines
+ gotProgress = false;
}
else
{
WAR << "aria2c reported a file, but no progress data available" << endl;
}
-
}
else
{
@@ -448,7 +456,14 @@
}
}
- int code = aria.close();
+ int code;
+ if (userAbort)
+ {
+ aria.kill();
+ code = 7;
+ }
+ else
+ code = aria.close();
switch ( code )
{
@@ -492,8 +507,15 @@
}
}
- // TranslatorExplanation: Failed to download <FILENAME> from <SERVERURL>.
- MediaException e(str::form(_("Failed to download %s from %s"), filename.c_str(), _url.asString().c_str()));
+ string msg;
+ if (userAbort)
+ msg = _("Download interrupted by user");
+ else
+ // TranslatorExplanation: Failed to download <FILENAME> from <SERVERURL>.
+ msg = str::form(_("Failed to download %s from %s"),
+ filename.c_str(), _url.asString().c_str());
+
+ MediaException e(msg);
for_(it, ariaExceptions.begin(), ariaExceptions.end())
e.addHistory(*it);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/media/MediaDIR.cc new/libzypp-6.29.2/zypp/media/MediaDIR.cc
--- old/libzypp-6.27.1/zypp/media/MediaDIR.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/media/MediaDIR.cc 2010-02-03 16:04:23.000000000 +0100
@@ -84,7 +84,7 @@
else
{
ZYPP_THROW(MediaBadUrlException(url(),
- "Specified path '" + url().getPathName() + "' is not allowed as media source"
+ "Specified path '" + url().getPathName() + "' is not a directory"
));
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/misc/CheckAccessDeleted.cc new/libzypp-6.29.2/zypp/misc/CheckAccessDeleted.cc
--- old/libzypp-6.27.1/zypp/misc/CheckAccessDeleted.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/misc/CheckAccessDeleted.cc 2010-02-03 16:04:23.000000000 +0100
@@ -88,7 +88,7 @@
pinfo.command = command.basename();
}
- MIL << " Take " << pinfo << endl;
+ //MIL << " Take " << pinfo << endl;
}
/** Add line to cache if it refers to a deleted executable or library file:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/Pathname.cc new/libzypp-6.29.2/zypp/Pathname.cc
--- old/libzypp-6.27.1/zypp/Pathname.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/Pathname.cc 2010-02-03 16:04:23.000000000 +0100
@@ -154,7 +154,7 @@
}
// rel or abs path
- if ( *R_pci == '/' || *R_pci == '\\' ) {
+ if ( *R_pci == '/' ) {
Stack_Ci.Push( "" );
++R_pci;
} else {
@@ -164,7 +164,6 @@
do {
switch ( *R_pci ) {
case '/':
- case '\\':
case '\0':
if ( W_pci != Buf_aci ) {
*W_pci = '\0';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/repo/RepoInfoBase.cc new/libzypp-6.29.2/zypp/repo/RepoInfoBase.cc
--- old/libzypp-6.27.1/zypp/repo/RepoInfoBase.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/repo/RepoInfoBase.cc 2010-02-03 16:04:23.000000000 +0100
@@ -11,6 +11,7 @@
*/
#include <iostream>
+#include "zypp/ZConfig.h"
#include "zypp/repo/RepoVariables.h"
#include "zypp/repo/RepoInfoBase.h"
@@ -135,6 +136,13 @@
return replacer(_pimpl->name);
}
+ std::string RepoInfoBase::label() const
+ {
+ if ( ZConfig::instance().repoLabelIsAlias() )
+ return alias();
+ return name();
+ }
+
Pathname RepoInfoBase::filepath() const
{ return _pimpl->filepath; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/repo/RepoInfoBase.h new/libzypp-6.29.2/zypp/repo/RepoInfoBase.h
--- old/libzypp-6.27.1/zypp/repo/RepoInfoBase.h 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/repo/RepoInfoBase.h 2010-02-03 16:04:23.000000000 +0100
@@ -59,13 +59,19 @@
/**
* \short Repository short label
*
- * Short label or description of the repository, to be used on
- * the user interface.
+ * Short label or description of the repository.
* ie: "SUSE Linux 10.2 updates"
*/
std::string name() const;
/**
+ * \short Label for use in messages for the user interface.
+ *
+ * Returns an alias or name, according to ZConfig::repoLabelIsAlias().
+ */
+ std::string label() const;
+
+ /**
* If enabled is false, then this repository must be ignored as if does
* not exists, except when checking for duplicate alias.
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/repo/susetags/Downloader.cc new/libzypp-6.29.2/zypp/repo/susetags/Downloader.cc
--- old/libzypp-6.27.1/zypp/repo/susetags/Downloader.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/repo/susetags/Downloader.cc 2010-02-03 16:04:23.000000000 +0100
@@ -63,13 +63,17 @@
this->enqueue( OnMediaLocation( key, 1 ).setOptional(true) );
this->start( dest_dir, media );
+
+ KeyContext context;
+ context.setRepoInfo(repoInfo());
// only if there is a key in the destination directory
if ( PathInfo(dest_dir / key).isExist() )
- {
- KeyContext context;
- context.setRepoInfo(repoInfo());
sigchecker.addPublicKey(dest_dir + key, context);
- }
+ // set the checker context even if the key is not known (unsigned repo, key
+ // file missing; bnc #495977)
+ else
+ sigchecker.setKeyContext(context);
+
this->reset();
if ( ! repoInfo().gpgCheck() )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/repo/yum/Downloader.cc new/libzypp-6.29.2/zypp/repo/yum/Downloader.cc
--- old/libzypp-6.27.1/zypp/repo/yum/Downloader.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/repo/yum/Downloader.cc 2010-02-03 16:04:23.000000000 +0100
@@ -134,13 +134,17 @@
this->enqueue( OnMediaLocation(keypath,1).setOptional(true) );
this->start( dest_dir, *_media_ptr);
- // only add the key if it exists
+
+ KeyContext context;
+ context.setRepoInfo(repoInfo());
+ // only add the key if it exists
if ( PathInfo(dest_dir / keypath).isExist() )
- {
- KeyContext context;
- context.setRepoInfo(repoInfo());
- sigchecker.addPublicKey(dest_dir + keypath, context);
- }
+ sigchecker.addPublicKey(dest_dir + keypath, context);
+ // set the checker context even if the key is not known (unsigned repo, key
+ // file missing; bnc #495977)
+ else
+ sigchecker.setKeyContext(context);
+
this->reset();
if ( ! progress.tick() )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/RepoManager.cc new/libzypp-6.29.2/zypp/RepoManager.cc
--- old/libzypp-6.27.1/zypp/RepoManager.cc 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/RepoManager.cc 2010-02-03 16:04:23.000000000 +0100
@@ -939,7 +939,7 @@
MediaSetAccess media(url);
shared_ptrrepo::Downloader downloader_ptr;
- MIL << "Creating downloader for [ " << info.name() << " ]" << endl;
+ MIL << "Creating downloader for [ " << info.alias() << " ]" << endl;
if ( repokind.toEnum() == RepoType::RPMMD_e )
downloader_ptr.reset(new yum::Downloader(info));
@@ -1074,7 +1074,7 @@
ProgressData progress(100);
callback::SendReport<ProgressReport> report;
progress.sendTo( ProgressReportAdaptor( progressrcv, report ) );
- progress.name(str::form(_("Building repository '%s' cache"), info.name().c_str()));
+ progress.name(str::form(_("Building repository '%s' cache"), info.label().c_str()));
progress.toMin();
if (needs_cleaning)
@@ -1304,7 +1304,21 @@
try
{
- sat::Pool::instance().addRepoSolv( solvfile, info );
+ Repository repo = sat::Pool::instance().addRepoSolv( solvfile, info );
+ // test toolversion in order to rebuild solv file in case
+ // it was written by an old satsolver-tool parser.
+ //
+ // Known version strings used:
+ // - <no string>
+ // - "1.0"
+ //
+ sat::LookupRepoAttr toolversion( sat::SolvAttr::repositoryToolVersion, repo );
+ if ( toolversion.begin().asString().empty() )
+ {
+ repo.eraseFromPool();
+ ZYPP_THROW(Exception("Solv-file was created by old parser."));
+ }
+ // else: up-to-date (or even newer).
}
catch ( const Exception & exp )
{
@@ -1327,7 +1341,7 @@
ProgressData progress(100);
callback::SendReport<ProgressReport> report;
progress.sendTo( ProgressReportAdaptor( progressrcv, report ) );
- progress.name(str::form(_("Adding repository '%s'"), info.name().c_str()));
+ progress.name(str::form(_("Adding repository '%s'"), info.label().c_str()));
progress.toMin();
MIL << "Try adding repo " << info << endl;
@@ -1474,7 +1488,7 @@
ProgressData progress;
callback::SendReport<ProgressReport> report;
progress.sendTo( ProgressReportAdaptor( progressrcv, report ) );
- progress.name(str::form(_("Removing repository '%s'"), info.name().c_str()));
+ progress.name(str::form(_("Removing repository '%s'"), info.label().c_str()));
MIL << "Going to delete repo " << info.alias() << endl;
@@ -1801,7 +1815,7 @@
// Either when probing the type, or when adjusting the repositories
// enable/disable state.:
bool serviceModified = false;
- MIL << "going to refresh service '" << service.alias() << "', url: "<< service.url() << endl;
+ MIL << "Going to refresh service '" << service.alias() << "', url: "<< service.url() << endl;
//! \todo add callbacks for apps (start, end, repo removed, repo added, repo changed)
@@ -1827,7 +1841,7 @@
std::string servicesTargetDistro = _pimpl->options.servicesTargetDistro;
if ( servicesTargetDistro.empty() && getZYpp()->getTarget() )
servicesTargetDistro = getZYpp()->target()->targetDistribution();
- DBG << "servicesTargetDistro: " << servicesTargetDistro << endl;
+ DBG << "ServicesTargetDistro: " << servicesTargetDistro << endl;
// parse it
RepoCollector collector(servicesTargetDistro);
@@ -1880,6 +1894,16 @@
{
if ( ! foundAliasIn( it->alias(), collector.repos ) )
{
+ if ( it->enabled() )
+ {
+ DBG << "Service removes enabled repo " << it->alias() << endl;
+ service.addRepoToEnable( it->alias() );
+ serviceModified = true;
+ }
+ else
+ {
+ DBG << "Service removes disabled repo " << it->alias() << endl;
+ }
removeRepository( *it );
}
}
@@ -1916,6 +1940,7 @@
// At that point check whether a repo with the same alias
// exists outside this service. Maybe forcefully re-alias
// the existing repo?
+ DBG << "Service adds repo " << it->alias() << " " << (beEnabled?"enabled":"disabled") << endl;
addRepository( *it );
// save repo credentials
@@ -1931,23 +1956,38 @@
{
if ( ! oldRepo->enabled() )
{
+ DBG << "Service repo " << it->alias() << " gets enabled" << endl;
oldRepo->setEnabled( true );
oldRepoModified = true;
}
+ else
+ {
+ DBG << "Service repo " << it->alias() << " stays enabled" << endl;
+ }
}
else if ( beDisabled )
{
if ( oldRepo->enabled() )
{
+ DBG << "Service repo " << it->alias() << " gets disabled" << endl;
oldRepo->setEnabled( false );
oldRepoModified = true;
}
+ else
+ {
+ DBG << "Service repo " << it->alias() << " stays disabled" << endl;
+ }
+ }
+ else
+ {
+ DBG << "Service repo " << it->alias() << " stays " << (oldRepo->enabled()?"enabled":"disabled") << endl;
}
// changed url?
// service repo can contain only one URL now, so no need to iterate.
if ( oldRepo->url() != it->url() )
{
+ DBG << "Service repo " << it->alias() << " gets new URL " << it->url() << endl;
oldRepo->setBaseUrl( it->url() );
oldRepoModified = true;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/RepoManager.h new/libzypp-6.29.2/zypp/RepoManager.h
--- old/libzypp-6.27.1/zypp/RepoManager.h 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/RepoManager.h 2010-02-03 16:04:23.000000000 +0100
@@ -612,6 +612,9 @@
* \throws Exception if have problems with files
*/
void modifyService( const std::string & oldAlias, const ServiceInfo & service );
+ /** \overload Take alias from ServiceInfo. */
+ void modifyService( const ServiceInfo & service )
+ { modifyService( service.alias(), service ); }
private:
/**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/sat/SolvAttr.cc new/libzypp-6.29.2/zypp/sat/SolvAttr.cc
--- old/libzypp-6.27.1/zypp/sat/SolvAttr.cc 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/sat/SolvAttr.cc 2010-02-03 16:04:23.000000000 +0100
@@ -136,6 +136,8 @@
const SolvAttr SolvAttr::repositoryRpmDbCookie ( REPOSITORY_RPMDBCOOKIE );
const SolvAttr SolvAttr::repositoryDeltaInfo ( REPOSITORY_DELTAINFO );
+ const SolvAttr SolvAttr::repositoryToolVersion ( REPOSITORY_TOOLVERSION );
+
/////////////////////////////////////////////////////////////////
SolvAttr SolvAttr::parent() const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/sat/SolvAttr.h new/libzypp-6.29.2/zypp/sat/SolvAttr.h
--- old/libzypp-6.27.1/zypp/sat/SolvAttr.h 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/sat/SolvAttr.h 2010-02-03 16:04:23.000000000 +0100
@@ -165,6 +165,7 @@
static const SolvAttr repositoryAddedFileProvides;
static const SolvAttr repositoryRpmDbCookie;
static const SolvAttr repositoryDeltaInfo;
+ static const SolvAttr repositoryToolVersion;
//@}
//@}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/ServiceInfo.cc new/libzypp-6.29.2/zypp/ServiceInfo.cc
--- old/libzypp-6.27.1/zypp/ServiceInfo.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/ServiceInfo.cc 2010-02-03 16:04:23.000000000 +0100
@@ -125,7 +125,10 @@
{ return( _pimpl->reposToEnable.find( alias_r ) != _pimpl->reposToEnable.end() ); }
void ServiceInfo::addRepoToEnable( const std::string & alias_r )
- { _pimpl->reposToEnable.insert( alias_r ); }
+ {
+ _pimpl->reposToEnable.insert( alias_r );
+ _pimpl->reposToDisable.erase( alias_r );
+ }
void ServiceInfo::delRepoToEnable( const std::string & alias_r )
{ _pimpl->reposToEnable.erase( alias_r ); }
@@ -150,7 +153,10 @@
{ return( _pimpl->reposToDisable.find( alias_r ) != _pimpl->reposToDisable.end() ); }
void ServiceInfo::addRepoToDisable( const std::string & alias_r )
- { _pimpl->reposToDisable.insert( alias_r ); }
+ {
+ _pimpl->reposToDisable.insert( alias_r );
+ _pimpl->reposToEnable.erase( alias_r );
+ }
void ServiceInfo::delRepoToDisable( const std::string & alias_r )
{ _pimpl->reposToDisable.erase( alias_r ); }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/target/TargetImpl.cc new/libzypp-6.29.2/zypp/target/TargetImpl.cc
--- old/libzypp-6.27.1/zypp/target/TargetImpl.cc 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/target/TargetImpl.cc 2010-02-03 16:04:23.000000000 +0100
@@ -514,7 +514,6 @@
repo::PackageProvider pkgProvider( _access, p, deltas, packageProviderPolicy );
ManagedFile ret( pkgProvider.providePackage() );
- INT << ret << " (" << ret.getDispose() << ")" << endl;
return ret;
}
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/ui/SelectableImpl.cc new/libzypp-6.29.2/zypp/ui/SelectableImpl.cc
--- old/libzypp-6.27.1/zypp/ui/SelectableImpl.cc 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/ui/SelectableImpl.cc 2010-02-03 16:04:23.000000000 +0100
@@ -313,7 +313,7 @@
return( installedObj().status().isByUser() ? S_Del : S_AutoDel );
}
- if ( installedObj() && installedObj().status().isLocked() )
+ if ( installedObj() && allInstalledLocked() )
return S_Protected;
if ( !installedObj() && allCandidatesLocked() )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/ui/SelectableImpl.h new/libzypp-6.29.2/zypp/ui/SelectableImpl.h
--- old/libzypp-6.27.1/zypp/ui/SelectableImpl.h 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/ui/SelectableImpl.h 2010-02-03 16:04:23.000000000 +0100
@@ -396,6 +396,18 @@
return( ! _availableItems.empty() );
}
+ bool allInstalledLocked() const
+ {
+ for ( installed_const_iterator it = installedBegin();
+ it != installedEnd(); ++it )
+ {
+ if ( ! (*it).status().isLocked() )
+ return false;
+ }
+ return( ! _installedItems.empty() );
+ }
+
+
private:
const IdString _ident;
const ResObject::Kind _kind;
@@ -446,7 +458,7 @@
if ( obj.availableEmpty() )
{
- str << "(A 0) {}";
+ str << "(A 0) {}" << endl << " ";
}
else
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/ZConfig.cc new/libzypp-6.29.2/zypp/ZConfig.cc
--- old/libzypp-6.27.1/zypp/ZConfig.cc 2009-12-08 19:43:40.000000000 +0100
+++ new/libzypp-6.29.2/zypp/ZConfig.cc 2010-02-03 16:04:23.000000000 +0100
@@ -216,6 +216,7 @@
, updateMessagesNotify ( "single | /usr/lib/zypp/notify-message -p %p" )
, repo_add_probe ( false )
, repo_refresh_delay ( 10 )
+ , repoLabelIsAlias ( false )
, download_use_deltarpm ( true )
, download_use_deltarpm_always ( false )
, download_media_prefer_download( true )
@@ -461,6 +462,7 @@
bool repo_add_probe;
unsigned repo_refresh_delay;
+ bool repoLabelIsAlias;
bool download_use_deltarpm;
bool download_use_deltarpm_always;
@@ -654,6 +656,12 @@
return _pimpl->repo_refresh_delay;
}
+ bool ZConfig::repoLabelIsAlias() const
+ { return _pimpl->repoLabelIsAlias; }
+
+ void ZConfig::repoLabelIsAlias( bool yesno_r )
+ { _pimpl->repoLabelIsAlias = yesno_r; }
+
bool ZConfig::download_use_deltarpm() const
{ return _pimpl->download_use_deltarpm; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/ZConfig.h new/libzypp-6.29.2/zypp/ZConfig.h
--- old/libzypp-6.27.1/zypp/ZConfig.h 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/ZConfig.h 2010-02-03 16:04:23.000000000 +0100
@@ -161,6 +161,22 @@
unsigned repo_refresh_delay() const;
/**
+ * Whether to use repository alias or name in user messages (progress,
+ * exceptions, ...).
+ * True: use alias, false: use name.
+ */
+ bool repoLabelIsAlias() const;
+
+ /**
+ * Whether to use repository alias or name in user messages (progress,
+ * exceptions, ...). Console applications might prefer to use and display
+ * the shorter alias instead of full repository name.
+ *
+ * Default: false; i.e. repo label is 'name'
+ */
+ void repoLabelIsAlias( bool yesno_r );
+
+ /**
* Maximum number of concurrent connections for a single transfer
*/
long download_max_concurrent_connections() const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp/ZYppFactory.cc new/libzypp-6.29.2/zypp/ZYppFactory.cc
--- old/libzypp-6.27.1/zypp/ZYppFactory.cc 2009-12-08 19:43:41.000000000 +0100
+++ new/libzypp-6.29.2/zypp/ZYppFactory.cc 2010-02-03 16:04:23.000000000 +0100
@@ -25,14 +25,19 @@
#include "zypp/zypp_detail/ZYppImpl.h"
#include "zypp/zypp_detail/ZYppReadOnlyHack.h"
-#define ZYPP_LOCK_FILE "/var/run/zypp.pid"
-
using std::endl;
///////////////////////////////////////////////////////////////////
namespace zypp
{ /////////////////////////////////////////////////////////////////
+ namespace env
+ {
+ /** Hack to circumvent the currently poor --root support. */
+ inline Pathname ZYPP_LOCKFILE_ROOT()
+ { return getenv("ZYPP_LOCKFILE_ROOT") ? getenv("ZYPP_LOCKFILE_ROOT") : "/"; }
+ }
+
///////////////////////////////////////////////////////////////////
namespace zypp_readonly_hack
{ /////////////////////////////////////////////////////////////////
@@ -61,9 +66,12 @@
ZYppGlobalLock()
: _clean_lock(false)
+ , _zyppLockFilePath( env::ZYPP_LOCKFILE_ROOT() / "/var/run/zypp.pid" )
, _zypp_lockfile(0)
, _locker_pid(0)
- {}
+ {
+ filesystem::assert_dir(_zyppLockFilePath.dirname());
+ }
~ZYppGlobalLock()
{
@@ -72,14 +80,13 @@
pid_t curr_pid = getpid();
if ( _zypp_lockfile )
{
- Pathname lock_file = Pathname(ZYPP_LOCK_FILE);
unLockFile();
closeLockFile();
if ( _clean_lock )
{
MIL << "Cleaning lock file. (" << curr_pid << ")" << std::endl;
- if ( filesystem::unlink(lock_file) == 0 )
+ if ( filesystem::unlink(_zyppLockFilePath) == 0 )
MIL << "Lockfile cleaned. (" << curr_pid << ")" << std::endl;
else
ERR << "Cant clean lockfile. (" << curr_pid << ")" << std::endl;
@@ -99,16 +106,17 @@
bool _clean_lock;
private:
+ Pathname _zyppLockFilePath;
FILE *_zypp_lockfile;
pid_t _locker_pid;
std::string _locker_name;
void openLockFile(const char *mode)
{
- Pathname lock_file = Pathname(ZYPP_LOCK_FILE);
- _zypp_lockfile = fopen(lock_file.asString().c_str(), mode);
+
+ _zypp_lockfile = fopen(_zyppLockFilePath.asString().c_str(), mode);
if (_zypp_lockfile == 0)
- ZYPP_THROW (Exception( "Cant open " + lock_file.asString() + " in mode " + std::string(mode) ) );
+ ZYPP_THROW (Exception( "Cant open " + _zyppLockFilePath.asString() + " in mode " + std::string(mode) ) );
}
void closeLockFile()
@@ -150,11 +158,10 @@
bool lockFileExists()
{
- Pathname lock_file = Pathname(ZYPP_LOCK_FILE);
// check if the file already existed.
- INT << PathInfo(lock_file) << endl;
- bool exists = PathInfo(lock_file).isExist();
- return exists;
+ PathInfo pi(_zyppLockFilePath);
+ DBG << pi << endl;
+ return pi.isExist();
}
void createLockFile()
@@ -203,7 +210,7 @@
long readpid = 0;
fscanf(_zypp_lockfile, "%ld", &readpid);
- MIL << "read: Lockfile " << ZYPP_LOCK_FILE << " has pid " << readpid << " (our pid: " << curr_pid << ") "<< std::endl;
+ MIL << "read: Lockfile " << _zyppLockFilePath << " has pid " << readpid << " (our pid: " << curr_pid << ") "<< std::endl;
locker_pid = (pid_t) readpid;
return locker_pid;
}
@@ -213,11 +220,10 @@
bool zyppLocked()
{
pid_t curr_pid = getpid();
- Pathname lock_file = Pathname(ZYPP_LOCK_FILE);
if ( lockFileExists() )
{
- MIL << "found lockfile " << lock_file << std::endl;
+ MIL << "found lockfile " << _zyppLockFilePath << std::endl;
openLockFile("r");
shLockFile();
@@ -250,7 +256,7 @@
if ( geteuid() == 0 )
{
MIL << locker_pid << " has a ZYpp lock, but process is not running. Cleaning lock file." << std::endl;
- if ( filesystem::unlink(lock_file) == 0 )
+ if ( filesystem::unlink(_zyppLockFilePath) == 0 )
{
createLockFile();
// now open it for reading
@@ -274,10 +280,10 @@
}
else
{
- MIL << "no lockfile " << lock_file << " found" << std::endl;
+ MIL << "no lockfile " << _zyppLockFilePath << " found" << std::endl;
if ( geteuid() == 0 )
{
- MIL << "running as root. Will attempt to create " << lock_file << std::endl;
+ MIL << "running as root. Will attempt to create " << _zyppLockFilePath << std::endl;
createLockFile();
// now open it for reading
openLockFile("r");
@@ -285,7 +291,7 @@
}
else
{
- MIL << "running as user. Skipping creating " << lock_file << std::endl;
+ MIL << "running as user. Skipping creating " << _zyppLockFilePath << std::endl;
}
return false;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-6.27.1/zypp.conf new/libzypp-6.29.2/zypp.conf
--- old/libzypp-6.27.1/zypp.conf 2009-12-08 19:43:43.000000000 +0100
+++ new/libzypp-6.29.2/zypp.conf 2010-02-03 16:04:23.000000000 +0100
@@ -214,7 +214,7 @@
## traditional behaviour.
##
## <UNSET> If a value is not set, empty or unknown, we pick
-## some save default.
+## some sane default.
##
## commit.downloadMode =
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org