Conditions

Learn how to introduce even more complex logic for upload/download with conditions.

With conditions, you can introduce complex logic for processing files while they are uploaded / downloaded.

The example below shows different ways how you can use conditions:

{
  // ... other parts omitted for brevity ...
  "upload": {
    "type": "android",
    "files": [
  
      {
        // ...
        "conditions": "!~equals: ${path}, src"
      },

      {
        // ...
        "conditions": [
           "!~equals: ${path}, src",
           [
              "contains: ${path}, ab",
              "contains: ${path}, cd"
           ]   
        ]
      }

    ]
  }
}

Single condition

The simplest way to use a single condition is:

{
  // ...
  "conditions": "!~equals: ${path}, src"
}

Conditions with AND / OR

The full form of conditions is shown below.

{
  // ...
  "conditions": [
    "condition1",
    [
      "condition2.1",
      "condition2.2"
    ],
    [
      "condition3.1",
      "condition3.1"
    ]    
  ]
}

The example above is the same as this formula:

condition1 || (condition2.1 && condition2.2) || (condition3.1 && condition3.2)

Expressions

equals

equals: input, term1, term2, term3

Returns true if the input is equals to at least one of terms.

contains

contains: term, text

Returns true if the term is contained in the text.

containsWord

containsWord: term, text

Returns true if the term is contained in the text but only if it’s a whole word. The text is splitted by the spaces and each of the parts is tested against the term.

It’s useful for checking for existence of particular group or product flavor, etc.

empty

empty: text

Returns true if the text is blank (empty or whitespaces only).

startsWith

startsWith: term, text

Returns true if the text starts with the term.

endsWith

endsWith: term, text

Returns true if the text ends with the term.

Variables

Variables can be used as any of the parameters in the expression.

{
  // ...
  "conditions": "equals: ${path}, ${expectedPath}"
}

Negation

Prepend ! before the expression name to negate the output of the command.

Example:

!equals: term1, term2

Returns false if the term1 is equals to term2.

Case-sensitivity

By default, all operations are case-sensitive.

Prepend ~ before the expression name to switch to the case-insensitive mode.

Example:

~equals: term1, TERM2

Returns true if the term1 is equals to the term2. The check is case-insensitive.

Single line AND

If you need a condition with more expressions, you can use | character to join more expressions on a single line.

{
  // ...
  "conditions": "exp1 | exp2 | exp3"
}

The example above is the same as: exp1 && exp2 && exp3

Special characters

Some characters have a special meaning and so it’s necessary to replace them.

  • white-spaces are trimmed to prevent formatting issues, please use %space% instead
  • , is used as parameter separator, please use %comma% instead
  • $ is used for including variables, please use %dollar% instead
  • | is used for separating more command on a single line, please use %vbar% instead

Example:

For checking whether the ${path} is equal to the weird string ab,c (starts with space), please replace special characters like this:

{
  // ...
  "conditions": "equals: ${path}, %space%ab%comma%c"
}