cupt_functionselectors(1) syntax of functional selectors in cupt package manager

AIM

Functional selectors are used for fine-grained selection of versions. While standard mechanisms provide a way to select versions by package name, version string and/or distribution, functional selectors embed a microlanguage to select versions by their various properties.

SYNTAX

Functional selector expression (FSE) consists of function name and list of arguments:

'function_name(argument1, argument2, ... argumentN)'

Every argument can be a FSE itself or a string. Arguments are separated by the comma (,). Additional whitespace characters (space, tab, newline) are allowed (and ignored by parser) anywhere except between the function name and the opening bracket.

If the argument is a string and contains commas or round brackets, the argument should be quoted by placing the / character around it ('/argument/').

If the function receives no arguments, arguments bracked may be omitted: 'function_name' is an equivalent to 'function_name()'.

The expression 'argument1 & argument2 & ... & argumentN' is a special short form for 'and(argument1, argument2, ... argumentN)'. Similarly, the expression 'argument1 | argument2 | ... | argumentN' is a special short form for 'or(argument1, argument2, ... argumentN)'

FUNCTION REFERENCE

Logic functions

Receive FSEs as arguments.


 Function name and arguments^Argument count^Returns versions which...


 and(fse1fse2, ... fseN)^≥ 1^satisfy all of the fse1..fseN



 or(fse1fse2, ... fseN)^≥ 1^satisfy any of the fse1..fseN



 not(fse)^1^don't satisfy fse



 xor(fse1fse2)^2^satisfy either fse1 or fse2 but not both


Package property functions


 Function name and arguments^Short alias^Returns versions which...^Notes


 package:name(regex)^Pn^package name matches regex




 package:installed()^Pi^belong to to installed packages^applies only to binary versions




 package:automatically-installed()^Pai^belong to automatically installed packages^applies only to binary versions



Common version property functions

Apply to source and binary versions.


 Function name and arguments^Short alias^Returns versions which...


 version(regex)^v^version string matches regex



 maintainer(regex)^m^maintainer matches regex



 priority(regex)^p^priority matches regex



 section(regex)^s^section matches regex



 trusted()^t^come from at least one release with a valid cryptographic signature



 field(field_nameregex)^f^value¹ of the non-standard (not recognized by Cupt) field field_name matches regex


¹If the version does not contain a field field_name, its value is assumed being empty string; and it can still match if regular expression matches empty string.

release-related functions

Functions from this family receive one string argument (regex) and return versions which come from at least one release where property (see the following table) matches the regular expression regex.


 Function name^Short alias^Property


 release:archive^Ra^archive



 release:codename^Rn^codename



 release:component^Rc^component



 release:version^Rv^version



 release:vendor^Ro^vendor



 release:origin^Ru^origin (base URI)


Binary version property functions

Apply only to binary versions.


 Function name and arguments^Short alias^Returns versions which...


 source-package(regex)^sp^source package matches regex



 source-version(regex)^sv^source version string matches regex



 essential()^e^have 'Essential' flag set



 installed()^i^are installed in the system



 description(regex)^d^description matches regex



 provides(regex)^o^provides at least one virtual package which matches regex


Source version property functions

Apply only to source versions.


 Function name and arguments^Short alias^Returns versions which...


 uploaders(regex)^u^have at least one uploader which matches regex


Binary relation functions

Apply only to binary versions.

forward dependencies

Functions from this family receive one FSE-argument (fse) and return all versions which satisfy the dependency of type relation type for fse (see the following table).


 Function name^Short alias^Relation type


 pre-depends^Ypd^Pre-Depends



 depends^Yd^Depends



 recommends^Yr^Recommends



 suggests^Ys^Suggests



 enhances^Ye^Enhances



 conflicts^Yc^Conflicts



 breaks^Yb^Breaks



 replaces^Yrp^Replaces


reverse dependencies

Functions from this family receive one FSE-argument (fse) and return all versions for which at least one version from fse satisfies the dependency of type relation type (see the following table).


 Function name^Short alias^Relation type


 reverse-pre-depends^YRpd^Pre-Depends



 reverse-depends^YRd^Depends



 reverse-recommends^YRr^Recommends



 reverse-suggests^YRs^Suggests



 reverse-enhances^YRe^Enhances



 reverse-conflicts^YRc^Conflicts



 reverse-breaks^YRb^Breaks



 reverse-replaces^YRrp^Replaces


Source relation functions

forward dependencies

Apply only to source versions and return binary versions.

Functions from this family receive one FSE-argument (fse) and return all versions which satisfy the build-time dependency of type relation type for fse (see the following table).


 Function name^Short alias^Relation type


 build-depends^Zbd^Build-Depends



 build-depends-indep^Zbdi^Build-Depends-Indep



 build-conflicts^Zbc^Build-Conflicts



 build-conflicts-indep^Zbci^Build-Conflicts-Indep


reverse dependencies

Apply only to binary versions and return source versions.

Functions from this family receive one FSE-argument (fse) and return all versions for which at least one version from fse satisfies the build-dependency of type relation type (see the following table).


 Function name^Short alias^Relation type


 reverse-build-depends^ZRbd^Build-Depends



 reverse-build-depends-indep^ZRbdi^Build-Depends-Indep



 reverse-build-conflicts^ZRbc^Build-Conflicts



 reverse-build-conflicts-indep^ZRbci^Build-Conflicts-Indep


Metafunctions

defining functions

The function with defines a user function with no parameters which can be used as FSE-argument in the subexpression.

Syntax:

with(function_name, function_expression, subexpression)


 Argument^Meaning


 function_name^user-defined function name, must start with an underscore (_)


 function_expression^FSE, function value


 subexpression^FSE which the defined function can be used in

This function returns the value of subexpression.

recursing

The function recursive defines a recursive transformation FSE.

Syntax:

recursive(subresult_function_name, initial_subresult, iterating_expression)


 Argument^Meaning


 subresult_function_name^user-defined function name, must start with an underscore (_)


 initial_subresult^FSE, initial value of subresult_function_name


 subexpression^FSE to compute on each recurse iteration, which subresult_function_name to be used in

The function works as follows:

1.
subresult_function_name defined as initial_subresult
2.
the value of iterating_expression is computed
3.
if this value is equal to subresult_function_name() its returned as function result
4.
subresult_function_name redefined as or(subresult_function_name, iterating_expression)
5.
go to step 2

mapping

The function fmap applies many functions to the same expression and combines their results.

The expression

fmap(fse, function_name_1, ..., function_name_N)

is equivalent to

or(function_name_1(fse), ..., function_name_N(fse))

Miscellaneous


 Function name and arguments^Value


 best(fse)^filters out those versions from fse for which there are another version of the same package and higher pin


 binary-to-source(binary_fse)^converts binary versions, selected by binary_fse, to their corresponding source versions


 source-to-binary(source_fse)^converts source versions, selected by source_fse, to lists of their corresponding binary versions