Tengo este script bash en mi directory de proyectos llamado shrinkwrap.sh:
update_package_json_changed_files() { echo "> changed files" git diff --cached --name-only | grep -x package.json } update_shrinkwrap_and_at_to_git_index() { echo "> Updating npm-shrinkwrap.json and adding to current commit." npm shrinkwrap git add npm-shrinkwrap.json } if get_package_json_changed_files; then update_shrinkwrap_and_at_to_git_index fi
y estoy ejecutando este script en package.json como el siguiente:
"scripts": { "shrinkwrap": "bin/shrinkwrap.sh" }
e instalé npm pre-commit para ejecutar el script de la siguiente manera:
"pre-commit": ["shrinkwrap"]
cuando bash comprometer, el script entra en un bucle infinte. Sigue corriendo, y nada puede detenerlo. Intenté command + C, control + Z. Nada funcionó. ¿Alguien se encontró con este problema antes? ¿por qué está sucediendo eso?
Es posible que se active en el cambio de file y proceda a cambiar al less un file, lo que a su vez lo activa (en el cambio de file), lo que hace que cambie un file, que … y así sucesivamente.
Una forma habitual de romper eso es generar un file de indicador (touch / tmp / in_progress) y llamar a update_shrinkwrap_and_at_to_git_index()
solo si ese file no existe.
Si existe, elimínelo (pero no haga nada más)
Asi que:
update_shrinkwrap_and_at_to_git_index()
a touch /tmp/in_progress
y if get_package_json_changed_files;
agregue un if [ -e /tmp/in_progress ]; then rm /tmp/in_progress; exit 0; fi
if [ -e /tmp/in_progress ]; then rm /tmp/in_progress; exit 0; fi
El OP Max Doung comenta:
npm shrinkwarp
sudo
anpm shrinkwarp
, y detuvo el ciclo. Cuando lo saco, el ciclo comienza de nuevo. ¿Preguntándome por qué?
Eso sugiere que el enganche es desencadenado por una configuration local del usuario (una en ~/.gitconfig
por ejemplo)
Ejecutar el command con una count diferente (aquí, root
, a través de sudo
) evitaría usar dicha configuration global específica de la count de usuario.