Por ejemplo, si tengo dos archivos:No se puede aplicar el parche diff unificado en Solaris
fichero1:
This is file 1
y fichero2:
This is file 2
y crear el parche con la siguiente comando:
diff -u file1 file2 > files.patch
resultado es:
--- file1 Fri Aug 13 17:53:28 2010
+++ file2 Fri Aug 13 17:53:38 2010
@@ -1,1 +1,1 @@
-This is file 1
+This is file 2
Entonces si intento de aplicar este parche en Solaris con el comando patch:
patch -u -i files.patch
que cuelga en:
Looks like a unified context diff.
File to patch:
1. ¿Hay una manera de utilizar Solaris comando de parche nativo con diffs unificados?
2. ¿Qué formato de diferencia se considera más portátil si no es posible aplicar un formato unificado?
Actualización: que he encontrado respuesta en la primera parte de mi pregunta. Parece que patch
en Solaris se cuelga si el segundo archivo (archivo2 en este caso) existe en la misma carpeta que el primero (archivo1). Por ejemplo, la siguiente diff bastante común:
--- a/src/file.src Sat Aug 14 23:07:29 2010
+++ b/src/file.src Sat Aug 14 23:07:37 2010
@@ -1,2 +1,1 @@
-1
-
+2
no funcionará con el comando bastante común parche:
patch -p1 -u -d a < file.patch
mientras que el siguiente diff (segundo archivo nota se cambia el nombre):
--- a/src/file.src Sat Aug 14 23:07:29 2010
+++ b/src/file_new.src Sat Aug 14 23:07:37 2010
@@ -1,2 +1,1 @@
-1
-
+2
funcionará perfectamente.
Para la segunda parte de mi pregunta, vea la respuesta aceptada a continuación.
Gracias, Gilles por las explicaciones. Consideraré usar diferencias de contexto. Por lo que yo entiendo, no puedes escribir en la información del parche de diferencia de contexto sobre el archivo fuente para cambiar. ¿Estoy en lo cierto? No es muy conveniente ... De todos modos, todavía no puedo entender por qué no ejecuté el parche -u con diff producido por diff -u. – Shcheklein
@Shcheklein: ¿Qué quiere decir con "información de parche sobre el archivo de origen para cambiar"? Las diferencias de contexto incluyen nombres de archivos. POSIX requiere 'diff -cr' para ser compatible, por lo que esto tiene que funcionar. Por cierto, ¿'parche -p0' hace la diferencia? – Gilles
Sí, las diferencias de contexto incluyen suficiente información. Sin embargo, el problema con el 'parche' de Solaris era diferente (ver la actualización de la pregunta). '-p0' no hace ninguna diferencia. Parece que 'patch' en Solaris no le gusta cuando ambos nombres en hunk son iguales o ambos archivos existen. – Shcheklein