Поиск и версии

По-умолчанию шаблон соответствует пакету, если любая версия этого пакета соответствует шаблону. Тем не менее, некоторые шаблоны ограничивают свои подшаблоны так, чтобы последние соответствовали только некоторым версиям пакета. Например, поисковый термин ?depends(шаблон) выберет пакет, который зависит от пакета, соответствующего шаблону. Тем не менее, шаблон будет проверен только относительно тех версий пакета, которые фактически удовлетворяют зависимость. Это означает, что если foo зависит от bar (>= 3.0), и доступны версии 2.0, 3.0 и 4.0 bar, то в поисковом шаблоне ?depends(?version(2\.0)), только версии 3.0 и 4.0 будут проверены относительно шаблона ?version(2\.0), и следовательно foo не будет найден этим поиском.

Важно то, какие версии проверяются, поскольку некоторые шаблоны, как в примере выше, соответствуют одной версии, но не соответствуют другой. Например, шаблон ?installed соответствует только той версии пакета (если таковая имеется), которая установлена в текущий момент. Сходным образом, шаблон ?maintainer(сопровождающий) соответствует только тем версиям, сопровождающим которых является данный сопровождающий. Обычно все версии пакета имеют одного и того же сопровождающего, но это не всегда так; в действительности, любой поисковой шаблон, проверяющий поля пакета (конечно, отличные от его имени) будет вести себя таким образом, так как все поля пакета могут меняться в зависимости от версии.

Для того, чтобы проверить шаблон относительно всех версий пакета, даже если этот шаблон обычно проверялся бы только относительно некоторых версий, используйте термин ?widen. Например, ?depends(?widen(?version(2\.0))) выберет пакет A, который зависит от пакета B, где B имеет версию, соответствующую 2.0, независимо от того, удовлетворяет эта версия зависимость A или нет. С другой стороны, термин ?narrow ограничивает версии теми версиями, которые подходят под подшаблон: ?narrow(?installed, ?depends(?version(ubuntu))) выберет пакет, чья установленная версия имеет зависимость, которая может быть удовлетворена пакетом, чья строка версии содержит «ubuntu».

[Примечание]Примечание

Имеется незаметное, но очень важное различие между соответствием шаблона пакету и соответствием шаблона всем версиям этого пакета. Когда шаблон проверяется относительно пакета, каждый из его терминов проверяется относительно этого пакета, и поэтому каждый термин будет соответствовать этому пакету, если любая версия пакета ему соответствует. Когда же шаблон проверяется относительно каждой версии пакета, он будет соответствовать пакету только тогда, когда все его термины соответствуют одной и той же версии пакета одновременно.

Например: предположим, что установлена версия 3.0-1 пакета aardvark, но доступна версия 4.0-1. Тогда поисковое выражение ?version(4\.0-1)?installed соответствует пакету aardvark, так как ?version(4\.0-1) соответствует версии 4.0-1 aardvark, в то время как ?installed соответствует версии 3.0-1. С другой стороны, это выражение не соответствует всем версиям пакета aardvark, поскольку нет такой версии, которая бы была установлена и имела бы номер версии 4.0-1.