Imported Upstream version 14.43.1 50/94650/1
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 1 Nov 2016 01:39:03 +0000 (10:39 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 1 Nov 2016 01:39:04 +0000 (10:39 +0900)
Change-Id: I296b110fb6b647448b69c23d65937640a6d72d76
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
VERSION.cmake
package/libzypp.changes
po/sle-zypp-po.tar.bz2
tests/media/CredentialFileReader_test.cc
tests/media/CredentialManager_test.cc
tests/media/data/credentials.cat
zypp/PoolItemBest.h
zypp/RepoManager.cc

index c48853b..15e8a8e 100644 (file)
@@ -61,8 +61,8 @@
 SET(LIBZYPP_MAJOR "14")
 SET(LIBZYPP_COMPATMINOR "39")
 SET(LIBZYPP_MINOR "43")
-SET(LIBZYPP_PATCH "0")
+SET(LIBZYPP_PATCH "1")
 #
-# LAST RELEASED: 14.43.0 (39)
+# LAST RELEASED: 14.43.1 (39)
 # (The number in parenthesis is LIBZYPP_COMPATMINOR)
 #=======
index 3e61ead..d3af173 100644 (file)
@@ -1,4 +1,16 @@
 -------------------------------------------------------------------
+Wed Jun 15 12:43:39 CEST 2016 - ma@suse.de
+
+- Fix bug in removeRepository which may keep an empty .repo file
+  rather than deleting it (bsc#984494)
+- version 14.43.1 (39)
+
+-------------------------------------------------------------------
+Sun May  1 01:13:40 CEST 2016 - ma@suse.de
+
+- Update sle-zypp-po.tar.bz2
+
+-------------------------------------------------------------------
 Tue Apr 26 12:38:14 CEST 2016 - ma@suse.de
 
 - Provide 'libzypp(plugin:services) = 1' after fixing bsc#933760
index f9490da..34bab44 100644 (file)
Binary files a/po/sle-zypp-po.tar.bz2 and b/po/sle-zypp-po.tar.bz2 differ
index 0dedd77..ff3c1ca 100644 (file)
@@ -34,5 +34,5 @@ BOOST_AUTO_TEST_CASE(read_cred)
   CredentialFileReader reader(credfile,
       bind( &CredCollector::collect, &collector, _1 ));
 
-  BOOST_CHECK(collector.creds.size() == 2);
+  BOOST_CHECK_EQUAL(collector.creds.size(), 3);
 }
index 3af6e66..eb1f571 100644 (file)
@@ -13,38 +13,47 @@ using std::endl;
 using namespace zypp;
 using namespace zypp::media;
 
+inline void testGetCreds( CredentialManager & cm_r, const std::string & url_r,
+                     const std::string & user_r = "",
+                     const std::string & pass_r = "" )
+{
+  Url url( url_r );
+  AuthData_Ptr cred = cm_r.getCred( url );
+  //cout << "FOR: " << url << endl;
+  //cout << "GOT: " << cred << endl;
+  if ( user_r.empty() && pass_r.empty() )
+  {
+    BOOST_CHECK_EQUAL( cred, AuthData_Ptr() );
+  }
+  else
+  {
+    BOOST_CHECK_EQUAL( cred->username(), user_r );
+    BOOST_CHECK_EQUAL( cred->password(), pass_r );
+  }
+}
 
 BOOST_AUTO_TEST_CASE(read_cred_for_url)
 {
   CredManagerOptions opts;
   opts.globalCredFilePath = TESTS_SRC_DIR "/media/data/credentials.cat";
   opts.userCredFilePath = Pathname();
+  CredentialManager cm( opts );
 
-  CredentialManager cm(opts);
-  BOOST_CHECK(cm.credsGlobalSize() == 2);
-
-  Url url("https://drink.it/repo/roots");
-  AuthData_Ptr credentials = cm.getCred(url);
-  BOOST_CHECK(credentials.get() != NULL);
-  if (!credentials)
-    return;
-  BOOST_CHECK(credentials->username() == "ginger");
-  BOOST_CHECK(credentials->password() == "ale");
-
-  Url url2("ftp://magda@weprovidesoft.fr/download/opensuse/110");
-  credentials = cm.getCred(url2);
-  BOOST_CHECK(credentials.get() != NULL);
-  if (!credentials)
-    return;
-  BOOST_CHECK(credentials->username() == "magda");
-  BOOST_CHECK(credentials->password() == "richard");
+  BOOST_CHECK_EQUAL( cm.credsGlobalSize(), 3 );
+
+  testGetCreds( cm, "https://drink.it/repo/roots",                             "ginger", "ale" );
+  testGetCreds( cm, "ftp://weprovidesoft.fr/download/opensuse/110",            "agda", "ichard" );
+  testGetCreds( cm, "ftp://magda@weprovidesoft.fr/download/opensuse/110",      "magda", "richard" );
+  testGetCreds( cm, "ftp://agda@weprovidesoft.fr/download/opensuse/110",       "agda", "ichard" );
+  testGetCreds( cm, "ftp://unknown@weprovidesoft.fr/download/opensuse/110" );  // NULL
+  testGetCreds( cm, "http://url.ok/but/not/creds" );                           // NULL
 }
 
 struct CredCollector
 {
   bool collect(AuthData_Ptr & cred)
   {
-    cout << "got: " << endl << *cred << endl;
+    //cout << "got: " << endl << *cred << endl;
     creds.insert(cred);
     return true;
   }
@@ -56,13 +65,13 @@ struct CredCollector
 BOOST_AUTO_TEST_CASE(save_creds)
 {
   filesystem::TmpDir tmp;
-
   CredManagerOptions opts;
   opts.globalCredFilePath = tmp / "fooha";
-
   CredentialManager cm1(opts);
+
   AuthData cr1("benson","absolute");
   cr1.setUrl(Url("http://joooha.com"));
+
   AuthData cr2("pat","vymetheny");
   cr2.setUrl(Url("ftp://filesuck.org"));
 
@@ -70,27 +79,19 @@ BOOST_AUTO_TEST_CASE(save_creds)
   cm1.saveInGlobal(cr1);
 
   CredCollector collector;
-  CredentialFileReader reader(opts.globalCredFilePath,
-      bind( &CredCollector::collect, &collector, _1 ));
-  BOOST_CHECK(collector.creds.size() == 1);
+  CredentialFileReader( opts.globalCredFilePath, bind( &CredCollector::collect, &collector, _1 ) );
+  BOOST_CHECK_EQUAL( collector.creds.size(), 1 );
 
-  cout << "----" << endl;
   collector.creds.clear();
-
   cm1.saveInGlobal(cr2);
+  CredentialFileReader( opts.globalCredFilePath, bind( &CredCollector::collect, &collector, _1 ) );
+  BOOST_CHECK_EQUAL(collector.creds.size(), 2 );
   
-  CredentialFileReader reader1(opts.globalCredFilePath,
-      bind( &CredCollector::collect, &collector, _1 ));
-  BOOST_CHECK(collector.creds.size() == 2);
-  
-  cout << "----" << endl;
   collector.creds.clear();
-
   // save the same creds again
   cm1.saveInGlobal(cr2);
-  CredentialFileReader reader2(opts.globalCredFilePath,
-      bind( &CredCollector::collect, &collector, _1 ));
-  BOOST_CHECK(collector.creds.size() == 2);
+  CredentialFileReader( opts.globalCredFilePath, bind( &CredCollector::collect, &collector, _1 ) );
+  BOOST_CHECK_EQUAL(collector.creds.size(), 2 );
 
   // todo check created file permissions
 }
@@ -98,30 +99,15 @@ BOOST_AUTO_TEST_CASE(save_creds)
 BOOST_AUTO_TEST_CASE(service_base_url)
 {
   filesystem::TmpDir tmp;
-
   CredManagerOptions opts;
   opts.globalCredFilePath = tmp / "fooha";
+  CredentialManager cm( opts );
 
-  CredentialManager cm1(opts);
-  AuthData cr1("benson","absolute");
-  cr1.setUrl(Url("http://joooha.com/service/path"));
-  cm1.addGlobalCred(cr1);
-
-  AuthData_Ptr creds;
-  creds = cm1.getCred(Url("http://joooha.com/service/path/repo/repofoo"));
-
-  BOOST_CHECK(creds.get() != NULL);
-  if (!creds)
-    return;
-  BOOST_CHECK(creds->username() == "benson");
-
-  creds = cm1.getCred(Url("http://benson@joooha.com/service/path/repo/repofoo"));
-
-  BOOST_CHECK(creds.get() != NULL);
-  if (!creds)
-    return;
-  BOOST_CHECK(creds->username() == "benson");
+  AuthData cred( "benson","absolute" );
+  cred.setUrl( Url( "http://joooha.com/service/path" ) );
+  cm.addGlobalCred( cred );
 
-  creds = cm1.getCred(Url("http://nobody@joooha.com/service/path/repo/repofoo"));
-  BOOST_CHECK(creds.get() == NULL);
+  testGetCreds( cm, "http://joooha.com/service/path/repo/repofoo",             "benson", "absolute" );
+  testGetCreds( cm, "http://benson@joooha.com/service/path/repo/repofoo",      "benson", "absolute" );
+  testGetCreds( cm, "http://nobody@joooha.com/service/path/repo/repofoo" );    // NULL
 }
index 23ddee1..85f713c 100644 (file)
@@ -1,15 +1,24 @@
+# no 1
 [https://drink.it/repo/roots]
 username=ginger
 password=ale
 
+#no 2
 [ftp://weprovidesoft.fr/download/opensuse/110]
 username=magda
 password=richard
 
+# no 3 - same urla s 2 but different user (lex less than magda)
+[ftp://weprovidesoft.fr/download/opensuse/110]
+username=agda
+password=ichard
+
+# fail
 [http://url.ok/but/not/creds]
 username=
 password=any
 
+# fail
 [badurl]
 username=foo
 password=bar
index 2dbebcb..44236c6 100644 (file)
@@ -72,7 +72,7 @@ namespace zypp
     public:
       /** Default ctor. */
       PoolItemBest()
-      {}
+      { _ctor_init(); }
 
       /** Ctor feeding a \ref sat::Solvable. */
       PoolItemBest( sat::Solvable slv_r )
index 922154a..438df5e 100644 (file)
@@ -1755,10 +1755,12 @@ namespace zypp
       {
         // figure how many repos are there in the file:
         std::list<RepoInfo> filerepos = repositories_in_file(todelete.filepath());
-        if ( (filerepos.size() == 1) && ( filerepos.front().alias() == todelete.alias() ) )
+        if ( filerepos.size() == 0     // bsc#984494: file may have already been deleted
+         ||(filerepos.size() == 1 && filerepos.front().alias() == todelete.alias() ) )
         {
-          // easy, only this one, just delete the file
-          if ( filesystem::unlink(todelete.filepath()) != 0 )
+          // easy: file does not exist, contains no or only the repo to delete: delete the file
+         int ret = filesystem::unlink( todelete.filepath() );
+          if ( ! ( ret == 0 || ret == ENOENT ) )
           {
             // TranslatorExplanation '%s' is a filename
             ZYPP_THROW(RepoException( todelete, str::form( _("Can't delete '%s'"), todelete.filepath().c_str() )));