Come fare un gancio di pre-commit che codifiche impedisce non UTF-8 file
-
01-10-2019 - |
Domanda
E 'possibile fare un gancio precommit per git o svn che può rifiutare i file non impegnati in una codifica specifica?
Ho lavorato su diversi progetti in cui sembra essere un problema di attenersi a un certo file di codifica (come UTF-8 per esempio)
Soluzione
Il iconv può essere in grado di dirvi se qualcosa non è UTF-8, ma altre codifiche potrebbero non essere così facile (soprattutto a 8 bit, codifiche a singolo byte come ISO-8859-1) .
Per Git, si può effettivamente desiderare un gancio aggiornamento al posto di un gancio di pre-commit (in modo che possa essere eseguito in un repository centrale per far rispettare la regola).
Git pre-commit hook:
#!/bin/sh
git ls-files -z -- |
xargs -0 sh -c '
e=""
for f; do
if ! git show :"$f" |
iconv -f UTF-8 -t UTF-8 >/dev/null 2>&1; then
e=1
echo "Not UTF-8: $f"
#exit 255 # to abort after first non-UTF-8 file
fi
done
test -z "$e"
' -
Mettere uno o più pathspecs Git dopo la --
sulle git LS-files riga di comando per limitare i percorsi che vengono controllati.
Per controllare la punta del ref aggiornata in un gancio di aggiornamento, l'uso git ls-tree --name-only -r -z $3 -- |
per generare i percorsi (nota: non gestisce pathspecs modello come git LS-files , in modo da effettuare una base di pattern- filtraggio nel codice shell) e git show "$3:$f"
per estrarre il contenuto del file. Si potrebbe anche voler controllare non solo la punta commettere, ma ogni nuovo commit (anello per ogni impegnarsi in git rev-list ^$2 $3
invece di $3
).
Altri suggerimenti
precommit ganci sono solo gli script. Quindi, se si può dire la codifica in uno script, quindi è possibile utilizzare queste informazioni per respingere il tipo sbagliato di file.
Si potrebbe cercare il file per i caratteri al di fuori del range normale carattere. Se c'è un numero magico o di un tag a dire la codifica di un file, è possibile verificare che. In caso contrario, chiedere a te stesso "come faccio a sapere questo file è nella codifica non va?" Can si codice che fino? ??
Si potrebbe forse usare iconv programma di utilità per modificare la codifica da UTF-8 a, per esempio UTF-16. E se il cambiamento non riesce, il file di origine non è in codifica corretta:
$ iconv -f UTF-8 -t UTF-16 Strings.java
ÿþ
testing = iconv: illegal input sequence at position 11