]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire-item.h
Release 1.4~beta1
[apt.git] / apt-pkg / acquire-item.h
index d6bcdafcba7a539fd58ae2e2da3c5f1096d0e7d1..8be8801bf1687e44ff14816f9800e33267c78290 100644 (file)
@@ -105,7 +105,7 @@ class pkgAcquire::Item : public WeakPointable                               /*{{{*/
    /** \brief If not \b NULL, contains the name of a subprocess that
     *  is operating on this object (for instance, "gzip" or "gpgv").
     */
-   APT_DEPRECATED const char *Mode;
+   APT_DEPRECATED_MSG("Use the std::string member ActiveSubprocess instead") const char *Mode;
 
    /** \brief contains the name of the subprocess that is operating on this object
     * (for instance, "gzip", "rred" or "gpgv"). This is obsoleting #Mode from above
@@ -281,7 +281,7 @@ class pkgAcquire::Item : public WeakPointable                               /*{{{*/
     *
     *  \param FailCode A short failure string that is send
     */
-   void ReportMirrorFailure(std::string const &FailCode);
+   APT_DEPRECATED_MSG("Item::Failed does this for you") void ReportMirrorFailure(std::string const &FailCode);
 
    /** \brief Set the name of the current active subprocess
     *
@@ -304,6 +304,10 @@ class pkgAcquire::Item : public WeakPointable                              /*{{{*/
     */
    virtual ~Item();
 
+   bool APT_HIDDEN IsRedirectionLoop(std::string const &NewURI);
+   /** \brief The priority of the item, used for queuing */
+   int APT_HIDDEN Priority();
+
    protected:
    /** \brief The acquire object with which this item is associated. */
    pkgAcquire * const Owner;
@@ -357,7 +361,8 @@ class pkgAcquire::Item : public WeakPointable                               /*{{{*/
    virtual std::string GetFinalFilename() const;
 
    private:
-   void * const d;
+   class Private;
+   Private * const d;
 
    friend class pkgAcqMetaBase;
    friend class pkgAcqMetaClearSig;
@@ -368,12 +373,13 @@ class APT_HIDDEN pkgAcqTransactionItem: public pkgAcquire::Item           /*{{{*/
 {
    void * const d;
    protected:
-   IndexTarget const Target;
    HashStringList GetExpectedHashesFor(std::string const &MetaKey) const;
 
    bool QueueURI(pkgAcquire::ItemDesc &Item) APT_OVERRIDE;
 
    public:
+   IndexTarget const Target;
+
    /** \brief storge name until a transaction is finished */
    std::string PartialFile;
 
@@ -381,6 +387,7 @@ class APT_HIDDEN pkgAcqTransactionItem: public pkgAcquire::Item             /*{{{*/
    pkgAcqMetaClearSig * const TransactionManager;
 
    enum TransactionStates {
+      TransactionStarted,
       TransactionCommit,
       TransactionAbort,
    };
@@ -392,7 +399,7 @@ class APT_HIDDEN pkgAcqTransactionItem: public pkgAcquire::Item             /*{{{*/
    virtual bool HashesRequired() const APT_OVERRIDE;
 
 
-   pkgAcqTransactionItem(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager, IndexTarget const &Target);
+   pkgAcqTransactionItem(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager, IndexTarget const &Target) APT_NONNULL(2, 3);
    virtual ~pkgAcqTransactionItem();
 
    friend class pkgAcqMetaBase;
@@ -406,25 +413,10 @@ class APT_HIDDEN pkgAcqMetaBase : public pkgAcqTransactionItem            /*{{{*/
  protected:
    std::vector<pkgAcqTransactionItem*> Transaction;
 
-   /** \brief The index files which should be looked up in the meta-index
-    *  and then downloaded.
-    */
-   std::vector<IndexTarget> const IndexTargets;
-
    /** \brief If \b true, the index's signature is currently being verified.
     */
    bool AuthPass;
 
-   /** \brief Starts downloading the individual index files.
-    *
-    *  \param verify If \b true, only indices whose expected hashsum
-    *  can be determined from the meta-index will be downloaded, and
-    *  the hashsums of indices will be checked (reporting
-    *  #StatAuthError if there is a mismatch).  If verify is \b false,
-    *  no hashsum checking will be performed.
-    */
-   void QueueIndexes(bool const verify);
-
    /** \brief Called when a file is finished being retrieved.
     *
     *  If the file was not downloaded to DestFile, a copy process is
@@ -467,6 +459,8 @@ class APT_HIDDEN pkgAcqMetaBase : public pkgAcqTransactionItem              /*{{{*/
  public:
    // This refers more to the Transaction-Manager than the actual file
    bool IMSHit;
+   TransactionStates State;
+   std::string BaseURI;
 
    virtual bool QueueURI(pkgAcquire::ItemDesc &Item) APT_OVERRIDE;
    virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
@@ -491,8 +485,7 @@ class APT_HIDDEN pkgAcqMetaBase : public pkgAcqTransactionItem              /*{{{*/
    virtual std::string GetFinalFilename() const APT_OVERRIDE;
 
    pkgAcqMetaBase(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
-                 std::vector<IndexTarget> const &IndexTargets,
-                 IndexTarget const &DataTarget);
+                 IndexTarget const &DataTarget) APT_NONNULL(2, 3);
    virtual ~pkgAcqMetaBase();
 };
                                                                        /*}}}*/
