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)

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top