From: Michael Vogt Date: Thu, 24 Sep 2009 09:49:45 +0000 (+0200) Subject: * apt-pkg/deb/dpkgpm.cc: X-Git-Tag: 0.7.24~3 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/3b5a76ae9ae425db6fda4ccc041fbb1e79fffc18?hp=-c * apt-pkg/deb/dpkgpm.cc: - when tcgetattr() returns non-zero skip all pty magic (thanks to Simon Richter, closes: #509866) * apt-inst/contrib/arfile.cc: - show propper error message for Invalid archive members --- 3b5a76ae9ae425db6fda4ccc041fbb1e79fffc18 diff --combined apt-inst/contrib/arfile.cc index e6c63d1ab,8f30355ed..8018f4d30 --- a/apt-inst/contrib/arfile.cc +++ b/apt-inst/contrib/arfile.cc @@@ -87,7 -87,7 +87,7 @@@ bool ARArchive::LoadHeaders( StrToNum(Head.Size,Memb->Size,sizeof(Head.Size)) == false) { delete Memb; - return _error->Error(_("Invalid archive member header")); + return _error->Error(_("Invalid archive member header %s"), Head.Name); } // Check for an extra long name string @@@ -96,7 -96,7 +96,7 @@@ char S[300]; unsigned long Len; if (StrToNum(Head.Name+3,Len,sizeof(Head.Size)-3) == false || - Len >= strlen(S)) + Len >= sizeof(S)) { delete Memb; return _error->Error(_("Invalid archive member header")); diff --combined apt-pkg/deb/dpkgpm.cc index aec4edc49,ab71d4e96..f017d53e7 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@@ -134,14 -134,8 +134,14 @@@ bool pkgDPkgPM::Configure(PkgIterator P { if (Pkg.end() == true) return false; - - List.push_back(Item(Item::Configure,Pkg)); + + List.push_back(Item(Item::Configure, Pkg)); + + // Use triggers for config calls if we configure "smart" + // as otherwise Pre-Depends will not be satisfied, see #526774 + if (_config->FindB("DPkg::TriggersPending", false) == true) + List.push_back(Item(Item::TriggersPending, PkgIterator())); + return true; } /*}}}*/ @@@ -196,9 -190,6 +196,9 @@@ bool pkgDPkgPM::SendV2Pkgs(FILE *F // Write out the package actions in order. for (vector::iterator I = List.begin(); I != List.end(); I++) { + if(I->Pkg.end() == true) + continue; + pkgDepCache::StateCache &S = Cache[I->Pkg]; fprintf(F,"%s ",I->Pkg.Name()); @@@ -387,11 -378,10 +387,11 @@@ void pkgDPkgPM::DoTerminalPty(int maste */ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line) { + bool const Debug = _config->FindB("Debug::pkgDPkgProgressReporting",false); // the status we output ostringstream status; - if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + if (Debug == true) std::clog << "got from dpkg '" << line << "'" << std::endl; @@@ -406,7 -396,6 +406,7 @@@ 'processing: install: pkg' 'processing: configure: pkg' 'processing: remove: pkg' + 'processing: purge: pkg' - but for apt is it a ignored "unknown" action 'processing: trigproc: trigger' */ @@@ -419,28 -408,28 +419,28 @@@ TokSplitString(':', line, list, sizeof(list)/sizeof(list[0])); if( list[0] == NULL || list[1] == NULL || list[2] == NULL) { - if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + if (Debug == true) std::clog << "ignoring line: not enough ':'" << std::endl; return; } - char *pkg = list[1]; - char *action = _strstrip(list[2]); + const char* const pkg = list[1]; + const char* action = _strstrip(list[2]); // 'processing' from dpkg looks like // 'processing: action: pkg' if(strncmp(list[0], "processing", strlen("processing")) == 0) { char s[200]; - char *pkg_or_trigger = _strstrip(list[2]); - action =_strstrip( list[1]); + const char* const pkg_or_trigger = _strstrip(list[2]); + action = _strstrip( list[1]); 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; + if (Debug == true) + std::clog << "ignoring unknown action: " << action << std::endl; return; } snprintf(s, sizeof(s), _(iter->second), pkg_or_trigger); @@@ -451,7 -440,7 +451,7 @@@ << endl; if(OutStatusFd > 0) write(OutStatusFd, status.str().c_str(), status.str().size()); - if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + if (Debug == true) std::clog << "send: '" << status.str() << "'" << endl; return; } @@@ -464,11 -453,11 +464,11 @@@ << endl; if(OutStatusFd > 0) write(OutStatusFd, status.str().c_str(), status.str().size()); - if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + if (Debug == true) std::clog << "send: '" << status.str() << "'" << endl; return; } - if(strncmp(action,"conffile",strlen("conffile")) == 0) + else if(strncmp(action,"conffile",strlen("conffile")) == 0) { status << "pmconffile:" << list[1] << ":" << (PackagesDone/float(PackagesTotal)*100.0) @@@ -476,12 -465,12 +476,12 @@@ << endl; if(OutStatusFd > 0) write(OutStatusFd, status.str().c_str(), status.str().size()); - if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + if (Debug == true) std::clog << "send: '" << status.str() << "'" << endl; return; } - vector &states = PackageOps[pkg]; + vector const &states = PackageOps[pkg]; const char *next_action = NULL; if(PackageOpsDone[pkg] < states.size()) next_action = states[PackageOpsDone[pkg]].state; @@@ -504,15 -493,15 +504,15 @@@ << endl; if(OutStatusFd > 0) write(OutStatusFd, status.str().c_str(), status.str().size()); - if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + if (Debug == true) std::clog << "send: '" << status.str() << "'" << endl; } - if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) + if (Debug == true) std::clog << "(parsed from dpkg) pkg: " << pkg << " action: " << action << endl; } - -// DPkgPM::DoDpkgStatusFd /*{{{*/ + /*}}}*/ +// DPkgPM::DoDpkgStatusFd /*{{{*/ // --------------------------------------------------------------------- /* */ @@@ -549,7 -538,7 +549,7 @@@ void pkgDPkgPM::DoDpkgStatusFd(int stat dpkgbuf_pos = dpkgbuf+dpkgbuf_pos-p; } /*}}}*/ - +// DPkgPM::OpenLog /*{{{*/ bool pkgDPkgPM::OpenLog() { string logdir = _config->FindDir("Dir::Log"); @@@ -572,8 -561,7 +572,8 @@@ } return true; } - + /*}}}*/ +// DPkg::CloseLog /*{{{*/ bool pkgDPkgPM::CloseLog() { if(term_out) @@@ -590,7 -578,7 +590,7 @@@ term_out = NULL; return true; } - + /*}}}*/ /*{{{*/ // This implements a racy version of pselect for those architectures // that don't have a working implementation. @@@ -612,6 -600,7 +612,6 @@@ static int racy_pselect(int nfds, fd_se return retval; } /*}}}*/ - // DPkgPM::Go - Run the sequence /*{{{*/ // --------------------------------------------------------------------- /* This globs the operations and calls dpkg @@@ -628,9 -617,9 +628,9 @@@ bool pkgDPkgPM::Go(int OutStatusFd sigset_t sigmask; sigset_t original_sigmask; - 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); + unsigned int const MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024); + unsigned int const MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024); + bool const NoTriggers = _config->FindB("DPkg::NoTriggers", false); if (RunScripts("DPkg::Pre-Invoke") == false) return false; @@@ -638,12 -627,6 +638,12 @@@ if (RunScriptsWithPkgs("DPkg::Pre-Install-Pkgs") == false) return false; + // support subpressing of triggers processing for special + // cases like d-i that runs the triggers handling manually + bool const SmartConf = (_config->Find("PackageManager::Configure", "all") != "all"); + if (_config->FindB("DPkg::ConfigurePending", SmartConf) == true) + List.push_back(Item(Item::ConfigurePending, PkgIterator())); + // 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] = { @@@ -679,19 -662,16 +679,19 @@@ // that will be [installed|configured|removed|purged] and add // them to the PackageOps map (the dpkg states it goes through) // and the PackageOpsTranslations (human readable strings) - for (vector::iterator I = List.begin(); I != List.end();I++) + for (vector::const_iterator I = List.begin(); I != List.end();I++) { - string name = (*I).Pkg.Name(); + if((*I).Pkg.end() == true) + continue; + + string const name = (*I).Pkg.Name(); PackageOpsDone[name] = 0; for(int i=0; (DpkgStatesOpMap[(*I).Op][i]).state != NULL; i++) { PackageOps[name].push_back(DpkgStatesOpMap[(*I).Op][i]); PackagesTotal++; } - } + } stdin_is_dev_null = false; @@@ -699,9 -679,9 +699,9 @@@ OpenLog(); // this loop is runs once per operation - for (vector::iterator I = List.begin(); I != List.end();) + for (vector::const_iterator I = List.begin(); I != List.end();) { - vector::iterator J = I; + vector::const_iterator J = I; for (; J != List.end() && J->Op == I->Op; J++) /* nothing */; @@@ -720,7 -700,7 +720,7 @@@ unsigned int n = 0; unsigned long Size = 0; - string Tmp = _config->Find("Dir::Bin::dpkg","dpkg"); + string const Tmp = _config->Find("Dir::Bin::dpkg","dpkg"); Args[n++] = Tmp.c_str(); Size += strlen(Args[n-1]); @@@ -770,23 -750,11 +770,23 @@@ case Item::Configure: Args[n++] = "--configure"; - if (NoTriggers) - Args[n++] = "--no-triggers"; Size += strlen(Args[n-1]); break; - + + case Item::ConfigurePending: + Args[n++] = "--configure"; + Size += strlen(Args[n-1]); + Args[n++] = "--pending"; + Size += strlen(Args[n-1]); + break; + + case Item::TriggersPending: + Args[n++] = "--triggers-only"; + Size += strlen(Args[n-1]); + Args[n++] = "--pending"; + Size += strlen(Args[n-1]); + break; + case Item::Install: Args[n++] = "--unpack"; Size += strlen(Args[n-1]); @@@ -794,14 -762,7 +794,14 @@@ Size += strlen(Args[n-1]); break; } - + + if (NoTriggers == true && I->Op != Item::TriggersPending && + I->Op != Item::ConfigurePending) + { + Args[n++] = "--no-triggers"; + Size += strlen(Args[n-1]); + } + // Write in the file or package names if (I->Op == Item::Install) { @@@ -817,8 -778,6 +817,8 @@@ { for (;I != J && Size < MaxArgBytes; I++) { + if((*I).Pkg.end() == true) + continue; Args[n++] = I->Pkg.Name(); Size += strlen(Args[n-1]); } @@@ -850,32 -809,35 +850,35 @@@ struct termios tt; struct winsize win; - int master; - int slave; + int master = -1; + int slave = -1; - // FIXME: setup sensible signal handling (*ick*) - tcgetattr(0, &tt); - ioctl(0, TIOCGWINSZ, (char *)&win); - if (openpty(&master, &slave, NULL, &tt, &win) < 0) + // if tcgetattr does not return zero there was a error + // and we do not do any pty magic + if (tcgetattr(0, &tt) == 0) { - const char *s = _("Can not write log, openpty() " - "failed (/dev/pts not mounted?)\n"); - fprintf(stderr, "%s",s); - fprintf(term_out, "%s",s); - master = slave = -1; - } else { - struct termios rtt; - rtt = tt; - cfmakeraw(&rtt); - rtt.c_lflag &= ~ECHO; - // block SIGTTOU during tcsetattr to prevent a hang if - // the process is a member of the background process group - // http://www.opengroup.org/onlinepubs/000095399/functions/tcsetattr.html - sigemptyset(&sigmask); - sigaddset(&sigmask, SIGTTOU); - sigprocmask(SIG_BLOCK,&sigmask, &original_sigmask); - tcsetattr(0, TCSAFLUSH, &rtt); - sigprocmask(SIG_SETMASK, &original_sigmask, 0); + ioctl(0, TIOCGWINSZ, (char *)&win); + if (openpty(&master, &slave, NULL, &tt, &win) < 0) + { + const char *s = _("Can not write log, openpty() " + "failed (/dev/pts not mounted?)\n"); + fprintf(stderr, "%s",s); + fprintf(term_out, "%s",s); + master = slave = -1; + } else { + struct termios rtt; + rtt = tt; + cfmakeraw(&rtt); + rtt.c_lflag &= ~ECHO; + // block SIGTTOU during tcsetattr to prevent a hang if + // the process is a member of the background process group + // http://www.opengroup.org/onlinepubs/000095399/functions/tcsetattr.html + sigemptyset(&sigmask); + sigaddset(&sigmask, SIGTTOU); + sigprocmask(SIG_BLOCK,&sigmask, &original_sigmask); + tcsetattr(0, TCSAFLUSH, &rtt); + sigprocmask(SIG_SETMASK, &original_sigmask, 0); + } } // Fork dpkg @@@ -954,9 -916,11 +957,9 @@@ int Status = 0; // we read from dpkg here - int _dpkgin = fd[0]; + int const _dpkgin = fd[0]; close(fd[1]); // close the write end of the pipe - // the result of the waitpid call - int res; if(slave > 0) close(slave); @@@ -964,8 -928,6 +967,8 @@@ sigemptyset(&sigmask); sigprocmask(SIG_BLOCK,&sigmask,&original_sigmask); + // the result of the waitpid call + int res; int select_ret; while ((res=waitpid(Child,&Status, WNOHANG)) != Child) { if(res < 0) { @@@ -1032,7 -994,7 +1035,7 @@@ // if it was set to "keep-dpkg-runing" then we won't return // here but keep the loop going and just report it as a error // for later - bool stopOnError = _config->FindB("Dpkg::StopOnError",true); + bool const stopOnError = _config->FindB("Dpkg::StopOnError",true); if(stopOnError) RunScripts("DPkg::Post-Invoke"); diff --combined debian/changelog index 90e5f8de1,cad223833..9def86ce9 --- a/debian/changelog +++ b/debian/changelog @@@ -1,72 -1,14 +1,79 @@@ -apt (0.7.22.4) unstable; urgency=low +apt (0.7.24) UNRELEASED; urgency=low + [ Nicolas François ] + * Cleaned up the first patch draft from KURASAWA Nozomu to finally + get po4a support for translating the man pages. + Many thanks to both for this excellent work! (Closes: #441608) + * doc/ja/*, doc/po/ja.po: + - remove the old ja man page translation and replace it with + the new po4a-powered translation by KURASAWA Nozomu. + * doc/*.?.xml (manpages): + - add contrib to author tags and also add refmiscinfo to fix warnings + * doc/style.txt, buildlib/defaults.mak, buildlib/manpage.mak: + - fix a few typos in the comments of this files + ++ [ Michael Vogt ] + * apt-pkg/deb/dpkgpm.cc: + - when tcgetattr() returns non-zero skip all pty magic + (thanks to Simon Richter, closes: #509866) + * apt-inst/contrib/arfile.cc: + - show propper error message for Invalid archive members + - -- Michael Vogt Mon, 31 Aug 2009 11:08:03 +0200 + [ David Kalnischkies ] + * doc/Doxyfile.in: + - update file with doxygen 1.6.1 (current unstable) + - activate DOT_MULTI_TARGETS, it is default on since doxygen 1.5.9 + * buildlib/po4a_manpage.mak, doc/makefile, configure: + - simplify the makefiles needed for po4a manpages + * apt-pkg/contrib/configuration.cc: + - add a helper to easily get a vector of strings from the config + * apt-pkg/contrib/strutl.cc: + - replace unknown multibytes with ? in UTF8ToCharset (Closes: #545208) + * doc/apt-get.8.xml: + - fix two little typos in the --simulate description. + * apt-pkg/aptconfiguration.cc, doc/apt.conf.5.xml: + - add an order subgroup to the compression types to simplify reordering + a bit and improve the documentation for this option group. + * doc/apt.ent, all man pages: + - move the description of files to globally usable entities + * doc/apt_preferences.5.xml: + - document the new preferences.d folder (Closes: #544017) + * methods/rred.cc: + - add at the top without failing (by Bernhard R. Link, Closes: #545694) + * buildlib/sizetable: + - add amd64 for cross building (by Mikhail Gusarov, Closes: #513058) + * debian/prerm: + - remove file as nobody will upgrade from 0.4.10 anymore + * debian/control: + - remove gnome-apt suggestion as it was removed from debian + * apt-pkg/deb/dpkgpm.cc, apt-pkg/packagemanager.cc, apt-pkg/orderlist.cc: + - add and document _experimental_ options to make (aggressive) + use of dpkg's trigger and configuration handling (Closes: #473461) + + [ Christian Perrier ] + * doc/fr/*, doc/po/fr.po: + - remove the old fr man page translation and replace it with + the new po4a-powered translation + * doc/pl, doc/de: dropped (pl translation is useless as the translated + document is not provideed anymore and the de translation is too + incomplete to be used) + + -- David Kalnischkies Fri, 28 Aug 2009 09:40:08 +0200 + +apt (0.7.23.1) unstable; urgency=low + + [ Michael Vogt ] + * apt-pkg/pkgcache.cc: + - do not set internel "needs-configure" state for packages in + triggers-pending state. dpkg will deal with the trigger and + it if does it before we trigger it, dpkg will error out + (LP: #414631) + * apt-pkg/acquire-item.cc: + - do not segfault on invalid items (closes: #544080) -apt (0.7.22.3) UNRELEASED; urgency=low + -- Michael Vogt Fri, 28 Aug 2009 21:53:20 +0200 + +apt (0.7.23) unstable; urgency=low [ Eugene V. Lyubimkin ] * methods/{http,https,ftp}, doc/apt.conf.5.xml: @@@ -76,50 -18,14 +83,50 @@@ mentioned above are not specified. (Closes: #445985, #157759, #320184, #365880, #479617) - [ Michael Vogt ] - * apt-pkg/pkgcache.cc: - - do not set internel "needs-configure" state for packages in - triggers-pending state. dpkg will deal with the trigger and - it if does it before we trigger it, dpkg will error out - (LP: #414631) + [ David Kalnischkies ] + * cmdline/apt-get.cc: + - add APT::Get::HideAutoRemove=small to display only a short line + instead of the full package list. (Closes: #537450) + - ShowBroken() in build-dep (by Mike O'Connor, Closes: #145916) + - check for statfs.f_type (by Robert Millan, Closes: #509313) + - correct the order of picked package binary vs source in source + - use SourceVersion instead of the BinaryVersion to get the source + Patch by Matt Kraai, thanks! (Closes: #382826) + - add pkg/archive and codename in source (Closes: #414105, #441178) + * apt-pkg/contrib/strutl.cc: + - enable thousand separator according to the current locale + (by Luca Bruno, Closes: #223712) + * doc/apt.conf.5.xml: + - mention the apt.conf.d dir (by Vincent McIntyre, Closes: #520831) + * apt-inst/contrib/arfile.cc: + - use sizeof instead strlen (by Marius Vollmer, Closes: #504325) + * doc/apt-mark.8.xml: + - improve manpage based on patch by Carl Chenet (Closes: #510286) + * apt-pkg/acquire-item.cc: + - use configsettings for dynamic compression type use and order. + Based on a patch by Jyrki Muukkonen, thanks! (LP: #71746) + * apt-pkg/aptconfiguration.cc: + - add default configuration for compression types and add lzma + support. Order is now bzip2, lzma, gzip, none (Closes: #510526) + * ftparchive/writer.cc: + - add lzma support also here, patch for this (and inspiration for + the one above) by Robert Millan, thanks! + * apt-pkg/depcache.cc: + - restore the --ignore-hold effect in the Is{Delete,Install}Ok hooks + * doc/apt-get.8.xml: + - update the source description to reflect what it actually does + and how it can be used. (Closes: #413021) + * methods/http.cc: + - allow empty Reason-Phase in Status-Line to please squid, + thanks Modestas Vainius for noticing! (Closes: #531157, LP: #411435) + + [ George Danchev ] + * cmdline/apt-cache.cc: + - fix a memory leak in the xvcg method (Closes: #511557) + * apt-pkg/indexcopy.cc: + - fix a memory leak then the Release file not exists (Closes: #511556) - -- Michael Vogt Wed, 19 Aug 2009 11:14:15 +0200 + -- Michael Vogt Thu, 27 Aug 2009 14:44:39 +0200 apt (0.7.22.2) unstable; urgency=low @@@ -207,7 -113,7 +214,7 @@@ apt (0.7.22) unstable; urgency=lo (off by default) - send "dpkg-exec" message on the status fd when dpkg is run - provide DPkg::Chroot-Directory config option (useful for testing) - - fix potential hang when in a backgroud process group + - fix potential hang when in a background process group * apt-pkg/algorithms.cc: - consider recommends when making the scores for the problem resolver @@@ -236,7 -142,7 +243,7 @@@ * apt-pkg/deb/debsystem.cc: - make strings i18n able * fix problematic use of tolower() when calculating the version - hash by using locale independant tolower_ascii() function. + hash by using locale independent tolower_ascii() function. Thanks to M. Vefa Bicakci (LP: #80248) * build fixes for g++-4.4 * cmdline/apt-mark: