git: annule les modifications spécifiques de la collection de postiers modifiée par programmation
Je travaille avec des collections de postiers dans git. Postman fait beaucoup de choses bien, mais la régénération d'identifiant qui se produit lorsque vous importez n'est pas idéale.
L'importation d'une collection de facteur et son exportation à nouveau entraînent une modification pour chaque id
par exemple, sortie de git diff-index -p HEAD --
@@ -2404,7 +2412,7 @@
{
"listen": "test",
"script": {
- "id": "60ff37a6-9bf7-4cb4-b142-2da49ff4b86e",
+ "id": "38c15d28-8382-4eaf-ad17-f053c143212d",
"exec": [
"pm.test(\"Status code is 200\", function () {",
" pm.response.to.have.status(200);",
Je veux passer en revue les modifications dans le fichier et annuler toutes les modifications d'identifiant, mais conserver toutes les autres.
Essentiellement, je veux automatiser l'exécution de la git add -p {my_postman.collection.json}réponse nà chaque ligne avec un changement d'id.
Je peux voir cette commande Git pour ajouter par programme une plage de lignes d'un fichier à l'index? va dans le bon sens et Make git supprime automatiquement les espaces de fin avant de valider également
Réponses
Je suggérerais d'écrire un script, par exemple restore-existing-ids.sh, qui automatiserait la restauration des identifiants dans votre fichier sur le disque.
Ce serait plus simple à écrire qu'un programme qui doit simuler un va-et-vient interactif avec git,
et vous pouvez toujours l'utiliser dans un alias:
add-postman = '! f () { bash restore-existing-ids.sh "$1" && git add "$1"; }; f'
pour "nettoyer" un tel fichier avant de l'ajouter.
note : j'ai laissé entendre que ce script devrait être un bashscript, il peut évidemment être écrit dans n'importe quel langage (python, ruby, node ... tout ce qui fait flotter votre bateau)
C'est ma solution basée sur les suggestions de @LeGEC, mises ici pour les autres qui viennent à la recherche d'une solution réelle.
#!/usr/bin/env bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then if [ $1 == "--help" ]; then
echo "Replaces UUIDs in *.postman_collection.json exported files with 00000000-0000-0000-0000-000000000000"
exit 0
else
if [ "${1: -24}" == ".postman_collection.json" ]; then echo "Removing IDs from $1"
# stat -c %y "$1" # show last modified time # format: 60ff37a6-9bf7-4cb4-b142-2da499f4b86e # 00000000-0000-0000-0000-000000000000 # 12345678-1234-1234-1234-123456789012 sed -i -r 's/"(_postman_id|id)": "([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})"/"\1": "00000000-0000-0000-0000-000000000000"/gm' "$1"
else
echo "Your file MUST end on .postman_collection.json or else it will not be parsed! \"$1\" is not valid"
exit 1
fi
fi
fi
L' .git/hooks/pre-commitinconvénient de cette approche est que les hooks ne font pas partie du référentiel. J'ai téléchargé ces scripts sur github
essayer de comprendre comment cela fonctionne en étudiant cette réponse: Comportement inattendu avec "git commit". lorsque le hook de pré-validation modifie les fichiers intermédiaires
#!/usr/bin/env bash
#get the changed files
files=`git diff --cached --name-status | awk '$1 != "D" { print $2 }'` #set changed flag to false CHANGED=false for filename in $files; do
if [ "${filename: -24}" == ".postman_collection.json" ]; then sed -i -r 's/"(_postman_id|id)": "([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})"/"\1": "00000000-0000-0000-0000-000000000000"/gm' "$filename"
git add $filename # mark changed flag true CHANGED=true fi done # if files have been changed (potentially) display a message and abort the commit if $CHANGED; then
echo "PRE-COMMIT: Postman collection found. UUIDs have been sanitized. Please verify and recommit"
exit 1
fi