summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
Commit message (Collapse)AuthorAgeFilesLines
* apt: push to emplace C++11 if possibleHerman Semenoff2026-04-081-8/+8
| | | | | | References: - https://www.reddit.com/r/cpp_questions/comments/pm63yx/why_clangtidy_says_use_emplace_back_instead_of/ - https://clang.llvm.org/extra/clang-tidy/checks/modernize/use-emplace.html
* apt: funcs called with a string literal consisting of a single characterHerman Semenoff2026-04-082-3/+3
| | | | | | | | Benchmark: - https://stackoverflow.com/questions/62058906/why-my-performance-benchmark-gives-me-wrong-results References: - https://clang.llvm.org/extra/clang-tidy/checks/performance/prefer-single-char-overloads.html
* Prevent sleep while running dpkg.Nathan Pratta Teodosio2026-02-171-2/+9
| | | | | As long as we are running dpkg, keep an inhibitor that blocks us from sleeping.
* Implement architecture variantsJulian Andres Klode2025-10-253-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Architecture variants are children of an architecture that share the same ABI but are optimized for different ISA levels. They are available in Ubuntu 25.10 and newer, and not supported in Debian or other distributions. A deb built for a variant contains the Architecture-Variant field, and the Architecture field points to the baseline, for example: Architecture: amd64 Architecture-Variant: amd64v3 However, the apt-get indextargets command reports the variant in the Architecture: field, and most of the code in APT presents the variant as the architecture. There are two types of variants: 1. Standalone variants are recorded in the Architectures field of the Release file as if they were a real architecture: Architectures: amd64 amd64v3 Standalone architecture variants only fetch the standalone architecture variant's Packages file. To do this, this patch changes the code such that the variants indextargets "supplant" the base targets. This may have complicated outcomes on the apt-get indextargets command. 2. Other variants can only be identified by their files being recorded with hashes in the Release file. APT fetches both the base architecture's as well as the variant's Packages file. Variants are configured in the APT::Architecture-Variants list. Image builders may want to build specific variant images using APT::Architecture-Variants { "amd64v3"; } But this commit also implements an automatic discovery mechanism using the varianttable and /proc/cpuinfo. APT::Architecture-Variants "auto";
* debListParser: Cache `essential` and `myArch` moreJulian Andres Klode2025-08-262-13/+10
| | | | | | | | | | | | | | | | | | | Lookup these variables in the constructor once, rather than once per package. This requires a bit of care as debListParser::UsePackage() defaults to "all" for essential when unset, hence we simply change its == "all" comparisons to == "all" || .empty().# This removes any per-paragraph configuration lookups from the file parser. Also parse myArch from ParseProvides down to ParseDepends() as that call ended up causing it to query APT::Architecture *again* since the function we call is static. Together, the removed config lookups safe about 2.3% of cache generation runtime.
* Add 'Include'/'Exclude' options to limit packages used from a repositoryJulian Andres Klode2025-05-192-23/+48
| | | | | | | | | | | | | 'Include' allows limiting a repository to a allowlist of packages, 'Exclude' allows removing packages from a repository. Implementation wise this is not the nicest as it goes via the IndexTarget options, so we first parse our option value into a vector, then we turn the vector into a string, and then vectorize it again. That said, we support both "," and " " as separators due to the construction (we split by "," then we join using " "). Gbp-Dch: full
* Add missing #include <string_view>Julian Andres Klode2025-02-151-0/+1
|
* cache: Introduce partial SourceVersion supportJulian Andres Klode2025-02-151-4/+4
| | | | | | | | | | | | This is the first step that introduces a 1:1 mapping between version and source version. In a future version this can use the fields currently marked unavailable to deduplicate the SourceVersion objects across the group. The policy gains a member for storing pins for sourceversions. Together, in the future we should be able to determine candidates for source versions.
* string{=> _view} flNotDir(string{=> _view}). Configuration::{Cnd,}Set(Value: ↵наб2025-02-142-2/+4
| | | | string{=> _view})
* Return string_view from Apt::String::Strip(). Take string_view in ↵наб2025-02-141-1/+1
| | | | VectorizeString(), StringSplit(), SubstVar()
* Drop APT::StringViewнаб2025-02-142-28/+0
|
* APT::StringView -> std::string_view [textonly]наб2025-02-141-4/+4
|
* dpkg: Pass --admindir if a different one is specifiedJulian Andres Klode2025-02-071-0/+7
| | | | | | | Otherwise if we set e.g. Dir, we end up with the foreign architectures from the host which is wrong. Fixes: 8e6a86aa3bc6d5a9013bb42fccea9bbce3fd97e2
* Merge branch 'check-missing-dpkg-bin' into 'main'Julian Andres Klode2025-01-142-3/+11
|\ | | | | | | | | apt-pkg/deb/debsystem.cc: Fall back to "dpkg" when Dir::Bin::dpkg is not found See merge request apt-team/apt!419
| * apt-pkg/deb/debsystem.cc: Fall back to "dpkg" when Dir::Bin::dpkg is not foundBalint Reczey2024-12-302-3/+11
| | | | | | | | | | | | The custom dpkg binary may be removed by apt and that breaks the end of the operation. This can be observed when using eatmydata as dpkg and removing the symlink to eatmydata when removing the apt-eatmydata package.
* | Remove leftovers of the apt-key removalDavid Kalnischkies2025-01-051-1/+1
| | | | | | | | References: a00fbbdb28cc31e78882301c2efe7218583ab4cb
* | Drop APT_DEPRECATED usageDavid Kalnischkies2025-01-051-5/+6
| | | | | | | | | | | | | | | | C++14 includes the standard attribute, so we can use that instead. Note that we drop the deprecation of {Pkg,Dep}Iterator::operator<< as this is ignored (a friends declaration must be a definition to have attributes) very noisily by GCC >= 12 and the methods can be somewhat useful in debugging if you are to lazy to get APT::Pretty{Pkg,Dep}.
* | Drop APT_NORETURN usageDavid Kalnischkies2025-01-051-1/+1
| | | | | | | | | | [[noreturn]] is a C++11 feature and so we can just use it unconditionally.
* | Drop usage of macro APT_OVERRIDE for simple overrideDavid Kalnischkies2025-01-0511-166/+162
| | | | | | | | | | | | | | | | | | We were rather inconsistent in using it and as our public headers contain deduction guides (a c++17 feature) it seems silly to try to hide a c++11 feature in a macro, so lets stop this charade and drop the macro and while we are changing all these lines lets apply [[nodiscard]] (another c++17 feature) and other suggestions from clang-tidy and formatting for a little more consistency.
* | Ensure we can build with APT_PKG_ABI > 601Julian Andres Klode2025-01-052-2/+4
|/ | | | | There were some references to APT::StringView that don't make much sense anymore.
* Fix accidental ABI break in debListParser::ParseDependsJulian Andres Klode2024-11-282-0/+25
| | | | | The version that accepted APT::StringView was marked public.
* Add a --comment option to record Comment: in historyJulian Andres Klode2024-11-181-0/+2
| | | | Suggested-by: mhoye on IRC
* Merge branch 'reefer' into 'main'Julian Andres Klode2024-11-142-26/+18
|\ | | | | | | | | DEFER See merge request apt-team/apt!392
| * fdopen() failing does not close the fdнаб2024-11-141-0/+2
| |
| * DEFER() moreнаб2024-11-142-25/+13
| |
| * DEFERнаб2024-11-141-4/+6
| |
* | (+=)+= -> append().append()наб2024-11-142-3/+3
|/
* apt-pkg/deb/deblistparser.h: APT::StringView -> std::string_viewнаб2024-11-121-6/+5
|
* apt-pkg/deb/deblistparser.cc: APT::StringView -> std::string_viewнаб2024-11-121-30/+31
|
* apt-pkg/deb/debsrcrecords.h: APT::StringView -> std::string_viewнаб2024-11-121-7/+7
|
* apt-pkg/deb/debsrcrecords.cc: APT::StringView -> std::string_viewнаб2024-11-121-12/+12
|
* apt-pkg/pkgcachegen.cc, apt-pkg/pkgcachegen.h: APT::StringView -> ↵наб2024-11-122-37/+37
| | | | std::string_view
* apt-pkg/deb/debrecords.cc: prepare for APT::StringView -> std::string_viewнаб2024-11-121-20/+20
|
* apt-pkg/deb/debmetaindex.cc: prepare for APT::StringView -> std::string_viewнаб2024-11-121-7/+7
|
* apt-pkg/edsp/edsplistparser.cc: APT::StringView -> std::string_viewнаб2024-11-122-2/+2
|
* dpkgpm: fdopen() failing doesn't close the fdнаб2024-11-121-0/+3
|
* dpkgpm: append ":$printarchitecture" instead of ':'+${#printarchitecture} to ↵наб2024-11-121-1/+1
| | | | package name
* dpkgpm: use getline() for Apport var/crash linesнаб2024-11-121-18/+11
| | | | | Also remove useless condition: sscanf() already direct-matches non-whitespace bytes
* dpkgpm: use std::array<unsigned char, APT_BUFFER_SIZE> for I/O copy buffersнаб2024-11-121-7/+7
|
* dpkgpm: use sysconf(_SC_GETPW_R_SIZE_MAX)-sized + growing buffer for ↵наб2024-11-121-2/+7
| | | | getpwuid_r() instead of 255
* pkgDPkgPMPrivate::dpkgbuf: char[1024] -> array<char, APT_BUFFER_SIZE>наб2024-11-121-8/+8
|
* dpkgpm: lift out CopyIndented() and make_unique_*() for FILEs; use getline() ↵наб2024-11-121-48/+26
| | | | for reading lines instead of 1k buffer
* Do not return error if `Signed-By` value in source list is emptyAristo Chen2024-07-121-0/+2
| | | | Signed-off-by: Aristo Chen <aristo.chen@canonical.com>
* Deal better with spurious spaces in arch restrictionsDavid Kalnischkies2024-05-161-44/+41
| | | | | | | | Another instance of our parser written for sane clean input, but nowadays used also for user-provided input which can contain very many strange formatting and especially white spaces all over the place. Closes: #1071219
* Allow parsing an empty Provides lineDavid Kalnischkies2024-04-261-1/+1
| | | | | | | | | | | | | If dpkg-gencontrol was involved in the creation of a package we will not usually encounter empty or otherwise useless fields, but apparently not everyone is using it. It isn't recommended to have these empty lines, but it isn't too hard to ignore for Provides as we did for dependencies already and apt-ftparchive can be convinced to produce empty files (if you feed it such a package) as well, so lets be nice and provide users with a more accepting parser. Closes: #1069874
* Change the default log level from debug to noticeJulian Andres Klode2024-04-191-1/+1
| | | | | | | | | | We never used the debug level before, so we can do that. This allows us to have the new audit level. We did call DumpErrors() with DEBUG in two debug code paths, so don't touch those. debug
* Allow no spaces for the last dependency in ParseDepends, tooDavid Kalnischkies2024-04-171-1/+1
| | | | | | | | | | | | | | | | | | | | All other entries in a dependency line get substantial leeway about the amount of spaces surrounding the entry itself and its individual parts, but the very last entry was required to have a version constraint be at least 4 chars long (excluding opening bracket and spaces following it), so if the version is short and a single-char relation used a space had to make up for it. This is a bit unfair in comparison to the other entries who do not have such unreasonable demands, so we reduce our demand to 3 chars or longer, which is satisfied by "=1)". If it is a good idea to hate spaces that much remains unanswered by this commit, but in practice most tools (re)writing the files we parse will include spaces, so its only in files (or on the satisfy command line) directly edited by users that we can encounter such a situation, which is a relatively new development given this line came unchanged from the introduction of this method in 1998. LP: #2061834
* Revert "debrecords: Do not reparse if given same location"Julian Andres Klode2024-03-222-14/+3
| | | | This reverts commit 9bb953fddae0246a4dcedddb769d75d3521e1f2f.
* debrecords: Do not reparse if given same locationJulian Andres Klode2024-03-222-3/+14
| | | | | | | The TagFile parser will have already parsed further and can't go back so it needs to reopen the file if compressed. Closes: #1067440
* Parse unsupported != relation in dependenciesDavid Kalnischkies2024-03-071-1/+11
| | | | | | | | | | | | | | | | | libapt has a NotEquals relation for version constraints in dependencies, which is used internally e.g. in the MultiArch implementation, but this relation is not supported by Debian policy and as such can not be used in packages. Our parser here is extremely accepting, even unknown relations are parsed as Equals relation – but the version that must match will be a rather strange one… For our own testcases and e.g. on the command line with 'satisfy' it can make sense to have != available… and what strange things apt does parsing unsupported relations is not really much of a concern. Real packages will not have such relations anyhow as we are (mostly) just a consumer, not a producer of packages and index files.