@@ -522,12 +515,10 @@ class APT_HIDDEN pkgAcqMetaIndex : public pkgAcqMetaBase
    virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
    virtual void Done(std::string const &Message, HashStringList const &Hashes,
                     pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
-   virtual void Finished() APT_OVERRIDE;
 
    /** \brief Create a new pkgAcqMetaIndex. */
    pkgAcqMetaIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
-                  IndexTarget const &DataTarget, IndexTarget const &DetachedSigTarget,
-                  std::vector<IndexTarget> const &IndexTargets);
+                  IndexTarget const &DataTarget, IndexTarget const &DetachedSigTarget) APT_NONNULL(2, 3);
    virtual ~pkgAcqMetaIndex();
 
    friend class pkgAcqMetaSig;
@@ -566,7 +557,7 @@ class APT_HIDDEN pkgAcqMetaSig : public pkgAcqTransactionItem
 
    /** \brief Create a new pkgAcqMetaSig. */
    pkgAcqMetaSig(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
-        IndexTarget const &Target, pkgAcqMetaIndex * const MetaIndex);
+        IndexTarget const &Target, pkgAcqMetaIndex * const MetaIndex) APT_NONNULL(2, 3, 5);
    virtual ~pkgAcqMetaSig();
 };
                                                                        /*}}}*/
@@ -574,8 +565,6 @@ class APT_HIDDEN pkgAcqMetaSig : public pkgAcqTransactionItem
 class APT_HIDDEN pkgAcqMetaClearSig : public pkgAcqMetaIndex
 {
    void * const d;
-
-   IndexTarget const ClearsignedTarget;
    IndexTarget const DetachedDataTarget;
 
  public:
@@ -588,13 +577,23 @@ class APT_HIDDEN pkgAcqMetaClearSig : public pkgAcqMetaIndex
    virtual bool VerifyDone(std::string const &Message, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
    virtual void Done(std::string const &Message, HashStringList const &Hashes,
                     pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+   virtual void Finished() APT_OVERRIDE;
+
+   /** \brief Starts downloading the individual index files.
+    *
+    *  \param verify If \b true, only indices whose expected hashsum
+    *  can be determined from the meta-index will be downloaded, and
+    *  the hashsums of indices will be checked (reporting
+    *  #StatAuthError if there is a mismatch).  If verify is \b false,
+    *  no hashsum checking will be performed.
+    */
+   void QueueIndexes(bool const verify);
 
    /** \brief Create a new pkgAcqMetaClearSig. */
    pkgAcqMetaClearSig(pkgAcquire * const Owner,
                IndexTarget const &ClearsignedTarget,
                IndexTarget const &DetachedDataTarget,
                IndexTarget const &DetachedSigTarget,
-               std::vector<IndexTarget> const &IndexTargets,
                metaIndex * const MetaIndexParser);
    virtual ~pkgAcqMetaClearSig();
 };
@@ -607,12 +606,86 @@ class APT_HIDDEN pkgAcqBaseIndex : public pkgAcqTransactionItem
  public:
    /** \brief Get the full pathname of the final file for the current URI */
    virtual std::string GetFinalFilename() const APT_OVERRIDE;
+   virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
 
    pkgAcqBaseIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
-                   IndexTarget const &Target);
+                   IndexTarget const &Target) APT_NONNULL(2, 3);
    virtual ~pkgAcqBaseIndex();
 };
                                                                        /*}}}*/
+/** \brief An acquire item that is responsible for fetching an index   {{{
+ *  file (e.g., Packages or Sources).
+ *
+ *  \sa pkgAcqDiffIndex, pkgAcqIndexDiffs, pkgAcqIndexTrans
+ *
+ *  \todo Why does pkgAcqIndex have protected members?
+ */
+class APT_HIDDEN pkgAcqIndex : public pkgAcqBaseIndex
+{
+   void * const d;
+
+   protected:
+
+   /** \brief The stages the method goes through
+    *
+    *  The method first downloads the indexfile, then its decompressed (or
+    *  copied) and verified
+    */
+   enum AllStages {
+      STAGE_DOWNLOAD,
+      STAGE_DECOMPRESS_AND_VERIFY,
+   };
+   AllStages Stage;
+
+   /** \brief Handle what needs to be done when the download is done */
+   void StageDownloadDone(std::string const &Message);
+
+   /** \brief Handle what needs to be done when the decompression/copy is
+    *         done
+    */
+   void StageDecompressDone();
+
+   /** \brief If \b set, this partially downloaded file will be
+    *  removed when the download completes.
+    */
+   std::string EraseFileName;
+
+   /** \brief The compression-related file extensions that are being
+    *  added to the downloaded file one by one if first fails (e.g., "gz bz2").
+    */
+   std::string CompressionExtensions;
+
+   /** \brief The actual compression extension currently used */
+   std::string CurrentCompressionExtension;
+
+   /** \brief Do the changes needed to fetch via AptByHash (if needed) */
+   void InitByHashIfNeeded();
+
+   /** \brief Get the full pathname of the final file for the current URI */
+   virtual std::string GetFinalFilename() const APT_OVERRIDE;
+
+   virtual bool TransactionState(TransactionStates const state) APT_OVERRIDE;
+
+   public:
+   // Specialized action members
+   virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+   virtual void Done(std::string const &Message, HashStringList const &Hashes,
+                    pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+   virtual std::string Custom600Headers() const APT_OVERRIDE;
+   virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;};
+   virtual std::string GetMetaKey() const APT_OVERRIDE;
+
+   pkgAcqIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+               IndexTarget const &Target, bool const Derived = false) APT_NONNULL(2, 3);
+   virtual ~pkgAcqIndex();
+
+   protected:
+   APT_HIDDEN void Init(std::string const &URI, std::string const &URIDesc,
+             std::string const &ShortDesc);
+   APT_HIDDEN bool CommonFailed(std::string const &TargetURI, std::string const TargetDesc,
+             std::string const &Message, pkgAcquire::MethodConfig const * const Cnf);
+};
+                                                                       /*}}}*/
 /** \brief An item that is responsible for fetching an index file of   {{{
  *  package list diffs and starting the package list's download.
  *
@@ -622,7 +695,7 @@ class APT_HIDDEN pkgAcqBaseIndex : public pkgAcqTransactionItem
  *
  *  \sa pkgAcqIndexDiffs, pkgAcqIndex
  */
