1 // Include files /*{{{*/
4 #include <apt-pkg/acquire-item.h>
5 #include <apt-pkg/cachefile.h>
6 #include <apt-pkg/cmndline.h>
7 #include <apt-pkg/error.h>
8 #include <apt-pkg/fileutl.h>
9 #include <apt-pkg/sourcelist.h>
10 #include <apt-pkg/update.h>
11 #include <apt-pkg/acquire.h>
12 #include <apt-pkg/configuration.h>
14 #include <apt-private/acqprogress.h>
15 #include <apt-private/private-cachefile.h>
16 #include <apt-private/private-download.h>
17 #include <apt-private/private-output.h>
18 #include <apt-private/private-update.h>
26 // DoUpdate - Update the package lists /*{{{*/
27 // ---------------------------------------------------------------------
29 bool DoUpdate(CommandLine
&CmdL
)
31 if (CmdL
.FileSize() != 1)
32 return _error
->Error(_("The update command takes no arguments"));
36 // Get the source list
37 if (Cache
.BuildSourceList() == false)
39 pkgSourceList
*List
= Cache
.GetSourceList();
41 // Just print out the uris an exit if the --print-uris flag was used
42 if (_config
->FindB("APT::Get::Print-URIs") == true)
44 // force a hashsum for compatibility reasons
45 _config
->CndSet("Acquire::ForceHash", "md5sum");
47 // Populate it with the source selection and get all Indexes
49 aptAcquireWithTextStatus Fetcher
;
50 if (List
->GetIndexes(&Fetcher
,true) == false)
53 std::string compExt
= APT::Configuration::getCompressionTypes()[0];
54 pkgAcquire::UriIterator I
= Fetcher
.UriBegin();
55 for (; I
!= Fetcher
.UriEnd(); ++I
)
57 std::string FileName
= flNotDir(I
->Owner
->DestFile
);
58 if(compExt
.empty() == false &&
59 APT::String::Endswith(FileName
, compExt
))
60 FileName
= FileName
.substr(0, FileName
.size() - compExt
.size() - 1);
61 c1out
<< '\'' << I
->URI
<< "' " << FileName
<< ' ' <<
62 std::to_string(I
->Owner
->FileSize
) << ' ' << I
->Owner
->HashSum() << std::endl
;
68 if (_config
->FindB("APT::Get::Download",true) == true)
70 AcqTextStatus
Stat(std::cout
, ScreenWidth
,_config
->FindI("quiet",0));
71 ListUpdate(Stat
, *List
);
75 if (_config
->FindB("pkgCacheFile::Generate", true) == true)
77 pkgCacheFile::RemoveCaches();
78 if (Cache
.BuildCaches() == false)
82 // show basic stats (if the user whishes)
83 if (_config
->FindB("APT::Cmd::Show-Update-Stats", false) == true)
86 if (Cache
.Open() == false)
88 for (pkgCache::PkgIterator I
= Cache
->PkgBegin(); I
.end() != true; ++I
)
90 pkgDepCache::StateCache
&state
= Cache
[I
];
91 if (I
->CurrentVer
!= 0 && state
.Upgradable() && state
.CandidateVer
!= NULL
)
95 "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n",
96 "%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n",
99 c1out
<< _("All packages are up to date.") << std::endl
;
101 ioprintf(c1out
, msg
, upgradable
);