2016-09-10 1 views
2
$ echo * 
a b c 
$ cat * 
file 1 
file 2 
file 3 
$ factor -e=" \ 
> USING: globs io sequences sorting io.files io.encodings.utf8 ; \ 
> \"*\" glob natural-sort [ utf8 file-lines ] map concat [ print ] each " 
file 1 
file 2 
file 3 

Les sorties sont les mêmes à l'aide du glob factor et du glob du shell. Un diff sur les sorties montre qu'elles correspondent exactement.Obtenir la même somme SHA-224 dans Factor que coreutils sha224sum

$ factor -e=" \ 
> USING: math.parser checksums checksums.sha globs io sequences sorting io.files io.encodings.utf8 ; \ 
> \"*\" glob natural-sort [ utf8 file-lines ] map concat sha-224 checksum-lines bytes>hex-string print " 

0feaf7d5c46b802404760778091ed1312ba82d4206b9f93c35570a1a 
$ cat * | sha224sum 
d1240479399e5a37f8e62e2935a7ac4b9352e41d6274067b27a36101 

Mais les checksums ne correspondent pas, ni ne md5 checksum. Pourquoi est-ce? Comment obtenir la même somme de contrôle dans Factor que dans coreutils sha224sum?

La modification du codage à ascii ne modifie pas la sortie, pas plus que "\n" join sha-224 checksum-bytes au lieu de checksum-lines.

+0

Vous ne manquez pas une "\ n" jointure de connexion? Je pense que le code factor est hashing le tableau du contenu du fichier 3 –

+0

nevermind, checksum-lines se joint à ascii 10, donc ce n'est pas ça:/ –

+0

Oh, c'est le retour chariot qui manque! Cela a été répondu dans la liste de diffusion, serait bien de donner une réponse ici aussi. –

Répondre

2

Ce comportement étrange est dû à un bogue dans checksum-lines. factor/factor#1708

Merci à jonenst pour trouver le problème et calsioro pour ce code sur la liste de diffusion du facteur:

Ce code:

[ 
    { "a" "b" "c" } 3 [1,b] 
    [ number>string "file " prepend [ write ] curry 
     ascii swap with-file-writer ] 2each 

    "*" glob natural-sort [ utf8 file-lines ] map concat 
    [ "\n" append ] map "" join ! Add newlines between and at the end 

    sha-224 checksum-bytes bytes>hex-string print 
] with-test-directory 

donne le même hachage:

d1240479399e5a37f8e62e2935a7ac4b9352e41d6274067b27a36101

+0

(En fait c'était John Harper qui a trouvé le problème ... le crédit devrait aller à lui, pas à moi) –

+1

@fedes. Mis à jour c: – cat

0

jonenst aussi pointed out que:

En outre, en ce qui concerne les trois longueurs différentes que vous obtenez, « exercism/auto-mise à jour/auto-update.factor » manque un « \ n » omble chevalier à la fin de la dernière ligne. C'est pourquoi vous obtenez des résultats surprenants.

Si vous essayez d'obtenir des fichiers de contrôle, assurez-vous qu'ils se terminent tous par une nouvelle ligne de fin.