-
Notifications
You must be signed in to change notification settings - Fork 16
/
patch.cli.txt
201 lines (185 loc) · 12.4 KB
/
patch.cli.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
PATCH
patch [FILE] [PATCH] #Patche FILE avec PATCH.
#Si FILE n'est pas spécifié, il est trouvée grâce au
#contenu de PATCH.
#Si pas de PATCH, stdin.
#Si un seul fichier, il sera considéré comme FILE et
#non PATCH : ainsi pour ne spécifier que PATCH et non
#FILE, il faut rediriger stdin (par exemple patch <
#PATCH)
#PATCH est l'output d'un diff --normal, -e, -U ou -C.
#-C0 semble échouer.
TROUVER FILE DANS #Si FILE n'est pas spécifié, le fichier à patcher est
PATCH ==> #alors trouvé dans PATCH :
# 1) dans un diff -U ou -C, avec le header du diff.
# Le fichier patché sera le FILE1 du diff.
# 2) sinon, si une ligne contenant "Index: " se trouve
# avant le diff, le fichier qui suit "Index: " sera
# le fichier. Dans ce cas, si une autre ligne
# contient "Prereq: ", le mot qui suit devra être
# présent dans le contenu de FILE (en général un
# numéro de version), sinon une confirmation sera
# demandée
# 3) sinon demande parfois à l'user quel est le FILE
#Dans les deux premiers cas, le fichier utilisé sera
#DIRR/$(basename FILE), où DIRR est par défaut le
#répertoire courant
#Si le FILE finalement désigné n'existe pas, il est
#créé, et patch traite alors ce fichier vide créé.
GARBAGE ==> #Tout ce qui ne fait pas partie de la syntaxe d'un diff
#-C, -U, --normal ou -e avant ou après un diff, ainsi
#que les indentations et les commentaires (avec #) est
#considéré comme du "garbage" et ignoré. Ainsi, un patch
#vide ou syntaxiquement incorrect renverra une erreur de
#"leading garbage" (notamment s'il ne parvient pas à
#trouver le FILE à patcher)
RECHERCHE DES ENDROITS #Chaque différence trouvée est traitée ainsi :
OU PATCHER ==> # 1) Les différences sont traitées à la ligne indiquée
# dans le diff, en prenant en compte le contexte
# pour un diff -C ou -U (ce qui est une garantie
# d'appliquer le patch au bon endroit)
# 2) Si la ligne est mauvaise, cheche la différence
# indiquée dans tout le fichier.
# 3) S'il ne la trouve pas, retire la première et la
# dernière ligne du contexte (si -C ou -U), et
# recherche à nouveau. Répète cette action FUZZ
# fois (défaut 2).
# 4) S'il ne trouve toujours pas, crée un diff file
# DIRR/$(basename FILE).rej, indiquant les
# différences n'ayant pas pu être appliquées
#Des messages d'erreur sont imprimées à partir de
#l'étape 2) : on parle de "patch mismatch".
PATCH DE REPERTOIRES #En cas de PATCH résultant d'un diff de répertoires,
==> #ce ne sont pas les fichiers manquant ou en trop qui
#seront ajoutés ou supprimés, mais les fichiers dont
#le nom est identique mais le contenu différent qui
#seront patchés, à condition :
# - que le diff soit un diff -U ou -C1 (ou plus)
# - et que les FILE indiqués dans les headers étant
# pris par défaut selon leur basename, DIRR doit être
# correct (être dans le bon répertoire ou utiliser -d
#Plusieurs diff concaténés marchent comme un seul patch,
#mais chaque diff doit bien spécifier son FILE avec -C,
#-U ou "Index: ".
-F NOMBRE
--fuzz=NOMBRE #FUZZ devient NOMBRE.
-d DIR #DIRR devient DIR. Peut être utiliser pour savoir dans
--directory=DIR #quel répertoire patcher.
-pNOMBRE #Plutôt que d'utiliser $(basename FILE), utiliser FILE,
--strip=NOMBRE #moins les NOMBRE répertoires parents les plus hauts.
#Le résultat est un chemin relatif, qui est donc placé
#devant DIRR/
-R #Inverse le patch : les ajouts deviennent des
--reverse #suppressions, les suppressions des ajouts, et les
#modifications sont inversées. Utile donc pour dépatcher
#un fichier qui vient d'être patché.
#Proposé automatiquement par patch (avec confirmation)
#si tentative de patch sur un fichier qui semble avoir
#déjà été patché. Une confirmation est aussi demandée si
#-R est utilisé alors qu'il ne semble pas devoir être
#utilisé.
#Cette option n'inverse pas le fichier sur lequel le
#patch a lieu : ainsi, si l'on a par erreur fait un
#diff en inversant FILE1 et FILE2, il faut modifier
#"Index: " ou les headers de -C ou -U puis faire -R
#pour corriger l'erreur
#Ne marche pas toujours avec un diff -e
-N #Si une confirmation de -R ou une proposition
--forward #d'utilisation de -R allait être effectuée, le patch est
#skippé (s'il est donc dans le mauvais sens, ou s'il
#s'applique sur un FILE déjà patché)
-o FICHIER #Plutôt que de patcher FILE, imprime le résultat du
--output=FICHIER #patch dans FICHIER. FICHIER peut être - pour stdout
-i PATCH #Syntaxe différente pour indiquer quel PATCH lire. Si
--input=PATCH #PATCH est -, désigne stdin
--dry-run #N'affiche que les messages de verbose et d'erreur que
#produirait le patch de FILE, mais ne patche en fait pas
#FILE
-b #Fait un backup de FILE avant de le patcher. Implique
--backup #par défaut -V "simple" -z ".orig"
-V STRING #Utilise la méthode de backup STRING : comme l'option
--version-control STRING#--backup de cp (voir doc), sauf que "simple" prend en
#compte les options suivantes
-B STRING #Avec -V "simple", ajoute STRING au début du chemin de
--prefix=STRING #FILE pour créer le backup
-Y STRING #Avec -V "simple", ajoute STRING au début du basename de
--basename-prefix=STRING#FILE pour créer le backup
-z STRING #Avec -V "simple", ajoute STRING à la fin de FILE pour
--suffix=STRING #créer le backup
--backup-if-mismatch #Fait une backup de FILE en cas de "file mismatch"
#(défaut). Par défaut : -V "simple" -z ".orig"
--no-backup-if-mismatch #Ne fait pas de backup de FILE si "file mismatch".
#Cependant, avec moi, il semble en faire tout de même,
#mais avec l'option -V "t"
-r FICHIER
--reject-file=FICHIER
--global-reject-file #Enregistre les rejets vers FICHIER pluôt que vers
=FICHIER #FILE.rej. --global-reject-file est déprécié
--reject-format=STRING #Les rejects files deviennent :
# - si STRING est "context", des diff -C
# - si STRING est "unified", des diff -U
#Le défaut est "context", sauf si le patch résulte d'un
#diff -U
-U
--unified-reject-files #Equivaut à --reject-format="unified". Déprécié
--merge #Plutôt que de produire des rejets, inclut les rejets
#dans FILE sous la forme :
# - <<<<<<<
# =======
# lignes n'ayant pas été incluses
# >>>>>>>
-E
--remove-empty-files #Si le patch vide FILE, FILE est alors supprimé
-c
--context #Considère toujours PATCH comme le résultat d'un diff -C
-n #Considère toujours PATCH comme le résultat d'un diff
--normal #--normal
-u
--unified #Considère toujours PATCH comme le résultat d'un diff -C
-e
--ed #Considère toujours PATCH comme le résultat d'un diff -e
-l #Lorsque PATCH indique des patterns à chercher dans FILE
--ignore-whitespace #(par exemple les lignes à supprimer, modifier, et leur
#contexte), toute séquence de blanks dans PATCH peut
#matcher toute séquence de blanks dans FILE (mais non
#une absence de blanks)
--quoting-style STRING #Modifie la manière d'imprimer des noms dans les
#messages imprimés par patch :
# - "literal" : n'échappe rien
# - "shell" : échappe le nom comme dans le shell
# - "shell-always" : échappe le nom comme dans le shell
# seulement s'il contient des caractères illégaux
# - "c" : échappe le nom comme en c
# - "escape" : comme c, mais sans les guillemets autour
-Z #Si PATCH résulte d'un diff -C ou -U, le mtime et le
--set-utc #atime de FILE deviennent le mtime de FILE2 tel que
#spécifié dans le diff (deuxième ligne du header), à
#condition que :
# - le mtime de FILE1 tel que spécifié dans le diff
# (première ligne du header) soit le même que le
# mtime de FILE
# - il y ait un patch mismatch
#Le header du patch doit être en temps utc.
-T
--set-time #Même chose, mais utilise le local time, et non utc
-f #Ne demande jamais l'avis de l'user :
--force # - plutôt que de demander quel fichier patcher, skip
# le diff
# - ne demande pas confirmation après un "Prereq: "
# problématique
# - ne demande pas si le patch devrait être reversed
# s'il en a l'air, et ne fait donc pas reverse
# - -Z et -T n'ont pas les deux conditions spécifiées
# pour être appliqués
-t #Même chose, sauf que dans le dernier cas, les patchs
--batch #sont reversed
-s
--silent
--quiet #Supprime la plupart des messages.
--binary #Les patches ne doivent pas avoir de newline CR + LF :
#les patches résultant d'un diff sous Windows sans
#l'option --strip-trailing-cr ont donc leurs newlines
#converties automatiquement en LF newlines en lecture.
#Cette option disable cela.