6,609
edits
(→Diffs binaires: Translated the warning.) |
(→Diffs binaires: Translated the section.) |
||
| Line 546: | Line 546: | ||
{{warning|Une mauvaise valeur ou l'absence de la propriété de mime-type sur un fichier binaire provoquera un diff binaire.}} | {{warning|Une mauvaise valeur ou l'absence de la propriété de mime-type sur un fichier binaire provoquera un diff binaire.}} | ||
En regardant le résultat de <code>svn diff</code> (ou <code>git diff</code>, si vous utilisez git-svn) et en lisant les messages de la [[#Liste de diffusion FGAddon commitlogs|liste de diffusion FGAddon commitlogs]], parfois vous verrez un grand nombre de caractères non identifiables. Ceci est un diff binaire, le résultat de montrer les différences entre les fichiers binaires comme si ils était des fichiers de texte. Bien que ce ne soit pas un problème pour le fonctionnement du dépôt, la situation n'est pas idéal et fait que ce soit plus difficiles d'effectuer un examen des changements. | |||
Pour résoudre le problème, d'abord les fichiers binaires avec la propriété de <code>svn:mime-type</code> problématique doivent être identifiés. La commande Subversion suivante peut être utilisée: | |||
<syntaxhighlight lang="bash"> | |||
svn propget svn:mime-type <nom_de_fichier> | |||
</syntaxhighlight> | |||
Parce que cette tâche de vérifier chaque fichier peut être fastidieux, le script Python suivant simplifie et automatise la procédure pour identifier tout fichiers binaires avec un problème de mime-type: | |||
{{collapsible script | |||
| type = Script Python 2/3 | |||
| title = Trouver tout fichiers binaires sans un propriété de <code>svn:mime-type</code>, ou avec une mauvaise valeur. | |||
| intro = Le script suivant est basé sur des listes noires de fichiers de texte. Ainsi des faux positifs devraient être attendus, et les listes noires peuvent être élargies comme nécessaire. | |||
| lang = python | |||
| script = | |||
#! /usr/bin/env python | |||
from os import getcwd, walk | |||
from os.path import join, splitext | |||
from re import search | |||
from subprocess import PIPE, Popen | |||
skip_txt_file_seg = [ | |||
'authors', | |||
'copying', | |||
'licen', | |||
'readme' | |||
] | |||
skip_txt_ext = [ | |||
'ac', | |||
'css', | |||
'dat', | |||
'eff', | |||
'frag', | |||
'html', | |||
'json', | |||
'log', | |||
'nas', | |||
'osgx', | |||
'svg', | |||
'tex', | |||
'txt', | |||
'vert', | |||
'xhtml', | |||
'xml', | |||
'xsl' | |||
] | |||
skip_bin_prop = [ | |||
'application/octet-stream', | |||
'application/pdf', | |||
'application/postscript', | |||
'application/x-dosexec', | |||
'application/x-gzip', | |||
'application/zip', | |||
'audio/x-wav', | |||
'image/gif', | |||
'image/jpeg', | |||
'image/png', | |||
'image/vnd.adobe.photoshop', | |||
'image/tiff', | |||
'image/x-ms-bmp', | |||
'image/x-xcf', | |||
] | |||
# Walk through the directories. | |||
for root, dirs, files in walk(getcwd()): | |||
# Loop over the files in the current directory. | |||
for file in files: | |||
# Skip known text files. | |||
skip = False | |||
for i in range(len(skip_txt_file_seg)): | |||
if search(skip_txt_file_seg[i], file.lower()): | |||
skip = True | |||
if skip: | |||
continue | |||
# The file extension. | |||
file_path, ext = splitext(file) | |||
ext = ext[1:].lower() | |||
# Skip known text file extensions. | |||
if ext in skip_txt_ext: | |||
continue | |||
# The full file path. | |||
path = join(root, file) | |||
# Query the file for svn:mime-type. | |||
cmd = 'svn propget svn:mime-type \"%s\"' % path | |||
pipe = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=False) | |||
props = [] | |||
for line in pipe.stdout.readlines(): | |||
props.append(line.strip()) | |||
# Byte array conversion (Python3). | |||
for i in range(len(props)): | |||
if hasattr(props[i], 'decode'): | |||
props[i] = props[i].decode() | |||
# Skip binary svn:mime-type values. | |||
if len(props) and props[0] in skip_bin_prop: | |||
continue | |||
# Printout. | |||
if not len(props): | |||
print("%s" % path) | |||
else: | |||
print("%s svn:mime-type=%s" % (path, props[0])) | |||
}} | |||
==== Régler le problème ==== | ==== Régler le problème ==== | ||