]> git.saurik.com Git - apt.git/commitdiff
send Alt-* info for uncompressed based on any compressions
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 27 Mar 2015 18:59:44 +0000 (19:59 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Sat, 18 Apr 2015 23:13:09 +0000 (01:13 +0200)
file sends information about the uncompressed file if it can find it as
well as for the compressed file. This was done only for gzip so far, but
we support more compression types. That this information isn't used a
lot is a different story.

Git-Dch: Ignore

methods/file.cc
test/integration/framework
test/integration/test-compressed-indexes

index 12db62203ef822e9ae09b2efe7c226b65cd99a50..5d9d7b951884c5e105297fc84ccf3c1e298ea21d 100644 (file)
@@ -16,6 +16,7 @@
 #include <config.h>
 
 #include <apt-pkg/acquire-method.h>
+#include <apt-pkg/aptconfiguration.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/hashes.h>
 #include <apt-pkg/fileutl.h>
@@ -33,7 +34,7 @@ class FileMethod : public pkgAcqMethod
    
    public:
    
-   FileMethod() : pkgAcqMethod("1.0",SingleInstance | LocalOnly) {};
+   FileMethod() : pkgAcqMethod("1.0",SingleInstance | SendConfig | LocalOnly) {};
 };
 
 // FileMethod::Fetch - Fetch a file                                    /*{{{*/
@@ -58,27 +59,31 @@ bool FileMethod::Fetch(FetchItem *Itm)
       if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0)
         Res.IMSHit = true;
    }
-   
-   // See if we can compute a file without a .gz exentsion
-   std::string::size_type Pos = File.rfind(".gz");
-   if (Pos + 3 == File.length())
+
+   // See if the uncompressed file exists and reuse it
+   std::vector<std::string> extensions = APT::Configuration::getCompressorExtensions();
+   for (std::vector<std::string>::const_iterator ext = extensions.begin(); ext != extensions.end(); ++ext)
    {
-      File = std::string(File,0,Pos);
-      if (stat(File.c_str(),&Buf) == 0)
+      if (APT::String::Endswith(File, *ext) == true)
       {
-        FetchResult AltRes;
-        AltRes.Size = Buf.st_size;
-        AltRes.Filename = File;
-        AltRes.LastModified = Buf.st_mtime;
-        AltRes.IMSHit = false;
-        if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0)
-           AltRes.IMSHit = true;
-        
-        URIDone(Res,&AltRes);
-        return true;
-      }      
+        std::string const unfile = File.substr(0, File.length() - ext->length() - 1);
+        if (stat(unfile.c_str(),&Buf) == 0)
+        {
+           FetchResult AltRes;
+           AltRes.Size = Buf.st_size;
+           AltRes.Filename = unfile;
+           AltRes.LastModified = Buf.st_mtime;
+           AltRes.IMSHit = false;
+           if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0)
+              AltRes.IMSHit = true;
+
+           URIDone(Res,&AltRes);
+           return true;
+        }
+        // no break here as we could have situations similar to '.gz' vs '.tar.gz' here
+      }
    }
-   
+
    if (Res.Filename.empty() == true)
       return _error->Error(_("File not found"));
 
index 50c027a2c8d48e87dadb0a05632f11d4557ff9b5..994956b74c27de307efff72e63f502b26e834349 100644 (file)
@@ -3,7 +3,7 @@
 EXIT_CODE=0
 
 # we all like colorful messages
-if [ "$MSGCOLOR" != 'NO' ]; then
+if [ "$MSGCOLOR" != 'NO' ] && [ "$MSGCOLOR" != 'ALWAYS' ]; then
        if [ ! -t 1 ]; then # but check that we output to a terminal
                export MSGCOLOR='NO'
        fi
index 5b966754c2f2650d100e60530c908e4a54f3ee6b..c6b292baa52a85d8ddf38d3683578149f790d0dc 100755 (executable)
@@ -61,7 +61,7 @@ testrun() {
        cd downloaded
        testsuccess --nomsg aptget download testpkg
        msgtest '\tdeb file is present'; testsuccess --nomsg test -f testpkg_1.0_i386.deb
-       rm testpkg_1.0_i386.deb
+       rm -f testpkg_1.0_i386.deb
        cd - >/dev/null
        testsuccessequal 'Reading package lists...
 Building dependency tree...