Publié le :
Utilitaire Système CREATION_INTERNE

Macro mp_gitstatus : Récupération du statut d'un dépôt Git

Ce code est également disponible en : Deutsch English Español
En attente de validation
La macro utilise les fonctions SAS© natives d'interface Git (`git_status`, `git_status_get`) pour obtenir le nombre de fichiers modifiés dans un répertoire cible. Elle itère ensuite sur ces fichiers pour extraire leur chemin, leur état (staged) et leur statut (modifié, nouveau, supprimé), gérant également les cas d'erreur liés à la librairie libgit2.
Analyse des données

Type : CREATION_INTERNE


Les données sont générées directement par les appels aux fonctions système SAS Git à partir du chemin du répertoire fourni.

1 Bloc de code
DATA STEP Data
Explication :
Initialise la table de sortie, vérifie la disponibilité de Git via `git_status`, et boucle sur les fichiers détectés pour extraire leurs métadonnées via `git_status_get`.
Copié !
1DATA &outds;
2 LENGTH gitdir path $ 1024 STATUS $ 64 STAGED $ 32;
3 call missing (of _all_);
4 gitdir=symget('gitdir');
5 cnt=git_status(trim(gitdir));
6 IF cnt=-1 THEN DO;
7 put "The libgit2 library is unavailable...";
8 END;
9 ELSE IF cnt=-2 THEN DO;
10 put "The libgit2 library is available, but...";
11 END;
12 ELSE DO n=1 to cnt;
13 rc=GIT_STATUS_GET(n,gitdir,'PATH',path);
14 rc=GIT_STATUS_GET(n,gitdir,'STAGED',staged);
15 rc=GIT_STATUS_GET(n,gitdir,'STATUS',STATUS);
16 OUTPUT;
17 /* Debug log si activé */
18 END;
19 rc=git_status_free(trim(gitdir));
20 drop rc cnt;
21RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« L'intégration de la macro %mp_gitstatus marque une étape clé dans la modernisation des cycles de développement SAS. En utilisant les fonctions natives de l'interface libgit2, ce script permet de passer d'une gestion de fichiers manuelle à une véritable culture CI/CD (Intégration et Déploiement Continus). L'enjeu est ici d'automatiser le suivi des versions directement depuis l'étape DATA.

Les piliers techniques de cette intégration :
Interface Native Libgit2 : Contrairement à l'exécution de commandes système externes, l'utilisation de git_status et git_status_get assure une communication directe et sécurisée avec le moteur Git. Cela permet une gestion fine des erreurs (codes -1 ou -2) pour diagnostiquer les problèmes de configuration de la bibliothèque ou du dépôt.

Extraction Multidimensionnelle du Statut : La boucle d'itération transforme le flux binaire du dépôt en une table SAS structurée. Elle capture trois métadonnées critiques :

PATH : L'emplacement exact du fichier modifié.

STAGED : L'état de préparation pour le prochain commit.

STATUS : La nature de la modification (nouveau, modifié, supprimé).

Gestion de la Mémoire (git_status_free) : C'est une pratique d'excellence indispensable. La libération des ressources Git à la fin de l'étape DATA prévient les fuites de mémoire et les verrous (locks) sur l'index du dépôt, garantissant la stabilité de la session SAS lors d'exécutions répétées.

Audit et Transparence : En stockant ces informations dans un jeu de données (&outds), l'administrateur peut construire des tableaux de bord de suivi des développements ou bloquer l'exécution de processus si des fichiers critiques ne sont pas synchronisés avec le dépôt maître.

L'utilisation de cette macro est le point de départ idéal pour automatiser vos déploiements. En couplant ce statut avec une conditionnelle if staged='TRUE', vous pouvez déclencher automatiquement des git_commit et git_push à la fin de vos traitements critiques, assurant une sauvegarde systématique de votre logique métier. »