From 6d73fe5be080e66a4f6ff2b250ed1957ae7ac063 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 22 Jan 2014 16:41:00 +0100 Subject: add test for apt show --- test/integration/test-apt-cli-show | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100755 test/integration/test-apt-cli-show (limited to 'test/integration/test-apt-cli-show') diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show new file mode 100755 index 000000000..0ab3d2e56 --- /dev/null +++ b/test/integration/test-apt-cli-show @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +DESCR='Some description + That has multiple lines' +insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" + +setupaptarchive + +APTARCHIVE=$(readlink -f ./aptarchive) + +# note that we do not display Description-md5 with the "apt" cmd +testequal "Package: foo +Priority: optional +Section: other +Installed-Size: 42 +Maintainer: Joe Sixpack +Architecture: all +Version: 1.0 +Filename: pool/main/foo/foo_1.0_all.deb +Description: Some description + That has multiple lines +" apt show foo -- cgit v1.2.3-70-g09d2 From 9e51c0b6a3a1a36336820eda11bcfd5534d9d80c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 22 Jan 2014 17:18:26 +0100 Subject: "apt show" show user friendly size info The size/installed-size is displayed via SizeToStr() and Size is rewriten to "Download-Size" to make clear what size is refered to here. --- apt-pkg/tagfile.cc | 84 +++++++++++++++++++------------------- apt-private/private-show.cc | 28 +++++++++---- test/integration/test-apt-cli-show | 3 +- 3 files changed, 65 insertions(+), 50 deletions(-) (limited to 'test/integration/test-apt-cli-show') diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index bef3c76ba..b92b2c15a 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -567,52 +567,54 @@ bool TFRewrite(FILE *Output,pkgTagSection const &Tags,const char *Order[], } // Write all all of the tags, in order. - for (unsigned int I = 0; Order[I] != 0; I++) + if (Order != NULL) { - bool Rewritten = false; - - // See if this is a field that needs to be rewritten - for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) + for (unsigned int I = 0; Order[I] != 0; I++) { - if (strcasecmp(Rewrite[J].Tag,Order[I]) == 0) - { - Visited[J] |= 2; - if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0) - { - if (isspace(Rewrite[J].Rewrite[0])) - fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - else - fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - } - - Rewritten = true; - break; - } - } + bool Rewritten = false; + + // See if this is a field that needs to be rewritten + for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) + { + if (strcasecmp(Rewrite[J].Tag,Order[I]) == 0) + { + Visited[J] |= 2; + if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0) + { + if (isspace(Rewrite[J].Rewrite[0])) + fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); + else + fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); + } + Rewritten = true; + break; + } + } - // See if it is in the fragment - unsigned Pos; - if (Tags.Find(Order[I],Pos) == false) - continue; - Visited[Pos] |= 1; - - if (Rewritten == true) - continue; + // See if it is in the fragment + unsigned Pos; + if (Tags.Find(Order[I],Pos) == false) + continue; + Visited[Pos] |= 1; + + if (Rewritten == true) + continue; - /* Write out this element, taking a moment to rewrite the tag - in case of changes of case. */ - const char *Start; - const char *Stop; - Tags.Get(Start,Stop,Pos); + /* Write out this element, taking a moment to rewrite the tag + in case of changes of case. */ + const char *Start; + const char *Stop; + Tags.Get(Start,Stop,Pos); - if (fputs(Order[I],Output) < 0) - return _error->Errno("fputs","IO Error to output"); - Start += strlen(Order[I]); - if (fwrite(Start,Stop - Start,1,Output) != 1) - return _error->Errno("fwrite","IO Error to output"); - if (Stop[-1] != '\n') - fprintf(Output,"\n"); - } + if (fputs(Order[I],Output) < 0) + return _error->Errno("fputs","IO Error to output"); + Start += strlen(Order[I]); + if (fwrite(Start,Stop - Start,1,Output) != 1) + return _error->Errno("fwrite","IO Error to output"); + if (Stop[-1] != '\n') + fprintf(Output,"\n"); + } + } // Now write all the old tags that were missed. for (unsigned int I = 0; I != Tags.Count(); I++) diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index 0aa42ecce..32a49cc5c 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -57,20 +57,32 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, return false; pkgTagSection Tags; pkgTagFile TagF(&PkgF); - + + if (TagF.Jump(Tags, V.FileList()->Offset) == false) + return _error->Error("Internal Error, Unable to parse a package record"); + + // make size nice + std::string installed_size; + if (Tags.FindI("Installed-Size") > 0) + installed_size = SizeToStr(Tags.FindI("Installed-Size")*1024); + else + installed_size = _("unknown"); + std::string package_size; + if (Tags.FindI("Size") > 0) + package_size = SizeToStr(Tags.FindI("Size")); + else + package_size = _("unknown"); + TFRewriteData RW[] = { {"Conffiles",0}, {"Description",0}, {"Description-md5",0}, + {"Installed-Size", installed_size.c_str(), 0}, + {"Size", package_size.c_str(), "Download-Size"}, {} }; - const char *Zero = 0; - if (TagF.Jump(Tags, V.FileList()->Offset) == false || - TFRewrite(stdout,Tags,&Zero,RW) == false) - { - _error->Error("Internal Error, Unable to parse a package record"); - return false; - } + if(TFRewrite(stdout, Tags, NULL, RW) == false) + return _error->Error("Internal Error, Unable to parse a package record"); // write the description pkgRecords Recs(*Cache); diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index 0ab3d2e56..bbb2de7ef 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -19,11 +19,12 @@ APTARCHIVE=$(readlink -f ./aptarchive) testequal "Package: foo Priority: optional Section: other -Installed-Size: 42 +Installed-Size: 43.0 k Maintainer: Joe Sixpack Architecture: all Version: 1.0 Filename: pool/main/foo/foo_1.0_all.deb +Download-Size: unknown Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 0c8b6001694bb0ddf9eb6bc4936151592e1a07fa Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 23 Jan 2014 08:12:02 +0100 Subject: include "Archive-Origin" in the apt show output --- apt-private/private-output.h | 6 +++++- apt-private/private-show.cc | 2 ++ test/integration/test-apt-cli-show | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) (limited to 'test/integration/test-apt-cli-show') diff --git a/apt-private/private-output.h b/apt-private/private-output.h index c3c76bb92..ba04ee221 100644 --- a/apt-private/private-output.h +++ b/apt-private/private-output.h @@ -28,7 +28,7 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, bool include_summary=true); - +// helper to describe global state bool ShowList(std::ostream &out, std::string Title, std::string List, std::string VersionsList); void ShowBroken(std::ostream &out,CacheFile &Cache,bool Now); @@ -43,6 +43,10 @@ bool ShowEssential(std::ostream &out,CacheFile &Cache); void Stats(std::ostream &out, pkgDepCache &Dep); +// helpers to display single package data +std::string +GetArchiveSuite(pkgCacheFile &CacheFile, pkgCache::VerIterator ver); + // prompting bool YnPrompt(bool Default=true); bool AnalPrompt(const char *Text); diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index 9a8386167..244347421 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -73,12 +73,14 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, else package_size = _("unknown"); + std::string suite = GetArchiveSuite(CacheFile, V); TFRewriteData RW[] = { {"Conffiles",0}, {"Description",0}, {"Description-md5",0}, {"Installed-Size", installed_size.c_str(), 0}, {"Size", package_size.c_str(), "Download-Size"}, + {"Archive-Origin", suite.c_str(), 0}, {} }; if(TFRewrite(stdout, Tags, NULL, RW) == false) diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index bbb2de7ef..ba56e3260 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -25,6 +25,7 @@ Architecture: all Version: 1.0 Filename: pool/main/foo/foo_1.0_all.deb Download-Size: unknown +Archive-Origin: unstable Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 85d7c0eb60efd0de13ad331676b6227f52bed6c6 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Jan 2014 21:03:49 +0100 Subject: Show "Manual-Installed: {yes|no}" in apt show --- apt-private/private-show.cc | 12 ++++++++++++ test/integration/test-apt-cli-show | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'test/integration/test-apt-cli-show') diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index 244347421..cee132843 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -37,6 +37,9 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, pkgCache *Cache = CacheFile.GetPkgCache(); if (unlikely(Cache == NULL)) return false; + pkgDepCache *depCache = CacheFile.GetDepCache(); + if (unlikely(depCache == NULL)) + return false; // Find an appropriate file pkgCache::VerFileIterator Vf = V.FileList(); @@ -73,6 +76,13 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, else package_size = _("unknown"); + pkgDepCache::StateCache &state = (*depCache)[V.ParentPkg()]; + bool is_installed = V.ParentPkg().CurrentVer() == V; + const char *manual_installed; + if (is_installed) + manual_installed = !(state.Flags & pkgCache::Flag::Auto) ? "yes" : "no"; + else + manual_installed = 0; std::string suite = GetArchiveSuite(CacheFile, V); TFRewriteData RW[] = { {"Conffiles",0}, @@ -81,8 +91,10 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, {"Installed-Size", installed_size.c_str(), 0}, {"Size", package_size.c_str(), "Download-Size"}, {"Archive-Origin", suite.c_str(), 0}, + {"Manual-Installed", manual_installed, 0}, {} }; + if(TFRewrite(stdout, Tags, NULL, RW) == false) return _error->Error("Internal Error, Unable to parse a package record"); diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index ba56e3260..11a93f268 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -10,12 +10,14 @@ configarchitecture "i386" DESCR='Some description That has multiple lines' insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" +insertinstalledpackage 'foo' 'all' '1.0' setupaptarchive APTARCHIVE=$(readlink -f ./aptarchive) # note that we do not display Description-md5 with the "apt" cmd +# and also show some additional fields that are calculated testequal "Package: foo Priority: optional Section: other @@ -25,7 +27,8 @@ Architecture: all Version: 1.0 Filename: pool/main/foo/foo_1.0_all.deb Download-Size: unknown -Archive-Origin: unstable +Archive-Origin: unstable,now +Manual-Installed: yes Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 17622532ce19a1bcebfebdfc9ec20a7e3df9dbff Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Jan 2014 22:20:28 +0100 Subject: hide more from apt show Hide the Hashes,Filename,Multi-Arch,Architecture by default from "apt show". The information is still available via apt-cache show. Also improve the output of the Size- --- apt-private/private-show.cc | 15 ++++++++++++--- test/integration/test-apt-cli-show | 8 +++----- 2 files changed, 15 insertions(+), 8 deletions(-) (limited to 'test/integration/test-apt-cli-show') diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index ba8b266ee..60d951316 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -76,12 +76,12 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, // make size nice std::string installed_size; if (Tags.FindI("Installed-Size") > 0) - installed_size = SizeToStr(Tags.FindI("Installed-Size")*1024); + strprintf(installed_size, "%sB", SizeToStr(Tags.FindI("Installed-Size")*1024).c_str()); else installed_size = _("unknown"); std::string package_size; if (Tags.FindI("Size") > 0) - package_size = SizeToStr(Tags.FindI("Size")); + strprintf(package_size, "%sB", SizeToStr(Tags.FindI("Size")).c_str()); else package_size = _("unknown"); @@ -92,9 +92,18 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, manual_installed = !(state.Flags & pkgCache::Flag::Auto) ? "yes" : "no"; else manual_installed = 0; + + // FIXME: add verbose that does not do the removal of the tags? TFRewriteData RW[] = { - // delete + // delete, apt-cache show has this info and most users do not care + {"MD5sum", 0}, + {"SHA1", 0}, + {"SHA256", 0}, + {"Filename", 0}, + {"Multi-Arch", 0}, + {"Architecture", 0}, {"Conffiles",0}, + // we use the translated description {"Description",0}, {"Description-md5",0}, // improve diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index 11a93f268..91cc9a3c0 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -21,14 +21,12 @@ APTARCHIVE=$(readlink -f ./aptarchive) testequal "Package: foo Priority: optional Section: other -Installed-Size: 43.0 k +Installed-Size: 43.0 kB Maintainer: Joe Sixpack -Architecture: all Version: 1.0 -Filename: pool/main/foo/foo_1.0_all.deb Download-Size: unknown -Archive-Origin: unstable,now -Manual-Installed: yes +APT-Manual-Installed: yes +APT-Sources: file:$APTARCHIVE/ unstable/main i386 Packages Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 3c74988b38b9ef9326639603a9687ec0d292dfc9 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 22 Feb 2014 22:28:36 +0100 Subject: skip test if "apt" is not build --- test/integration/test-apt-cli-list | 6 ++++++ test/integration/test-apt-cli-search | 6 ++++++ test/integration/test-apt-cli-show | 6 ++++++ test/integration/test-apt-cli-upgrade | 7 +++++++ 4 files changed, 25 insertions(+) (limited to 'test/integration/test-apt-cli-show') diff --git a/test/integration/test-apt-cli-list b/test/integration/test-apt-cli-list index 47507aeb8..47cfb624a 100755 --- a/test/integration/test-apt-cli-list +++ b/test/integration/test-apt-cli-list @@ -7,6 +7,12 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + insertpackage 'unstable' 'foo' 'all' '1.0' insertinstalledpackage 'bar' 'i386' '1.0' diff --git a/test/integration/test-apt-cli-search b/test/integration/test-apt-cli-search index 979aff880..84650b366 100755 --- a/test/integration/test-apt-cli-search +++ b/test/integration/test-apt-cli-search @@ -7,6 +7,12 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + DESCR='Some description that has a unusual word xxyyzz and aabbcc' DESCR2='Some other description with the unusual aabbcc only' insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index 91cc9a3c0..4c8e134d6 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -7,6 +7,12 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + DESCR='Some description That has multiple lines' insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" diff --git a/test/integration/test-apt-cli-upgrade b/test/integration/test-apt-cli-upgrade index 21ce69413..b6ee2270b 100755 --- a/test/integration/test-apt-cli-upgrade +++ b/test/integration/test-apt-cli-upgrade @@ -7,6 +7,13 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + + insertpackage 'unstable' 'foo' 'all' '2.0' 'Depends: foo-new-dependency' insertpackage 'unstable' 'foo-new-dependency' 'all' '2.0' insertinstalledpackage 'foo' 'all' '1.0' -- cgit v1.2.3-70-g09d2