summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2014-01-29 10:37:17 +0100
committerMichael Vogt <mvo@debian.org>2014-01-29 10:39:18 +0100
commit6ae22905f66064f46c0abf05d269e47869c664be (patch)
treed47f7e653101141a8317deb972e0155b4392f141
parent6f43fac607c94f423f1d01708ecf947a8a303d38 (diff)
fix apt-get download truncation (closes: #736962)
-rw-r--r--cmdline/apt-get.cc9
-rwxr-xr-xtest/integration/test-apt-get-download7
2 files changed, 13 insertions, 3 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index da7d28a1e..6bff6e7de 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -678,14 +678,17 @@ bool DoDownload(CommandLine &CmdL)
// copy files in local sources to the current directory
for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I)
- if ((*I)->Local == true && (*I)->Status == pkgAcquire::Item::StatDone)
+ {
+ std::string const filename = cwd + flNotDir((*I)->DestFile);
+ if ((*I)->Local == true &&
+ filename != (*I)->DestFile &&
+ (*I)->Status == pkgAcquire::Item::StatDone)
{
- std::string const filename = cwd + flNotDir((*I)->DestFile);
std::ifstream src((*I)->DestFile.c_str(), std::ios::binary);
std::ofstream dst(filename.c_str(), std::ios::binary);
dst << src.rdbuf();
}
-
+ }
return Failed == false;
}
/*}}}*/
diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download
index fce0be018..c2a5c3d8e 100755
--- a/test/integration/test-apt-get-download
+++ b/test/integration/test-apt-get-download
@@ -24,6 +24,7 @@ testdownload() {
rm $1
}
+# normal case(es)
testdownload apt_1.0_all.deb apt stable
testdownload apt_2.0_all.deb apt
@@ -32,3 +33,9 @@ testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s $DEBFILE) SHA512:$(sh
# deb:677887
testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms
+
+# deb:736962 - apt-get download foo &&
+aptget download apt
+aptget download apt
+testsuccess test -s apt_2.0_all.deb
+rm -f apt_1.0_all.deb