From 4faff53f166c1755a05d2509b44f22b1a326efb7 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 25 Jul 2008 20:03:51 +0200 Subject: * apt-pkg/depcache.cc: - when checking for new important deps, skip critical ones (closes: #485943) --- apt-pkg/depcache.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index d1bea4cf6..d8b4dc6d2 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -914,8 +914,9 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, { //FIXME: deal better with or-groups(?) DepIterator LocalStart = D; - - if(IsImportantDep(D) && Start.TargetPkg() == D.TargetPkg()) + + if(IsImportantDep(D) && !D.IsCritical() && + Start.TargetPkg() == D.TargetPkg()) { if(!isPreviouslySatisfiedImportantDep) { -- cgit v1.2.3 From e01c08b0206b54c2d977a360beab2d72cf079f0c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 25 Jul 2008 20:21:53 +0200 Subject: * improve apt progress reporting, display trigger actions --- apt-pkg/deb/dpkgpm.cc | 42 +++++++++++++++++++++++++++++++++++++++++- apt-pkg/deb/dpkgpm.h | 2 ++ 2 files changed, 43 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index bc15b8819..77143e671 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -333,6 +333,12 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line) 'status: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : error : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data and conffile-prompt like this 'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited + + Newer versions of dpkg sent also: + 'processing: install: pkg' + 'processing: configure: pkg' + 'processing: remove: pkg' + 'processing: trigproc: trigger' */ char* list[5]; @@ -351,6 +357,34 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line) char *pkg = list[1]; char *action = _strstrip(list[2]); + // 'processing' from dpkg looks like + // 'processing: action: pkg' + if(strncmp(list[0], "processing", strlen("processing")) == 0) + { + char s[200]; + map::iterator iter; + char *pkg_or_trigger = _strstrip(list[2]); + action =_strstrip( list[1]); + iter = PackageProcessingOps.find(action); + if(iter == PackageProcessingOps.end()) + { + if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + std::clog << "ignoring unknwon action: " << action << std::endl; + return; + } + snprintf(s, sizeof(s), _(iter->second.c_str()), pkg_or_trigger); + + status << "pmstatus:" << pkg_or_trigger + << ":" << (PackagesDone/float(PackagesTotal)*100.0) + << ":" << s + << endl; + if(OutStatusFd > 0) + write(OutStatusFd, status.str().c_str(), status.str().size()); + if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + std::clog << "send: '" << status.str() << "'" << endl; + return; + } + if(strncmp(action,"error",strlen("error")) == 0) { status << "pmerror:" << list[1] @@ -526,7 +560,7 @@ bool pkgDPkgPM::Go(int OutStatusFd) if (RunScriptsWithPkgs("DPkg::Pre-Install-Pkgs") == false) return false; - + // map the dpkg states to the operations that are performed // (this is sorted in the same way as Item::Ops) static const struct DpkgState DpkgStatesOpMap[][7] = { @@ -566,6 +600,12 @@ bool pkgDPkgPM::Go(int OutStatusFd) }, }; + // populate the "processing" map + PackageProcessingOps.insert( make_pair("install",N_("Installing %s")) ); + PackageProcessingOps.insert( make_pair("configure",N_("Configuring %s")) ); + PackageProcessingOps.insert( make_pair("remove",N_("Removing %s")) ); + PackageProcessingOps.insert( make_pair("trigproc",N_("Running post-installation trigger %s")) ); + // init the PackageOps map, go over the list of packages that // that will be [installed|configured|removed|purged] and add // them to the PackageOps map (the dpkg states it goes through) diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index ebc7e32bf..449469126 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -47,6 +47,8 @@ class pkgDPkgPM : public pkgPackageManager // the int is the state that is already done (e.g. a package that is // going to be install is already in state "half-installed") map PackageOpsDone; + // map the dpkg "processing" info to human readable names + map PackageProcessingOps; // progress reporting unsigned int PackagesDone; unsigned int PackagesTotal; -- cgit v1.2.3 From e2c79929482ba04ed1a576e4bc837d434c71756e Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 25 Jul 2008 20:33:10 +0200 Subject: * add DPkg::NoTriggers option so that applications that call apt/aptitude (like the installer) defer trigger processing (thanks to Joey Hess) --- apt-pkg/deb/dpkgpm.cc | 3 +++ 1 file changed, 3 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 77143e671..0071c151e 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -554,6 +554,7 @@ bool pkgDPkgPM::Go(int OutStatusFd) { unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024); unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024); + bool NoTriggers = _config->FindB("DPkg::NoTriggers",false); if (RunScripts("DPkg::Pre-Invoke") == false) return false; @@ -689,6 +690,8 @@ bool pkgDPkgPM::Go(int OutStatusFd) case Item::Configure: Args[n++] = "--configure"; + if (NoTriggers) + Args[n++] = "--no-triggers"; Size += strlen(Args[n-1]); break; -- cgit v1.2.3 From c76c44b10a40bc4ae755effad8a53802a6e4952a Mon Sep 17 00:00:00 2001 From: egon Date: Tue, 23 Sep 2008 07:31:23 +0200 Subject: * apt-pkg/pkgcachegen.cc: - do not add multiple identical descriptions for the same language (closes: #400768) --- apt-pkg/pkgcache.cc | 3 ++- apt-pkg/pkgcachegen.cc | 20 ++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 133899a27..8eb62089a 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -622,7 +622,8 @@ pkgCache::DescIterator pkgCache::VerIterator::TranslatedDescription() const for (; Desc.end() == false; Desc++) if (pkgIndexFile::LanguageCode() == Desc.LanguageCode()) break; - if (Desc.end() == true) Desc = DescDefault; + if (Desc.end() == true) + Desc = DescDefault; return Desc; }; diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index d00cd4e64..f71547f39 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -139,10 +139,21 @@ bool pkgCacheGenerator::MergeList(ListParser &List, { pkgCache::DescIterator Desc = Ver.DescriptionList(); map_ptrloc *LastDesc = &Ver->DescriptionList; - - for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++) + bool duplicate=false; + + // don't add a new description if we have one for the given + // md5 && language + for ( ; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++) + if (MD5SumValue(Desc.md5()) == CurMd5 && + Desc.LanguageCode() == List.DescriptionLanguage()) + duplicate=true; + if(duplicate) + continue; + + for (Desc = Ver.DescriptionList(); + Desc.end() == false; + LastDesc = &Desc->NextDesc, Desc++) { - if (MD5SumValue(Desc.md5()) == CurMd5) { // Add new description @@ -434,7 +445,8 @@ bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc, // --------------------------------------------------------------------- /* This puts a description structure in the linked list */ map_ptrloc pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc, - const string &Lang, const MD5SumValue &md5sum, + const string &Lang, + const MD5SumValue &md5sum, map_ptrloc Next) { // Get a structure -- cgit v1.2.3 From f7dec19f5ce3b876c5d2eaeb2d26cf513780c935 Mon Sep 17 00:00:00 2001 From: Daniel Burrows Date: Thu, 25 Sep 2008 18:24:09 -0700 Subject: Restore the apt ABI. The problem was that the size of pkgDpkgPM and its member offsets changed because a map giving the names of the trigger states was inserted into the middle of the structure. I fixed it by using a statically allocated array instead. This changes the procedure for looking up a string to a linear search, which should be fine (or even faster than before) since there are only 4 state strings. If it becomes a problem, sorting the array by key will allow us to use std::equal_range(), but I would advise against this unless it's really necessary, since sooner or later someone will forget to maintain the sort order. --- apt-pkg/deb/dpkgpm.cc | 51 ++++++++++++++++++++++++++++++++++++++++----------- apt-pkg/deb/dpkgpm.h | 2 -- 2 files changed, 40 insertions(+), 13 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 0071c151e..70dd09bc6 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include @@ -39,7 +41,38 @@ using namespace std; - +namespace +{ + // Maps the dpkg "processing" info to human readable names. Entry 0 + // of each array is the key, entry 1 is the value. + const std::pair PackageProcessingOps[] = { + std::make_pair("install", N_("Installing %s")), + std::make_pair("configure", N_("Configuring %s")), + std::make_pair("remove", N_("Removing %s")), + std::make_pair("trigproc", N_("Running post-installation trigger %s")) + }; + + const std::pair * const PackageProcessingOpsBegin = PackageProcessingOps; + const std::pair * const PackageProcessingOpsEnd = PackageProcessingOps + sizeof(PackageProcessingOps) / sizeof(PackageProcessingOps[0]); + + // Predicate to test whether an entry in the PackageProcessingOps + // array matches a string. + class MatchProcessingOp + { + const char *target; + + public: + MatchProcessingOp(const char *the_target) + : target(the_target) + { + } + + bool operator()(const std::pair &pair) const + { + return strcmp(pair.first, target) == 0; + } + }; +} // DPkgPM::pkgDPkgPM - Constructor /*{{{*/ // --------------------------------------------------------------------- @@ -362,17 +395,19 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line) if(strncmp(list[0], "processing", strlen("processing")) == 0) { char s[200]; - map::iterator iter; char *pkg_or_trigger = _strstrip(list[2]); action =_strstrip( list[1]); - iter = PackageProcessingOps.find(action); - if(iter == PackageProcessingOps.end()) + const std::pair * const iter = + std::find_if(PackageProcessingOpsBegin, + PackageProcessingOpsEnd, + MatchProcessingOp(action)); + if(iter == PackageProcessingOpsEnd) { if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) std::clog << "ignoring unknwon action: " << action << std::endl; return; } - snprintf(s, sizeof(s), _(iter->second.c_str()), pkg_or_trigger); + snprintf(s, sizeof(s), _(iter->second), pkg_or_trigger); status << "pmstatus:" << pkg_or_trigger << ":" << (PackagesDone/float(PackagesTotal)*100.0) @@ -601,12 +636,6 @@ bool pkgDPkgPM::Go(int OutStatusFd) }, }; - // populate the "processing" map - PackageProcessingOps.insert( make_pair("install",N_("Installing %s")) ); - PackageProcessingOps.insert( make_pair("configure",N_("Configuring %s")) ); - PackageProcessingOps.insert( make_pair("remove",N_("Removing %s")) ); - PackageProcessingOps.insert( make_pair("trigproc",N_("Running post-installation trigger %s")) ); - // init the PackageOps map, go over the list of packages that // that will be [installed|configured|removed|purged] and add // them to the PackageOps map (the dpkg states it goes through) diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index 449469126..ebc7e32bf 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -47,8 +47,6 @@ class pkgDPkgPM : public pkgPackageManager // the int is the state that is already done (e.g. a package that is // going to be install is already in state "half-installed") map PackageOpsDone; - // map the dpkg "processing" info to human readable names - map PackageProcessingOps; // progress reporting unsigned int PackagesDone; unsigned int PackagesTotal; -- cgit v1.2.3 From 496d5c709d9811f03b70ef0eaf6733c13d2564d2 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 1 Oct 2008 18:35:23 +0200 Subject: * apt-pkg/packagemanager.cc, apt-pkg/deb/dpkgpm.cc: - move the state file writting into the Go() implementation of dpkgpm (closes: #498799) * apt-pkg/algorithms.cc: - fix simulation performance drop (thanks to Ferenc Wagner for reporting the issue) --- apt-pkg/algorithms.cc | 3 ++- apt-pkg/algorithms.h | 1 + apt-pkg/deb/dpkgpm.cc | 2 ++ apt-pkg/packagemanager.cc | 4 ---- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index eaab4c0ea..59f994cd7 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -37,7 +37,8 @@ pkgProblemResolver *pkgProblemResolver::This = 0; this is not necessary since the pkgCaches are fully shared now. */ pkgSimulate::pkgSimulate(pkgDepCache *Cache) : pkgPackageManager(Cache), iPolicy(Cache), - Sim(&Cache->GetCache(),&iPolicy) + Sim(&Cache->GetCache(),&iPolicy), + group(Sim) { Sim.Init(0); Flags = new unsigned char[Cache->Head().PackageCount]; diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index defaed57d..d183cd213 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -60,6 +60,7 @@ class pkgSimulate : public pkgPackageManager Policy iPolicy; pkgDepCache Sim; + pkgDepCache::ActionGroup group; // The Actuall installation implementation virtual bool Install(PkgIterator Pkg,string File); diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 70dd09bc6..4fad0fd52 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -956,6 +956,8 @@ bool pkgDPkgPM::Go(int OutStatusFd) if (RunScripts("DPkg::Post-Invoke") == false) return false; + + Cache.writeStateFile(NULL); return true; } /*}}}*/ diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index c391a6036..304d1c653 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -666,10 +666,6 @@ pkgPackageManager::DoInstallPostFork(int statusFd) if(goResult == false) return Failed; - // if all was fine update the state file - if(Res == Completed) { - Cache.writeStateFile(NULL); - } return Res; }; -- cgit v1.2.3 From 7365ff46a3852e2d3abd2cfdfcfad37ac362c427 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Fri, 3 Oct 2008 20:15:06 +0200 Subject: Fix some typos in docs and translations (thanks to timeless, closes: 368665) --- apt-pkg/algorithms.cc | 2 +- apt-pkg/contrib/cmndline.h | 2 +- apt-pkg/contrib/strutl.cc | 2 +- apt-pkg/orderlist.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 59f994cd7..2e2a976bb 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -497,7 +497,7 @@ void pkgProblemResolver::MakeScores() signed short &Score = Scores[I->ID]; - /* This is arbitary, it should be high enough to elevate an + /* This is arbitrary, it should be high enough to elevate an essantial package above most other packages but low enough to allow an obsolete essential packages to be removed by a conflicts on a powerfull normal package (ie libc6) */ diff --git a/apt-pkg/contrib/cmndline.h b/apt-pkg/contrib/cmndline.h index fad6d1da9..e28071e81 100644 --- a/apt-pkg/contrib/cmndline.h +++ b/apt-pkg/contrib/cmndline.h @@ -34,7 +34,7 @@ ConfigFile - Means this flag should be interprited as the name of a config file to read in at this point in option processing. Implies HasArg. - ArbItem - Means the item is an arbitary configuration string of + ArbItem - Means the item is an arbitrary configuration string of the form item=value, where item is passed directly to the configuration class. The default, if the flags are 0 is to use Boolean diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index eacc7077a..3a0abc5a8 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -461,7 +461,7 @@ string Base64Encode(const string &S) /*}}}*/ // stringcmp - Arbitary string compare /*{{{*/ // --------------------------------------------------------------------- -/* This safely compares two non-null terminated strings of arbitary +/* This safely compares two non-null terminated strings of arbitrary length */ int stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd) { diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index 616714e29..ca18f1d75 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -39,7 +39,7 @@ ordering. Each of the features can be enabled in the sorting routine at an - arbitary priority to give quite abit of control over the final unpacking + arbitrary priority to give quite abit of control over the final unpacking order. The rules listed above may never be violated and are called Critical. -- cgit v1.2.3 From 0da8987ab9e67ad693e38bb5cfe692f12b1a7db9 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Fri, 3 Oct 2008 20:57:25 +0200 Subject: Applying #298821 patch for further arbitary typos --- apt-pkg/contrib/cmndline.cc | 2 +- apt-pkg/contrib/strutl.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/contrib/cmndline.cc b/apt-pkg/contrib/cmndline.cc index 54c91d67d..bfd53695e 100644 --- a/apt-pkg/contrib/cmndline.cc +++ b/apt-pkg/contrib/cmndline.cc @@ -189,7 +189,7 @@ bool CommandLine::HandleOpt(int &I,int argc,const char *argv[], if ((A->Flags & ConfigFile) == ConfigFile) return ReadConfigFile(*Conf,Argument); - // Arbitary item specification + // Arbitrary item specification if ((A->Flags & ArbItem) == ArbItem) { const char *J; diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 3a0abc5a8..bd374fd1e 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -459,7 +459,7 @@ string Base64Encode(const string &S) return Final; } /*}}}*/ -// stringcmp - Arbitary string compare /*{{{*/ +// stringcmp - Arbitrary string compare /*{{{*/ // --------------------------------------------------------------------- /* This safely compares two non-null terminated strings of arbitrary length */ @@ -517,7 +517,7 @@ int stringcmp(string::const_iterator A,string::const_iterator AEnd, } #endif /*}}}*/ -// stringcasecmp - Arbitary case insensitive string compare /*{{{*/ +// stringcasecmp - Arbitrary case insensitive string compare /*{{{*/ // --------------------------------------------------------------------- /* */ int stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd) -- cgit v1.2.3 From 2ec1674d7d0c0cd77fb385d16bf8db98968e3e84 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Sat, 11 Oct 2008 09:22:43 +0200 Subject: Fix compilation warning in apt-pkg/acquire.cc. New experimental release --- apt-pkg/acquire.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 6840ae120..80c2fee0f 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -796,7 +796,7 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner) // Compute the CPS struct timeval NewTime; gettimeofday(&NewTime,0); - if (NewTime.tv_sec - Time.tv_sec == 6 && NewTime.tv_usec > Time.tv_usec || + if ((NewTime.tv_sec - Time.tv_sec == 6 && NewTime.tv_usec > Time.tv_usec) || NewTime.tv_sec - Time.tv_sec > 6) { double Delta = NewTime.tv_sec - Time.tv_sec + -- cgit v1.2.3 From d320fdc3539f686e690a4ae0cb3f941b0e1a0456 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Sat, 11 Oct 2008 09:42:17 +0200 Subject: Fix another compilation warning in apt-pkg/versionmatch.cc --- apt-pkg/versionmatch.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc index 4a426809c..5c25c2f7b 100644 --- a/apt-pkg/versionmatch.cc +++ b/apt-pkg/versionmatch.cc @@ -124,7 +124,7 @@ bool pkgVersionMatch::MatchVer(const char *A,string B,bool Prefix) const char *Ae = Ab + strlen(A); // Strings are not a compatible size. - if ((unsigned)(Ae - Ab) != B.length() && Prefix == false || + if (((unsigned)(Ae - Ab) != B.length() && Prefix == false) || (unsigned)(Ae - Ab) < B.length()) return false; -- cgit v1.2.3 From f8b1274722522826650a37f87bf9e743b5bca337 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Sat, 11 Oct 2008 10:48:59 +0200 Subject: Fix typo in apt-pkg/depcache.cc --- apt-pkg/depcache.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index d8b4dc6d2..859e64ea1 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1001,7 +1001,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, if(Pkg.Section() && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", Pkg.Section())) { if(_config->FindB("Debug::pkgDepCache::AutoInstall",false) == true) - std::clog << "Setting NOT as auto-installed (direct dep of pkg in APT::Never-MarkAuto-Section)" << std::endl; + std::clog << "Setting NOT as auto-installed (direct dep of pkg in APT::Never-MarkAuto-Sections)" << std::endl; MarkInstall(InstPkg,true,Depth + 1, true); } else -- cgit v1.2.3 From 0d7a243df522cad460bc1f94f32c6b7f766cabb1 Mon Sep 17 00:00:00 2001 From: "Eugene V. Lyubimkin" Date: Sat, 25 Oct 2008 01:33:40 +0300 Subject: Added fallback to uncompressed files while acquiring index files (Sources and Packages) --- apt-pkg/acquire-item.cc | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 7cae6c8b7..b014092df 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -570,7 +570,7 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, } else { CompressionExtension = comprExt; } - Desc.URI = URI + CompressionExtension; + Desc.URI = URI + (CompressionExtension == "plain" ? "" : CompressionExtension); Desc.Description = URIDesc; Desc.Owner = this; @@ -597,19 +597,30 @@ string pkgAcqIndex::Custom600Headers() void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) { + bool descChanged = false; // no .bz2 found, retry with .gz if(Desc.URI.substr(Desc.URI.size()-3) == "bz2") { - Desc.URI = Desc.URI.substr(0,Desc.URI.size()-3) + "gz"; + Desc.URI = Desc.URI.substr(0,Desc.URI.size()-3) + "gz"; - // retry with a gzip one - new pkgAcqIndex(Owner, RealURI, Desc.Description,Desc.ShortDesc, + new pkgAcqIndex(Owner, RealURI, Desc.Description,Desc.ShortDesc, ExpectedHash, string(".gz")); + descChanged = true; + } + // no .gz found, retry with uncompressed + else if(Desc.URI.substr(Desc.URI.size()-2) == "gz") { + Desc.URI = Desc.URI.substr(0,Desc.URI.size()-2); + + new pkgAcqIndex(Owner, RealURI, Desc.Description,Desc.ShortDesc, + ExpectedHash, string("plain")); + descChanged = true; + } + if (descChanged) { Status = StatDone; Complete = false; Dequeue(); return; - } - + } + // on decompression failure, remove bad versions in partial/ if(Decompression && Erase) { string s = _config->FindDir("Dir::State::lists") + "partial/"; @@ -706,6 +717,8 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, decompProg = "bzip2"; else if(compExt == ".gz") decompProg = "gzip"; + else if(compExt == "ges" || compExt == "ces") // packaGES or sourCES + decompProg = "copy"; else { _error->Error("Unsupported extension: %s", compExt.c_str()); return; -- cgit v1.2.3 From 4805f1cfd795c41db2a3c7fed56c15bb8c350c49 Mon Sep 17 00:00:00 2001 From: "Eugene V. Lyubimkin" Date: Sat, 25 Oct 2008 17:03:16 +0300 Subject: Strip user/password from URL in error message. --- apt-pkg/algorithms.cc | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 2e2a976bb..bd59a4749 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -1342,7 +1343,22 @@ bool ListUpdate(pkgAcquireStatus &Stat, (*I)->Finished(); - _error->Warning(_("Failed to fetch %s %s\n"),(*I)->DescURI().c_str(), + // stripping username/password from URI if present + string descUri = (*I)->DescURI(); + regex_t userPassRegex; + regcomp(&userPassRegex, "\\://(\\w+)\\:(\\w+)@", REG_EXTENDED); + regmatch_t userPassMatch; + regexec(&userPassRegex, descUri.c_str(), 1, &userPassMatch, 0); + if (userPassMatch.rm_so != -1) // regexp matched + { + // really stripping + size_t stripStart = userPassMatch.rm_so + 3; + size_t stripEnd = userPassMatch.rm_eo; + descUri = descUri.substr(0, stripStart) + + descUri.substr(stripEnd, string::npos); + } + + _error->Warning(_("Failed to fetch %s %s\n"), descUri.c_str(), (*I)->ErrorText.c_str()); if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError) -- cgit v1.2.3 From 27d5a2046999b86605968e7cbf0778dd95e63371 Mon Sep 17 00:00:00 2001 From: "Eugene V. Lyubimkin" Date: Sat, 25 Oct 2008 22:15:20 +0300 Subject: Fixed error output when fallback'ed to uncompressed Packages/Sources. --- apt-pkg/acquire-item.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index b014092df..503ad7dae 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -568,9 +568,9 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, else CompressionExtension = ".gz"; } else { - CompressionExtension = comprExt; + CompressionExtension = (comprExt == "plain" ? "" : comprExt); } - Desc.URI = URI + (CompressionExtension == "plain" ? "" : CompressionExtension); + Desc.URI = URI + CompressionExtension; Desc.Description = URIDesc; Desc.Owner = this; -- cgit v1.2.3 From 2d6f9accbcf38923911854a918d971c0905b262c Mon Sep 17 00:00:00 2001 From: "Eugene V. Lyubimkin" Date: Sat, 25 Oct 2008 22:49:22 +0300 Subject: Corrected determining if regexp matched. --- apt-pkg/algorithms.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index bd59a4749..6f30a52da 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1348,8 +1348,8 @@ bool ListUpdate(pkgAcquireStatus &Stat, regex_t userPassRegex; regcomp(&userPassRegex, "\\://(\\w+)\\:(\\w+)@", REG_EXTENDED); regmatch_t userPassMatch; - regexec(&userPassRegex, descUri.c_str(), 1, &userPassMatch, 0); - if (userPassMatch.rm_so != -1) // regexp matched + int regMatchResult = regexec(&userPassRegex, descUri.c_str(), 1, &userPassMatch, 0); + if (regMatchResult == 0 && userPassMatch.rm_so != -1) // regexp matched { // really stripping size_t stripStart = userPassMatch.rm_so + 3; @@ -1357,6 +1357,7 @@ bool ListUpdate(pkgAcquireStatus &Stat, descUri = descUri.substr(0, stripStart) + descUri.substr(stripEnd, string::npos); } + regfree(&userPassRegex); _error->Warning(_("Failed to fetch %s %s\n"), descUri.c_str(), (*I)->ErrorText.c_str()); -- cgit v1.2.3 From c94e518c5ee831c21063ce38e6446113db087456 Mon Sep 17 00:00:00 2001 From: "Eugene V. Lyubimkin" Date: Sun, 26 Oct 2008 13:39:10 +0200 Subject: Switched from regexp to using existing URI class to strip user/password. --- apt-pkg/algorithms.cc | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 6f30a52da..70212e5c9 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1343,21 +1343,10 @@ bool ListUpdate(pkgAcquireStatus &Stat, (*I)->Finished(); - // stripping username/password from URI if present - string descUri = (*I)->DescURI(); - regex_t userPassRegex; - regcomp(&userPassRegex, "\\://(\\w+)\\:(\\w+)@", REG_EXTENDED); - regmatch_t userPassMatch; - int regMatchResult = regexec(&userPassRegex, descUri.c_str(), 1, &userPassMatch, 0); - if (regMatchResult == 0 && userPassMatch.rm_so != -1) // regexp matched - { - // really stripping - size_t stripStart = userPassMatch.rm_so + 3; - size_t stripEnd = userPassMatch.rm_eo; - descUri = descUri.substr(0, stripStart) + - descUri.substr(stripEnd, string::npos); - } - regfree(&userPassRegex); + ::URI uri((*I)->DescURI()); + uri.User.clear(); + uri.Password.clear(); + string descUri = string(uri); _error->Warning(_("Failed to fetch %s %s\n"), descUri.c_str(), (*I)->ErrorText.c_str()); -- cgit v1.2.3 From 4b94b383390fb93c58fb14460679fadbb3c8ee93 Mon Sep 17 00:00:00 2001 From: "Eugene V. Lyubimkin" Date: Sun, 26 Oct 2008 13:41:09 +0200 Subject: Forgot to remove regex.h include in previous commit. Now done --- apt-pkg/algorithms.cc | 1 - 1 file changed, 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 70212e5c9..1d04ae64d 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -23,7 +23,6 @@ #include #include -#include #include #include #include -- cgit v1.2.3 From 3c8cda8b05d6eeaef76c7ccc673fe378b0c74f37 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 28 Oct 2008 18:14:29 +0100 Subject: fix various -Wall warnings --- apt-pkg/acquire.cc | 3 ++- apt-pkg/contrib/cdromutl.cc | 3 ++- apt-pkg/contrib/mmap.cc | 5 +++-- apt-pkg/deb/dpkgpm.cc | 4 ++-- apt-pkg/depcache.cc | 2 +- apt-pkg/indexcopy.cc | 2 +- 6 files changed, 11 insertions(+), 8 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 80c2fee0f..38944bbac 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -444,8 +444,9 @@ bool pkgAcquire::Clean(string Dir) unlink(Dir->d_name); }; - chdir(StartDir.c_str()); closedir(D); + if (chdir(StartDir.c_str()) != 0) + return _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str()); return true; } /*}}}*/ diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index 6f00e1451..b6524a178 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -176,7 +176,8 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version) Hash.Add(Dir->d_name); }; - chdir(StartDir.c_str()); + if (chdir(StartDir.c_str()) != 0) + return _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str()); closedir(D); // Some stats from the fsys diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index abcae46fe..eed438250 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -192,7 +192,8 @@ DynamicMMap::~DynamicMMap() unsigned long EndOfFile = iSize; iSize = WorkSpace; Close(false); - ftruncate(Fd->Fd(),EndOfFile); + if(ftruncate(Fd->Fd(),EndOfFile) < 0) + _error->Errno("ftruncate", _("Failed to truncate file")); } /*}}}*/ // DynamicMMap::RawAllocate - Allocate a raw chunk of unaligned space /*{{{*/ @@ -209,7 +210,7 @@ unsigned long DynamicMMap::RawAllocate(unsigned long Size,unsigned long Aln) // Just in case error check if (Result + Size > WorkSpace) { - _error->Error("Dynamic MMap ran out of room"); + _error->Error(_("Dynamic MMap ran out of room")); return 0; } diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 4fad0fd52..85cf4e119 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -531,7 +531,7 @@ bool pkgDPkgPM::OpenLog() struct tm *tmp = localtime(&t); strftime(outstr, sizeof(outstr), "%F %T", tmp); fprintf(term_out, "\nLog started: "); - fprintf(term_out, outstr); + fprintf(term_out, "%s", outstr); fprintf(term_out, "\n"); } return true; @@ -546,7 +546,7 @@ bool pkgDPkgPM::CloseLog() struct tm *tmp = localtime(&t); strftime(outstr, sizeof(outstr), "%F %T", tmp); fprintf(term_out, "Log ended: "); - fprintf(term_out, outstr); + fprintf(term_out, "%s", outstr); fprintf(term_out, "\n"); fclose(term_out); } diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 859e64ea1..2411bfe89 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -269,7 +269,7 @@ bool pkgDepCache::writeStateFile(OpProgress *prog, bool InstalledOnly) ostr.str(string("")); ostr << "Package: " << pkg.Name() << "\nAuto-Installed: 1\n\n"; - fprintf(OutFile,ostr.str().c_str()); + fprintf(OutFile,"%s",ostr.str().c_str()); fprintf(OutFile,"\n"); } } diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index b30777d8d..9e5c03e0b 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -639,7 +639,7 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector &SigList, // Open the Release file and add it to the MetaIndex if(!MetaIndex->Load(*I+"Release")) { - _error->Error(MetaIndex->ErrorText.c_str()); + _error->Error("%s",MetaIndex->ErrorText.c_str()); return false; } -- cgit v1.2.3 From 589898ae1e46dc56bc037f502e1c405a3e06ed70 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 29 Oct 2008 09:27:11 +0100 Subject: apt-pkg/acquire-item.cc: fixed my incorrect use of flExtension --- apt-pkg/acquire-item.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 679f9cee7..cf835f5d5 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -711,13 +711,13 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, else Local = true; - string compExt = flExtension(URI(Desc.URI).Path); + string compExt = flExtension(flNotDir(URI(Desc.URI).Path)); const char *decompProg; if(compExt == "bz2") decompProg = "bzip2"; - else if(compExt == ".gz") + else if(compExt == "gz") decompProg = "gzip"; - else if(compExt == "") + else if(compExt == "Packages" || compExt == "Sources") decompProg = "copy"; else { _error->Error("Unsupported extension: %s", compExt.c_str()); -- cgit v1.2.3 From 708ead3a44ac2f5ea625343c5d1b3404cca8a481 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 29 Oct 2008 09:31:53 +0100 Subject: apt-pkg/acquire-item.cc: do not hardcode "Packages" or "Sources" in the (generic) acquire-item.cc code --- apt-pkg/acquire-item.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index cf835f5d5..ae8ff2205 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -717,7 +717,8 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, decompProg = "bzip2"; else if(compExt == "gz") decompProg = "gzip"; - else if(compExt == "Packages" || compExt == "Sources") + // flExtensions returns the full name if no extension is found + else if(compExt == flNotDir(URI(Desc.URI).Path)) decompProg = "copy"; else { _error->Error("Unsupported extension: %s", compExt.c_str()); -- cgit v1.2.3 From 1c8ab7200ec4527cd38d0b4d0ef847452f011915 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 29 Oct 2008 18:58:48 +0100 Subject: add fixme for the future flJustExtension --- apt-pkg/acquire-item.cc | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index ae8ff2205..09ea5da02 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -718,6 +718,10 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, else if(compExt == "gz") decompProg = "gzip"; // flExtensions returns the full name if no extension is found + // this is why we have this complicated compare operation here + // FIMXE: add a new flJustExtension() that return "" if no + // extension is found and use that above so that it can + // be tested against "" else if(compExt == flNotDir(URI(Desc.URI).Path)) decompProg = "copy"; else { -- cgit v1.2.3 From 6e7f872dfdf7de0108b07e3c8f1ccda57734e6f8 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 12 Nov 2008 16:24:26 +0100 Subject: fix SIGHUP handling (closes: #463030) --- apt-pkg/deb/dpkgpm.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 85cf4e119..5359f81ef 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -773,6 +773,9 @@ bool pkgDPkgPM::Go(int OutStatusFd) sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN); sighandler_t old_SIGINT = signal(SIGINT,SIG_IGN); + // ignore SIGHUP as well (debian #463030) + sighandler_t old_SIGHUP = signal(SIGHUP,SIG_IGN); + struct termios tt; struct termios tt_out; struct winsize win; @@ -881,6 +884,7 @@ bool pkgDPkgPM::Go(int OutStatusFd) // Restore sig int/quit signal(SIGQUIT,old_SIGQUIT); signal(SIGINT,old_SIGINT); + signal(SIGINT,old_SIGHUP); return _error->Errno("waitpid","Couldn't wait for subprocess"); } @@ -920,6 +924,7 @@ bool pkgDPkgPM::Go(int OutStatusFd) // Restore sig int/quit signal(SIGQUIT,old_SIGQUIT); signal(SIGINT,old_SIGINT); + signal(SIGINT,old_SIGHUP); if(master >= 0) { -- cgit v1.2.3 From 4e648e0bc72d2513965dc17ee7980754036305bb Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 12 Nov 2008 20:36:41 +0100 Subject: apt-pkg/deb/dpkgpm.cc: fix typo (thanks to jackyf) --- apt-pkg/deb/dpkgpm.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 5359f81ef..9ad367e67 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -924,7 +924,7 @@ bool pkgDPkgPM::Go(int OutStatusFd) // Restore sig int/quit signal(SIGQUIT,old_SIGQUIT); signal(SIGINT,old_SIGINT); - signal(SIGINT,old_SIGHUP); + signal(SIGHUP,old_SIGHUP); if(master >= 0) { -- cgit v1.2.3 From 1a853738a54dbab6e82a23a8cc6c6d6f3aeeae12 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 12 Nov 2008 21:18:34 +0100 Subject: merge from the mvo branch --- apt-pkg/deb/dpkgpm.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 9ad367e67..40aafafa4 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -884,7 +884,7 @@ bool pkgDPkgPM::Go(int OutStatusFd) // Restore sig int/quit signal(SIGQUIT,old_SIGQUIT); signal(SIGINT,old_SIGINT); - signal(SIGINT,old_SIGHUP); + signal(SIGHUP,old_SIGHUP); return _error->Errno("waitpid","Couldn't wait for subprocess"); } -- cgit v1.2.3