# Applications Vitis

## 1. Subtrees

### 1.1. Définition

Les applications Vitis sont des ensemble de modules composés potentiellement eux mêmes de SQL, Backend et Frontend, chaque application ainsi que chaque module doivent être versionnés, tagués et mis à jour en permanence, comme vous pouvez l'imaginer tout ceci rend l'opération particulièrement difficile à versionner.

Pour faire ceci le plus simplement possible, nous utiliserons des [subtrees](https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree), un subtree est clairement un dépôt contenu dans un dépôt mais en gardant un certain lien :

* Quand dans Repo1 on crée le subtree de Repo2 une copie des fichiers de Repo2 est effectuée dans Repo1
* Si on commite sur Repo2 les modifications ne sont pas impliquées directement dans Repo1, il faudra utiliser pull_subtrees.sh sur Repo1 pour se faire.
* Si on comite sur Repo1 les modifications ne sont pas impliquées directement dans Repo2, il faudra utiliser push_subtrees.sh sur Repo1 pour se faire.

![subtree](images/subtrees_1.png)

### 1.2. Subtrees dans les applications

Plusieurs fichiers utilitaires sont disponibles sur les applications pour agir sur les subtrees :
- **pull_subtrees.sh** : permet de mettre à jour l'ensemble des subtrees
- **push_subtrees.sh** : fait un push sur chacun des subtrees pour affecter les modifications sur les dépôts de modules correspondants
- **utils/init_subtrees.sh** : permet de créer l'ensemble des subtrees dans le dossier src/ de l'application

L'ensemble des dépendances sont définies sur le fichier **conf/\_install/dependency.xml**.

![subtree](images/subtrees_3.jpg)

Pour éviter les conflits il est préférable de câbler les applications sur des branches, ainsi l'application vMap qui contient vitis utilisera les branches **app_vmap** et **next_app_vmap** utilisées respectivement sur les branches master et next_version de l'application.

![subtree](images/subtrees_2.png)

Quand on crée une branche pour effectuer un correctif ou une évolution pas besoin de s'inquiéter à propos des subtrees : comme il s'agit d'une copie des fichiers les modifications feront partie du merge et seront rapatriés sur master ou next_version.

L'utilisation de **pull_subtrees.sh** et **push_subtrees.sh** se fera uniquement depuis les branches **master** et **next_version**.

## 2. Installation locale

Pour utiliser une application versionnée localement, il faudra l'installer car l'architecture proposée avec les dépendances dans le dossier src/ ne convient pas, pour ce faire nous utiliserons des liens symboliques sur linux et des copies de fichiers sous windows.

Pour créer ces liens de manière automatique on peut utiliser la procédure suivante :

1. Installer l'application avec un installeur VAI de manière à mettre en place properties et autres services en fonction des paramètres de votre machine.
2. Cloner l'application puis lancer insall.sh, ce dernier vous demandera le chemin vers une applicaiton déjà installée sur la machine de manière à copier properties et autres services paramétrés précédemment.
3. Placer l'application clonée au même endroit que l'application précédement installée avec VAI.

Une fois ceci fait les dossiers client/ et vas/ seront créés et vous pourrez modifier directement les fichiers dans le dossier src/ ou directement dans client/ et vas/.

Sur **windows** les liens symboliques ne permettent pas leur utilisation dans ce contexte, il faudra donc éditer dans **src/** puis lancer **update.bat** pour appliquer les modifications.