-
Notifications
You must be signed in to change notification settings - Fork 0
/
changewar.man
221 lines (221 loc) · 7.85 KB
/
changewar.man
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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\" ========================================================================
.\"
.IX Title "CHANGEWAR 1"
.TH CHANGEWAR 1 "2011-04-10" "perl v5.10.1" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
changewar \- Modificar ficheros dentro de un fichero zip (.war, .jar, ...)
.SH "SIPNOSIS"
.IX Header "SIPNOSIS"
\&\fBchangewar [\-\-separador=c|\-sc] [\-\-debug|\-d] [\-\-quietly|\-q] [\-\-dryrun|\-n] archivo.conf origen.zip destino.zip \fR
.SH "DESCRIPCIÓN"
.IX Header "DESCRIPCIÓN"
\&\fBchangewar\fR permite modificar ficheros dentro de destino.zip, basándonos en la configuración indicada en archivo.conf y cogiendo los valores por defectos del origen.zip. Ver apartado \s-1SINTAXIS\s0 \s-1DE\s0 CONFIGURACIÓN para ver saber más de las posibilidades en archivo.conf.
.SH "OPCIONES"
.IX Header "OPCIONES"
.SS "\fB\-\-debug|\-d\fP"
.IX Subsection "--debug|-d"
Crea un directorio tmp en el directorio actual de trabajo en el que se guardaran los ficheros que se modifican durante el proceso.
.PP
Los ficheros originales son renombrados a fichero-original y los que se generan son renombrados a fichero-destino. De tal forma podremos comparar los ficheros con una sencilla orden:
.PP
for i in *origen; do vimdif \f(CW$i\fR ${i/origen/destino}; done
.SS "\fB\-\-quietly|\-q\fP"
.IX Subsection "--quietly|-q"
Ser silencioso. Por defecto nos mostrará todo lo que se está haciendo.
.SS "\fB\-\-dryrun|\-n\fP"
.IX Subsection "--dryrun|-n"
No ejecutar, simplemente decir qué ocurriría de lanzar el script. Se puede usar para comprobar que el fichero de configuración es correcto y el esperado.
.SS "\fB\-\-separador=c|\-sc\fP"
.IX Subsection "--separador=c|-sc"
Usar un separador alternativo por defecto el separador es la coma (\*(L",\*(R").
.SH "SINTAXIS DE CONFIGURACIÓN"
.IX Header "SINTAXIS DE CONFIGURACIÓN"
Las líneas que empiecen con almoadilla (\*(L"#\*(R") serán consideradas comentarios.
.PP
Existen dos formas de escribir el fichero de configuración:
.PP
1. [ /ruta/al/fichero ] || [ \- /ruta/al/fichero/a/eliminar ] || [ + /ruta/al/fichero/a/añadir ] = fichero
propiedad01
propiedad02
.PP
2. /ruta/al/fichero: propiedad01, propiedad02 || \- /ruta/al/fichero/a/eliminar || + /ruta/al/fichero/a/añadir = fichero
.PP
No está permitido mezclar ambas formas. Hay dos tipos de ficheros que podemos modificar, los ficheros .properties y los .xml.
.SS "Añadiendo o quitando ficheros"
.IX Subsection "Añadiendo o quitando ficheros"
# Para añadir un fichero
.PP
+ruta/en/el/zip: ruta/en/local
.PP
o en modo .ini
.PP
[ + ruta/en/el/zip ] = ruta/en/local
.PP
# Para eliminar un fichero
.PP
\&\-ruta/en/el/zip
.PP
o en modo .ini
.PP
[ \- ruta/en/el/zip ]
.SS "\s-1FICHEROS\s0 .properties"
.IX Subsection "FICHEROS .properties"
# Configuración que copia la propiedad \*(L"prop\*(R" desde el fichero \*(L"fichero.properties\*(R" del origen.zip al mismo fichero dentro del destino.zip
.PP
fichero.properties: prop
.PP
o en modo .ini
.PP
[ fichero.properties ]
.PP
prop
.PP
# Configuración que asigna el valor \*(L"val\*(R" a la propiedad \*(L"prop\*(R" en el fichero \*(L"fichero.properties\*(R" dentro del destino.zip
.PP
fichero.properties: prop=val
.PP
o en modo .ini
.PP
[ fichero.properties ]
.PP
prop=val
.PP
# Se pueden mezclar separando las asignaciones por coma:
.PP
fichero.properties: prop=val, prop2
.SS "\s-1FICHEROS\s0 .xml"
.IX Subsection "FICHEROS .xml"
Se usa la sintaxis \s-1XPATH\s0 (http://www.w3schools.com/xpath/default.asp) y se utiliza el := como operador de asignación.
.PP
Daremos unos cuantos ejemplos basados en el siguiente ejemplo:
.PP
<Comunidad nombre=\*(L"Andalucia\*(R">
.PP
<Provincia nombre=\*(L"Sevilla\*(R" nombre_romano=\*(L"hispalos\*(R">
.PP
<Poblacion> 700000 </Poblacion>
.PP
</Provincia>
.PP
<Provincia nombre=\*(L"Cádiz\*(R" nombre_romano=\*(L"Gadir\*(R">
.PP
<Poblacion> 100000 </Poblacion>
.PP
</Provincia>
.PP
</Comunidad>
.PP
Para buscar un nodo se usan rutas que especifican el camino hasta dicho nodo. Por ejemplo:
.PP
/Comunidad/Provincia[@nombre=\*(L"Sevilla\*(R"]/Poblacion
.PP
Dentro del elemento Comunidad buscariamos una provincia con el atributo nombre a \*(L"Sevilla\*(R", una vez que estemos en ese nodo se accedería al atributo Población.
.PP
Si queremos que la población de Sevilla sea de 1 millón de habitantes por que queremos meter a las proximidades:
.PP
andalucia.xml: /Comunidad/Provincia[@nombre=\*(L"Sevilla\*(R"]/Poblacion := 1000000
.PP
Si nos hemos confundido y en vez de Cádiz queremos que sea Huelva la que tenga 100000 habitantes haremos:
.PP
andalucia.xml: /Comunidad/Provincia[@nombre=\*(L"Cádiz\*(R"]/@nombre := Huelva
.PP
Vemos como la arroba \*(L"@\*(R" se usa para acceder a los atributos tanto para buscarlos como para acceder.
.PP
Habitualmente podemos abreviar los caminos, la expresión // hará que se avance en el árbol hasta que se encuentre lo que le especifiquemos a continuación:
.PP
andalucia.xml: //Provincia[@nombre=Sevilla]/Poblacion := 1000000
.PP
Si nos hemos confundido a la hora de escribir el nombre romano de Sevilla, así podríamos solucionarlo:
.PP
andalucia.xml: //Provincia[@nombre=Sevilla]/@nombre_romano := hispalis
.PP
Si no asignamos valor a la propiedad ésta se copiará desde el fichero origen dentro de origen.zip
.PP
También se puede usar el modo .ini para estos cambios.
.SH "BUGS"
.IX Header "BUGS"
El soporte a diferentes locales se haya limitado por la librería XML::XPath. Si el \s-1XML\s0 viene bien formado con su encoding correspondiente no habrá problema. Se ha hecho un apaño para que no den problemas los ficheros que vengan con carácteres \s-1ISO8859\-15\s0.
.PP
Contactar con javibarroso@gmail.com para cualquier tipo de problemas.
.SH "TODO"
.IX Header "TODO"
* Poder eliminar ficheros
.PP
* Poder copiar ficheros enteros
.SH "VER TAMBIÉN"
.IX Header "VER TAMBIÉN"
XML::XPath, Archive::Zip , Text::Iconv
.SH "HISTORIA"
.IX Header "HISTORIA"
Se comenzó a desarrollar en Marzo de 2011 para facilitar la ardua tarea de modificaciones de .war, antes de la llegada del maven a nuestras oficinas
.SH "LICENCIA"
.IX Header "LICENCIA"
\&\s-1GPL\s0 o superior (sería \s-1BSD\s0 si tuviese tiempo de copiar el copyright :P )
.SH "DEDICATORIA"
.IX Header "DEDICATORIA"
A Marita ... :(