summaryrefslogtreecommitdiff
path: root/apt-pkg/policy.cc
Commit message (Collapse)AuthorAgeFilesLines
* Phase using source version to be binNMU-correctJulian Andres Klode2021-01-081-1/+1
| | | | | | | | | If we have different binNMU versions on different architectures, we don't want madness to ensue. This is a change from how update-manager does things, as Ubuntu does not have binNMUs, but I believe it's the right thing to do for a generic solution.
* Add support for Phased-Update-PercentageJulian Andres Klode2021-01-081-2/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | This adds support for Phased-Update-Percentage by pinning upgrades that are not to be installed down to 1. The output of policy has been changed to add the level of phasing, and documentation has been improved to document how phased updates work. The patch detects if it is running in a chroot, and if so, always includes phased updates, restoring classic apt behavior to avoid behavioral changes on buildd chroots. Various options are added to control this all: * APT::Get::{Always,Never}-Include-Phased-Updates and their legacy update-manager equivalents to always or never include phased updates * APT::Machine-ID can be set to a UUID string to have all machines in a fleet phase the same * Dir::Etc::Machine-ID is weird in that it's default is sort of like ../machine-id, but not really, as ../machine-id would look up $PWD/../machine-id and not relative to Dir::Etc; but it allows you to override the path to machine-id (as opposed to the value) * Dir::Bin::ischroot is the path to the ischroot(1) binary which is used to detect whether we are running in a chroot.
* Avoid -Wuseless-cast to intDavid Kalnischkies2020-04-261-2/+2
| | | | | Reported-By: gcc -Wuseless-cast Gbp-Dch: Ignore
* Merge branch 'pu/source-version' into 'master'Julian Andres Klode2020-02-181-14/+43
|\ | | | | | | | | ABI BREAK: Implement pinning by source package See merge request apt-team/apt!96
| * policy: Implement pinning by source packageJulian Andres Klode2020-01-171-14/+43
| | | | | | | | | | | | | | | | | | This implements the src: syntax inside policy, allowing you to pin by source package. This by default only pins the native architecuture, use src:pkg:any to pin for all architectures in your cache. Closes: #166032
* | Revert "Add a Packages-Require-Authorization Release file field"Julian Andres Klode2020-02-161-4/+0
| | | | | | | | | | | | | | | | This experiment did not turn out sensibly, as some servers do not accept credentials when none are expected and fail, so you cannot mirror such a repository. This reverts commit c2b9b0489538fed4770515bd8853a960b13a2618.
* | policy: Add SetPriority() methodsJulian Andres Klode2020-02-161-0/+15
|/ | | | | These allow overriding priorities, however, pins set by SetPriority for package files will be overriden by calls to InitDefaults().
* policy: Get rid of Pins arrayJulian Andres Klode2019-06-141-18/+12
| | | | Gbp-Dch: ignore
* policy: Remove GetMatch and GetPriority(pkgIterator)Julian Andres Klode2019-06-141-20/+1
| | | | | These functions do not produce any useful results anymore, so it's pointless to keep them around.
* Add a Packages-Require-Authorization Release file fieldJulian Andres Klode2019-02-011-1/+5
| | | | | | | | | | | | | | | | | This new field allows a repository to declare that access to packages requires authorization. The current implementation will set the pin to -32768 if no authorization has been provided in the auth.conf(.d) files. This implementation is suboptimal in two aspects: (1) A repository should behave more like NotSource repositories (2) We only have the host name for the repository, we cannot use paths yet. - We can fix those after an ABI break. The code also adds a check to acquire-item.cc to not use the specified repository as a download source, mimicking NotSource.
* Introduce experimental 'never' pinning for sourcesJulian Andres Klode2019-02-011-3/+20
| | | | | | | | | | | | | | | | | | This allows disabling a repository by pinning it to 'never', which is internally translated to a value of -32768 (or whatever the minimum of short is). This overrides any other pin for that repository. It can be used to make sure certain sources are never used; for example, in unattended-upgrades. To prevent semantic changes to existing files, we substitute min + 1 for every pin-priority: <min>. This is a temporary solution, as we are waiting for an ABI break. To add pins with that value, the special Pin-Priority "never" may be used for now. It's unclear if that will persist, or if the interface will change eventually.
* Remove obsolete RCS keywordsGuillem Jover2018-05-071-1/+0
| | | | Prompted-by: Jakub Wilk <jwilk@debian.org>
* show warnings instead of errors if files are unreadableDavid Kalnischkies2017-07-261-3/+3
| | | | | | | | | | We used to fail on unreadable config/preferences/sources files, but at least for sources we didn't in the past and it seems harsh to refuse to work because of a single file, especially as the error messages are inconsistent and end up being silly (like suggesting to run apt update to fix the problem…). LP: #1701852
* use FileFd to parse all apt configuration filesDavid Kalnischkies2017-07-261-2/+5
| | | | | | Using different ways of opening files means we have different behaviour and error messages for them, so by the same for all we can have more uniformity for users and apt developers alike.
* Reformat and sort all includes with clang-formatJulian Andres Klode2017-07-121-11/+11
| | | | | | | | | | | | | This makes it easier to see which headers includes what. The changes were done by running git grep -l '#\s*include' \ | grep -E '.(cc|h)$' \ | xargs sed -i -E 's/(^\s*)#(\s*)include/\1#\2 include/' To modify all include lines by adding a space, and then running ./git-clang-format.sh.
* Drop cacheiterators.h includeJulian Andres Klode2017-07-121-1/+0
| | | | | Including cacheiterators.h before pkgcache.h fails because pkgcache.h depends on cacheiterators.h.
* avoid explicit types for pkg counts by autoDavid Kalnischkies2017-06-261-3/+5
| | | | | | | | | Changes nothing on the program front and as the datatypes are sufficently comparable fixes no bug either, but problems later on if we ever change the types of those and prevent us using types which are too large for the values we want to store waste (a tiny bit of) resources. Gbp-Dch: Ignore
* don't loop on pinning pkgs from absolute debs by regexDavid Kalnischkies2016-08-291-5/+4
| | | | | | | | | | | | | | | | | | | | | An absolute filename for a *.deb file starts with a /. A package with the name of the file is inserted in the cache which is provided by the "real" package for internal reasons. The pinning code detects a regex based wildcard by having the regex start with /. That is no problem as a / can not be included in a package name… expect that our virtual filename package can and does. We fix this two ways actually: First, a regex is only being considered a regex if it also ends with / (we don't support flags). That stops our problem with the virtual filename packages already, but to be sure we also do not enter the loop if matcher and package name are equal. It has to be noted that the creation of pins for virtual packages like the here effected filename packages is pointless as only versions can be pinned, but checking that a package is really purely virtual is too costly compared to just creating an unused pin. Closes: 835818
* if conf unset, don't read / as conf/pref/sources dirDavid Kalnischkies2016-06-291-2/+2
| | | | | | | | | | Usually these config options are set to sensible values, but if init isn't run or the user interferes with configuration clearing or similar the options could indeed carry an empty value, which will result in FindDir returning a '/'. That feels kinda wrong, but as a public interface there isn't much we can do about it and instead make it so that we get the special file /dev/null back we know how to deal with in such cases.
* fail instead of segfault on unreadable config filesDavid Kalnischkies2016-05-201-0/+5
| | | | | | | | | | | | | The report mentions "apt list --upgradable", but there are others which have inconsistent behavior ranging from segfaulting to doing something with the partial (and hence incomplete) data. We had a recent report about sources.list (#818628), this one mentions prefences, the obvious next step is conf files… so the testcase is adapted to check for all three in file and directory versions and run a bunch of commands each time which should all have more or less the same behavior in such a case (aka error out). Closes: 824503
* policy: Remove TODO for replacing old GetCandidateVer()Julian Andres Klode2016-04-251-1/+0
| | | | Gbp-Dch: ignore
* policy: Get rid of old (pre-1.1) GetCandidateVer algorithmJulian Andres Klode2016-04-251-97/+0
| | | | | Bye bye old friend. You're in one Ubuntu LTS release for compat testing, now we do not need you anymore.
* restore pinning to min/max value of shortDavid Kalnischkies2016-04-251-2/+3
| | | | | | | | Broken in the previous commit (69cea1ef2cfda3c4da79fd756a8edaf2be26998e). Adding a test and a comment to avoid future embarrassment. Git-Dch: Ignore Reported-By: Julian Andres Klode on IRC
* give rc-status packages a pin of -1David Kalnischkies2016-04-251-7/+6
| | | | | | | | | | | | It would previously return a pin of 0, which is an invalid value, but the intend is that versions which are only in the dpkg/status file can't be selected for installation (= can't be a candidate) which is what a negative pin assures. This helps with the communication to EDSP solvers as they neither know about the rc-state (yet) nor that they shouldn't choose this version. Ideally they shouldn't be told about such versions at all as there is nothing to be solved here, but we will get there eventually.
* properly parse comments in apt_preferences and deb822-style sourcesDavid Kalnischkies2016-01-021-2/+2
| | | | | | | | | | apt_preferences and deb822-style sources used the specialized class pkgUserTagSection to deal with comments before/after a given stanza, but it couldn't deal with comments in the stanza at all. codesearch suggests that nobody else does and a vastely superior way of working with potentially commented files is implemented now, so we can officially discourage the use of the old incomplete hack class.
* apply various suggestions made by cppcheckDavid Kalnischkies2015-11-051-2/+2
| | | | | Reported-By: cppcheck Git-Dch: Ignore
* provide public interface to hold/unhold packagesDavid Kalnischkies2015-11-041-2/+2
| | | | | | We had this code lying around in apt-mark for a while now, but other frontends need this (and similar) functionality as well, so its high time that we provide a public interface in libapt for this stuff.
* avoid using global PendingError to avoid failing too often too soonDavid Kalnischkies2015-09-141-3/+6
| | | | | | | | | | | | | | | | | | | Our error reporting is historically grown into some kind of mess. A while ago I implemented stacking for the global error which is used in this commit now to wrap calls to functions which do not report (all) errors via return, so that only failures in those calls cause a failure to propergate down the chain rather than failing if anything (potentially totally unrelated) has failed at some point in the past. This way we can avoid stopping the entire acquire process just because a single source produced an error for example. It also means that after the acquire process the cache is generated – even if the acquire process had failures – as we still have the old good data around we can and should generate a cache for (again). There are probably more instances of this hiding, but all these looked like the easiest to work with and fix with reasonable (aka net-positive) effects.
* implement autobit and pinning in EDSP solver 'apt'David Kalnischkies2015-09-141-1/+2
| | | | | | | | The parser creates a preferences as well as an extended states file based on the EDSP scenario file, which isn't the most efficient way of dealing with this as thes text files have to be parsed again by another layer of the code, but it needs the least changes and works good enough for now. The 'apt' solver is in the end just a test solver like dump.
* Re-indent GetCandidateVerNew() and make ConsiderFiles argument explicitJulian Andres Klode2015-08-201-7/+7
| | | | Gbp-Dch: ignore
* Fix all the wrong removals of includes that iwyu got wrongMichael Vogt2015-08-171-0/+1
| | | | Git-Dch: ignore
* Cleanup includes after running iwyuMichael Vogt2015-08-171-2/+0
|
* Add GetPriority(VerIterator) to pkgDepCache::PolicyJulian Andres Klode2015-08-151-2/+2
| | | | | | | Also unify the case of considerFiles and ConsiderFiles to be ConsiderFiles in all cases. Gbp-Dch: ignore
* Deprecate SPtrArray<T> and convert everyone to unique_ptr<T[]>Julian Andres Klode2015-08-131-2/+2
| | | | More standardization
* policy: Be more strict about parsing pin files, and document prio 0Julian Andres Klode2015-08-121-3/+10
| | | | | | Treat invalid pin priorities and overflows as an error. Closes: #429912
* Add a parameter ConsiderFiles to GetPriority(VerIterator)Julian Andres Klode2015-08-121-2/+3
| | | | | This allows us to exclude files from being considered for the priority, so it will return only specific-version matches.
* Simply ignore cruft in the status files, do not treat it as prio 0Julian Andres Klode2015-08-111-2/+1
| | | | This was broken in case all other sources were < 0.
* Replace INT_MIN with std::numeric_limits<int>::minJulian Andres Klode2015-08-111-2/+2
| | | | | | This should fix travis compilation errors. Gbp-Dch: ignore
* initialize PinVers to a nullptrDavid Kalnischkies2015-08-101-1/+2
| | | | | | This makes test-bug-254770-segfault-if-cache-not-buildable happy. Git-Dch: Ignore
* bring back deb822 sources.list entries as .sourcesDavid Kalnischkies2015-08-101-17/+2
| | | | | | | | | | | | | | | | | | Having two different formats in the same file is very dirty and causes external tools to fail hard trying to parse them. It is probably not a good idea for them to parse them in the first place, but they do and we shouldn't break them if there is a better way. So we solve this issue for now by giving our deb822 format a new filename extension ".sources" which unsupporting applications are likely to ignore an can begin gradually moving forward rather than waiting for the unknown applications to catch up. Currently and for the forseeable future apt is going to support both with the same feature set as documented in the manpage, with the longtime plan of adopting the 'new' format as default, but that is a long way to go and might get going more from having an easier time setting options than from us pushing it explicitely.
* make all d-pointer * const pointersDavid Kalnischkies2015-08-101-1/+1
| | | | | | | | | | | | | | Doing this disables the implicit copy assignment operator (among others) which would cause hovac if used on the classes as it would just copy the pointer, not the data the d-pointer points to. For most of the classes we don't need a copy assignment operator anyway and in many classes it was broken before as many contain a pointer of some sort. Only for our Cacheset Container interfaces we define an explicit copy assignment operator which could later be implemented to copy the data from one d-pointer to the other if we need it. Git-Dch: Ignore
* policy: Fix the handling of config-files statesJulian Andres Klode2015-08-101-3/+12
| | | | Gbp-Dch: ignore
* policy: Fix the new policy implementation to handle downgrades correctlyJulian Andres Klode2015-08-101-9/+8
| | | | | This was broken previously, as we'd choose a downgrade when it's pin was higher than the previously selected candidate.
* Determine the candidate based on per-version pins, instead of old codeJulian Andres Klode2015-08-101-0/+36
| | | | | | | | | | | The new implementation assigns each version a pin, instead of assigning the pin to a package. This enables us to give each version of a package a different priority. Closes: #770017 Closes: #622237 Closes: #620249 Closes: #685215
* policy: Return highest file pin if version pin == 0 in GetPriority()Julian Andres Klode2015-08-101-1/+10
| | | | | This makes sure that we display a useful value instead of 0 for versions that are pinned due to package files.
* policy: Assign per-version pinsJulian Andres Klode2015-08-101-0/+11
|
* pkgPolicy: Introduce storage and helpers for per-version pinsJulian Andres Klode2015-08-101-1/+10
| | | | | Per-version pins should lead to more predictable results with /etc/apt/preferences uses like pinning one version with -1.
* add d-pointer, virtual destructors and de-inline de/constructorsDavid Kalnischkies2015-06-161-0/+2
| | | | | | | | To have a chance to keep the ABI for a while we need all three to team up. One of them missing and we might loose, so ensuring that they are available is a very tedious but needed task once in a while. Git-Dch: Ignore
* store Release files data in the CacheDavid Kalnischkies2015-06-121-8/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | We used to read the Release file for each Packages file and store the data in the PackageFile struct even through potentially many Packages (and Translation-*) files could use the same data. The point of the exercise isn't the duplicated data through. Having the Release files as first-class citizens in the Cache allows us to properly track their state as well as allows us to use the information also for files which aren't in the cache, but where we know to which Release file they belong (Sources are an example for this). This modifies the pkgCache structs, especially the PackagesFile struct which depending on how libapt users access the data in these structs can mean huge breakage or no visible change. As a single data point: aptitude seems to be fine with this. Even if there is breakage it is trivial to fix in a backportable way while avoiding breakage for everyone would be a huge pain for us. Note that not all PackageFile structs have a corresponding ReleaseFile. In particular the dpkg/status file as well as *.deb files have not. As these have only a Archive property need, the Component property takes over this duty and the ReleaseFile remains zero. This is also the reason why it isn't needed nor particularily recommended to change from PackagesFile to ReleaseFile blindly. Sticking with the earlier is usually the better option.
* remove unused and strange default-value for pinsDavid Kalnischkies2015-05-111-24/+10
| | | | | | | | | If the pin for a generic pin is 0, it get a value by strange looking rules, if the pin is specific the rules are at least not strange, but the value 989 is a magic number without any direct meaning… but both never happens in practice as the parsing skips such entries with a warning, so there always is a priority != 0 and the code therefore never used.