<p align="right">
<a href="../en/custom-update-actions.md">English description</a> | Описание на русском
</p>

# Пользовательские действия при обновлении проекта

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

Для того, чтобы выполнить кастомные действия необходимо в корне проекта (на уровне файла tars.json) создать файл custom-update-actions.json В этом файле будут описаны все дополнительные действия при обновлении проекта.

В общем виде, структура файлы должна выглядеть следующим образом (синтаксис — json):

```js
{
    "remove": [
        "путь до файла или папки для удаления",
        ...
    ],

    "copy": [
        {
            "from": "путь до файла или папки, которую необходимо копировать",
            "to": "путь до места, куда скопировать"
        },
        ...
    ],

    "rename": [
        {
            "from": "путь до файла или папки, которую необходимо переименовать",
            "to": "новое имя"
        },
        ...
    ]
}
```

Все пути указываются относительно текущего рабочего каталога. **Не используйте абсолютные пути!** Например, если вы хотите при обновлении удалить все страницы в папке markup, то конфиг должен выглядеть так:

```js
{
    "remove": [
        // Путь развернется примерно так (пример для OSX):
        // Users/%username%/project/%projectName%/markup/pages
        // Удалит папку pages в текущем проекте
        "/markup/pages"
    ]
}
```

При копировании файла необходимо указывать имя файла как в поле «from», так и в поле «to». Этоже касается и переименования. При этом копирование будет происходить из новой версии TARS в текущую (та, которая обновляется). Логично предположить, что вы захотите что-то скопировать именно из новой версии в текущую, а не наоборот. Переименование происходит только в рамках текущей версии.

```js
{
    "copy": [
        {   
            // Скопирует _template.html из новой версии в текущую
            "from": "/markup/pages/_template.html",
            "to": "/markup/pages/_template.html"
        }
    ],

    "rename": [
        {
            // Переименует _template.html в текущей версии в _index.html
            "from": "/markup/pages/_template.html",
            "to": "/markup/pages/_index.html"
        }
    ]
}
```

Все действия происходят последовательно, чтобы избежать возможных проблем с [race condition](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D0%BD%D0%BA%D0%B8).

**Важно корректно составить конфиг, так как проблемы с доступностью файлов могут повлиять на процесс обновления проекта.**

