---
# System prepended metadata

title: dsplus - git
tags: [dsplus, documentation]

---

---
tags: dsplus,documentation
title :  dsplus - git
description: Interface git
---

# Interface git

**Pour ces fonctionnalités le client git doit être installé sur le poste.**

L'outil permet d'être utilisé comme point d'entrée pour versionner les objets dans un repository local.

Dans un environnement de développement local, on développerait en local, validerait les modifications (commit) etc...

Dans ce cas, l'environnement étant un serveur distant, il s'agit de synchroniser avec un repository local.

Cette synchronisation se fera via la commande et l'option ```get --git```.
Cela aura pour effet d'ajouter à un index dans le repository certaines informations concernant l'objet (essentiellement son nom et sa date de dernière modification), permettant ainsi de détecter les modifications entre le repository local et le projet. Quant aux informations relatives aux objets elles sont aux choix toute celles permises par la commande ```get```

A noter que des raisons de sécurité il ne substitue pas à un workflow Git. Le reste des opérations concernant Git est donc à faire par l'utilisateur (add, commit, push etc...)


## Git custom subcommand

Il est possible d'étendre les commandes git avec des *customs subcommand*, ceci en plaçant un script nommé `git-[subcmd]` dans un chemin du `PATH`.
Cela permettra de scripter certaines opérations répétitives du workflow.

Dans les exemples plus bas on créé un script `git-ds` qui contient un certain nombre d'interfaces avec dsplus et qui pourra être appellé via la commande `git ds [options]`.

## Exemples

1. Status

La commande pour obtenir le statut d'un projet par rapport à un repository git est normalement `dsplus status`

En ajoutant la ligne ci-dessous dans le script `git-ds`:
```bash
[ "$1" == "status" ] && dsplus status --format table
```
On peut obtenir le même résultat (formaté) avec la commande `git ds status`

2. Checkout

Avec git, la commande `checkout` permet de basculer un fichier vers une autre révision. Il peut être pratique de pouvoir faire ce type d'opérations directement sur les jobs du projet.
En ajoutant cette ligne au script:
```bash
[ "$1" == "checkout" ] && git checkout $2 $3 && dsplus deploy --isx $3/*.isx && dsplus get -mg --job $(basename $3)
```
La commande `git ds checkout HEAD^1 Categorie/Job` va déployer la révision précédent du Job.

3. Diff

Une fonctionnalité essentielle de git est la capacité d'afficher les différences entre 2 révisions ou la version en cours de modification et la dernière révision. La nature de DataStage rend cela relativement complexe mais on peut exploiter la représentation syntaxique du job par dsplus:
```bash
diffds(){
    asset=$1
    path=$(dsplus get -mv --job $asset --query "category" --format json)
    [ ! -f ./$path/$asset/$asset.ast.json ] && echo "no code" && exit 1
    dsplus get --ast -v --job $asset --format json | git diff --no-index --  ./$path/$asset/$asset.ast.json -
}
[ "$1" == "diff" ] && diffds $2
```

La commande `git ds diff Job` effectuera ainsi la différence entre entre l'ast de la dernière révision et celui du job en cours de modification.


## Configuration
Il est possible de spécifier la configuration au niveau d'un repository git. Chaque option de la ligne de commande ou du fichier de configuration peut ainsi être indiquer via la configuration git. L'outil les prendra en compte si on se positionne dans le repository.
Chaque option doit être préfixée par <code>dsplus.</code>

Par exemple:
```bash
git config dsplus.project dstage1
```
Par cette commande, le repository est connecté au projet dstage1 et il n'est plus nécessaire de l'indiquer à l'exécution.