added SourceManager::releaseAllSources (#152709)
authorJiri Srain <jsrain@suse.cz>
Thu, 23 Feb 2006 23:18:46 +0000 (23:18 +0000)
committerJiri Srain <jsrain@suse.cz>
Thu, 23 Feb 2006 23:18:46 +0000 (23:18 +0000)
zypp/Source.cc
zypp/Source.h
zypp/SourceManager.cc
zypp/SourceManager.h
zypp/source/MediaSet.cc
zypp/source/MediaSet.h
zypp/source/SourceImpl.cc
zypp/source/SourceImpl.h

index 26c91920ad2edd4d5bfb2905a379daaec136f018..8502bd3229124e3b323ccfd93ea922ddda99f906 100644 (file)
@@ -131,6 +131,9 @@ namespace zypp
 
   void Source_Ref::redirect(unsigned media_nr, const Url & new_url)
   { _pimpl->redirect(media_nr, new_url); }
+
+  void Source_Ref::release()
+  { _pimpl->release(); }
   
   media::MediaVerifierRef Source_Ref::verifier(unsigned media_nr)
   { return _pimpl->verifier(media_nr); }
index 8a9f3de659fec435ddc47d752ae34b3070546ccc..9f64df7c87b1fe5903993e2b6a4bfa6d40d5adce 100644 (file)
@@ -128,6 +128,11 @@ namespace zypp
      */
     void redirect(unsigned media_nr, const Url & new_url);
 
+    /**
+     * Release all medias attached by the source
+     */
+    void release();
+
     /**
      * Provide a media verifier suitable for the given media number
      */
index ce6c2eff527c884416a5de80701b41de1d60b1c3..9895f350bb7bd5efaf271f82b618379705102a1a 100644 (file)
@@ -89,6 +89,15 @@ namespace zypp
     }
   }
 
+  void SourceManager::releaseAllSources()
+  {
+    for (SourceMap::iterator it = _sources.begin();
+        it != _sources.end(); it++)
+    {
+      it->second->release();
+    }
+  }
+
   void SourceManager::removeSource(const std::string & alias_r)
   {
     for (SourceMap::iterator it = _sources.begin(); it != _sources.end(); ++it)
index 4d9e20a4e11568995c377df5bc6666204fa442ce..8b05c9d26e9a4f843f669343ddefca382c1712c9 100644 (file)
@@ -130,6 +130,13 @@ namespace zypp
      */
     void removeSource(const std::string & alias_r);
 
+    /**
+     * Release all medias held by all sources
+     *
+     * \throws Exception
+     */
+    void releaseAllSources();
+
     /**
      * Disable all registered sources
      */
index 382e2a1b4cc4f8e9feacbe0e0aa5dd38a9f409b6..90d522d06a0989388b41c5dd411fa931206f8920 100644 (file)
@@ -44,6 +44,18 @@ namespace zypp
       medias = MediaMap();
     }
 
+    void MediaSet::release()
+    {
+      media::MediaManager media_mgr;
+      for (MediaMap::iterator it = medias.begin(); it != medias.end(); it++)
+      {
+       if (media_mgr.isAttached(it->second))
+       {
+         media_mgr.release(it->second, false);
+       }
+      }
+    }
+
     media::MediaAccessId MediaSet::getMediaAccessId (media::MediaNr medianr)
     {
      media::MediaManager media_mgr;
index e6e7dce1f984f2dbb7ebe69cfa16d8b5250fa814..249625f69b90e354a1474515b14170d4cb7ac0d1 100644 (file)
@@ -48,6 +48,10 @@ namespace zypp
       void redirect (media::MediaNr medianr, media::MediaAccessId media_id);
       /** Reset the handles to the medias */
       void reset();
+      /**
+       * Release all medias in the set
+       */
+      void release();
 
     protected:
 
index 748fa4f0c2f82e51376fb624ad68ca3940bedeb9..ab2ccd41cdbc4ebb16ab798a09818383730e4dc4 100644 (file)
@@ -200,6 +200,11 @@ namespace zypp
       _media_set->redirect(media_nr, id);
     }
 
+    void SourceImpl::release()
+    {
+      _media_set->release();
+    }
+
     media::MediaVerifierRef SourceImpl::verifier(unsigned media_nr)
     { return media::MediaVerifierRef(new media::NoVerifier()); }
     
index 9f9febbab571335f7e3ed607bf0f4b841fb3327c..15194bb1f2427e6631c318c2334ebb73cbac0397 100644 (file)
@@ -156,6 +156,10 @@ namespace zypp
       virtual void setZmdDescription (const std::string desc_r);
 
       virtual void redirect(unsigned media_nr, const Url & new_url);
+      /**
+       * Release all medias attached by the source
+       */
+      void release();
       /**
        * Get media verifier for the specified media
        */