implement --print-uris for download command
authorDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 7 Feb 2011 16:54:49 +0000 (17:54 +0100)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 7 Feb 2011 16:54:49 +0000 (17:54 +0100)
cmdline/apt-get.cc
test/integration/test-apt-get-download [new file with mode: 0755]

index 93f167f..8783132 100644 (file)
@@ -2208,13 +2208,15 @@ bool DoDownload(CommandLine &CmdL)
    APT::CacheSetHelper helper(c0out);
    APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache,
                CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper);
-   pkgAcquire Fetcher;
-   AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0));
-   Fetcher.Setup(&Stat);
 
    if (verset.empty() == true)
       return false;
 
+   pkgAcquire Fetcher;
+   AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0));
+   if (_config->FindB("APT::Get::Print-URIs") == true)
+      Fetcher.Setup(&Stat);
+
    pkgRecords Recs(Cache);
    pkgSourceList *SrcList = Cache.GetSourceList();
    for (APT::VersionSet::const_iterator Ver = verset.begin(); 
@@ -2245,9 +2247,18 @@ bool DoDownload(CommandLine &CmdL)
       // get the file
       new pkgAcqFile(&Fetcher, uri, hash.toStr(), (*Ver)->Size, descr, Pkg.Name(), ".");
    }
-   bool result = (Fetcher.Run() == pkgAcquire::Continue);
 
-   return result;
+   // Just print out the uris and exit if the --print-uris flag was used
+   if (_config->FindB("APT::Get::Print-URIs") == true)
+   {
+      pkgAcquire::UriIterator I = Fetcher.UriBegin();
+      for (; I != Fetcher.UriEnd(); I++)
+        cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' << 
+              I->Owner->FileSize << ' ' << I->Owner->HashSum() << endl;
+      return true;
+   }
+
+   return (Fetcher.Run() == pkgAcquire::Continue);
 }
                                                                        /*}}}*/
 // DoCheck - Perform the check operation                               /*{{{*/
diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download
new file mode 100755 (executable)
index 0000000..7db93c3
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage 'apt' 'all' '1.0' 'stable'
+buildsimplenativepackage 'apt' 'all' '2.0' 'unstable'
+
+setupaptarchive
+
+testdownload() {
+       msgtest 'Test download of package file' $1
+       if [ -z "$3" ]; then
+               aptget download ${2}
+       else
+               aptget download ${2}/${3}
+       fi
+       test -f $1 && msgpass || msgfail
+}
+
+testdownload apt_1.0_all.deb apt stable
+testdownload apt_2.0_all.deb apt
+
+DEBFILE="$(readlink -f aptarchive)/pool/apt_2.0_all.deb"
+testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s $DEBFILE) sha256:$(sha256sum $DEBFILE | cut -d' ' -f 1)" aptget download apt --print-uris