-class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqBaseIndex
+class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex
 {
    void * const d;
    std::vector<pkgAcqIndexMergeDiffs*> * diffs;
@@ -648,7 +721,6 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqBaseIndex
    virtual void Done(std::string const &Message, HashStringList const &Hashes,
                     pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
    virtual std::string DescURI() const APT_OVERRIDE {return Target.URI + "Index";};
-   virtual std::string Custom600Headers() const APT_OVERRIDE;
    virtual std::string GetMetaKey() const APT_OVERRIDE;
 
    /** \brief Parse the Index file for a set of Packages diffs.
@@ -674,7 +746,7 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqBaseIndex
     *  \param ShortDesc A short description of the list file to download.
     */
    pkgAcqDiffIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
-                   IndexTarget const &Target);
+                   IndexTarget const &Target) APT_NONNULL(2, 3);
    virtual ~pkgAcqDiffIndex();
  private:
    APT_HIDDEN void QueueOnIMSHit() const;
@@ -707,7 +779,7 @@ struct APT_HIDDEN DiffInfo {                                                /*{{{*/
  */
 class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
 {
-   void * const d;
+   std::string const indexURI;
 
    protected:
 
@@ -758,23 +830,19 @@ class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
    /** \brief Create an index merge-diff item.
     *
     *  \param Owner The pkgAcquire object that owns this item.
-    *
-    *  \param URI The URI of the package index file being
-    *  reconstructed.
-    *
-    *  \param URIDesc A long description of this item.
-    *
-    *  \param ShortDesc A brief description of this item.
-    *
+    *  \param TransactionManager responsible for this item
+    *  \param Target we intend to built via pdiff patching
+    *  \param baseURI is the URI used for the Index, but stripped down to Target
+    *  \param DiffInfo of the patch in question
     *  \param patch contains infos about the patch this item is supposed
     *  to download which were read from the index
-    *
     *  \param allPatches contains all related items so that each item can
     *  check if it was the last one to complete the download step
     */
    pkgAcqIndexMergeDiffs(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
-                         IndexTarget const &Target, DiffInfo const &patch,
-                         std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches);
+                        IndexTarget const &Target, std::string const &indexUsedMirror,
+                        std::string const &indexURI, DiffInfo const &patch,
+                         std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches) APT_NONNULL(2, 3, 8);
    virtual ~pkgAcqIndexMergeDiffs();
 };
                                                                        /*}}}*/
@@ -791,7 +859,7 @@ class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
  */
 class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
 {
-   void * const d;
+   std::string const indexURI;
 
    private:
 
@@ -841,10 +909,7 @@ class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
 
    /** The current status of this patch. */
    enum DiffState
-     {
-       /** \brief The diff is in an unknown state. */
-        StateFetchUnkown,
-
+   {
         /** \brief The diff is currently being fetched. */
         StateFetchDiff,
 
@@ -874,105 +939,20 @@ class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
     *  \a diffs is empty, or QueueNextDiff() otherwise.
     *
     *  \param Owner The pkgAcquire object that owns this item.
-    *
-    *  \param URI The URI of the package index file being
-    *  reconstructed.
-    *
-    *  \param URIDesc A long description of this item.
-    *
-    *  \param ShortDesc A brief description of this item.
-    *
+    *  \param TransactionManager responsible for this item
+    *  \param Target we want to built via pdiff patching
+    *  \param baseURI is the URI used for the Index, but stripped down to Target
     *  \param diffs The remaining diffs from the index of diffs.  They
     *  should be ordered so that each diff appears before any diff
     *  that depends on it.
     */
    pkgAcqIndexDiffs(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
                     IndexTarget const &Target,
-                   std::vector<DiffInfo> const &diffs=std::vector<DiffInfo>());
+                   std::string const &indexUsedMirror, std::string const &indexURI,
+                   std::vector<DiffInfo> const &diffs=std::vector<DiffInfo>()) APT_NONNULL(2, 3);
    virtual ~pkgAcqIndexDiffs();
 };
                                                                        /*}}}*/
-/** \brief An acquire item that is responsible for fetching an index   {{{
- *  file (e.g., Packages or Sources).
- *
- *  \sa pkgAcqDiffIndex, pkgAcqIndexDiffs, pkgAcqIndexTrans
- *
- *  \todo Why does pkgAcqIndex have protected members?
- */
-class APT_HIDDEN pkgAcqIndex : public pkgAcqBaseIndex
-{
-   void * const d;
-
-   protected:
-
-   /** \brief The stages the method goes through
-    *
-    *  The method first downloads the indexfile, then its decompressed (or
-    *  copied) and verified
-    */
-   enum AllStages {
-      STAGE_DOWNLOAD,
-      STAGE_DECOMPRESS_AND_VERIFY,
-   };
-   AllStages Stage;
-
-   /** \brief Handle what needs to be done when the download is done */
-   void StageDownloadDone(std::string const &Message,
-                          HashStringList const &Hashes,
-                          pkgAcquire::MethodConfig const * const Cfg);
-
-   /** \brief Handle what needs to be done when the decompression/copy is
-    *         done 
-    */
-   void StageDecompressDone(std::string const &Message,
-                            HashStringList const &Hashes,
-                            pkgAcquire::MethodConfig const * const Cfg);
-
-   /** \brief If \b set, this partially downloaded file will be
-    *  removed when the download completes.
-    */
-   std::string EraseFileName;
-
-   /** \brief The compression-related file extensions that are being
-    *  added to the downloaded file one by one if first fails (e.g., "gz bz2").
-    */
-   std::string CompressionExtensions;
-
-   /** \brief The actual compression extension currently used */
-   std::string CurrentCompressionExtension;
-
-   /** \brief Do the changes needed to fetch via AptByHash (if needed) */
-   void InitByHashIfNeeded();
-
-   /** \brief Auto select the right compression to use */
-   void AutoSelectCompression();
-
-   /** \brief Schedule file for verification after a IMS hit */
-   void ReverifyAfterIMS();
-
-   /** \brief Get the full pathname of the final file for the current URI */
-   virtual std::string GetFinalFilename() const APT_OVERRIDE;
-
-   virtual bool TransactionState(TransactionStates const state) APT_OVERRIDE;
-
-   public:
-   // Specialized action members
-   virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
-   virtual void Done(std::string const &Message, HashStringList const &Hashes,
-                    pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
-   virtual std::string Custom600Headers() const APT_OVERRIDE;
-   virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;};
-   virtual std::string GetMetaKey() const APT_OVERRIDE;
-
-   pkgAcqIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
-               IndexTarget const &Target);
-   virtual ~pkgAcqIndex();
-
-   private:
-   APT_HIDDEN void Init(std::string const &URI, std::string const &URIDesc,
-             std::string const &ShortDesc);
-};
-                                                                       /*}}}*/
 /** \brief An item that is responsible for fetching a package file.    {{{
  *
  *  If the package file already exists in the cache, nothing will be
@@ -1068,7 +1048,8 @@ class pkgAcqArchive : public pkgAcquire::Item
  */
 class pkgAcqChangelog : public pkgAcquire::Item
 {
-   void * const d;
+   class Private;
+   Private * const d;
    std::string TemporaryDirectory;
    std::string const SrcName;
    std::string const SrcVersion;
@@ -1106,7 +1087,7 @@ class pkgAcqChangelog : public pkgAcquire::Item
 
    /** returns the URI to the changelog of this version
     *
-    *  \param Template URI where CHANGEPATH has to be filled in
+    *  \param Template URI where @CHANGEPATH@ has to be filled in
     *  \param Component in which the package resides, can be empty
     *  \param SrcName is the source package name
     *  \param SrcVersion is the source package version