2010-03-02 16 views
9

Estoy escribiendo un archivo build.xml hormiga que hace lo siguiente:Preservar los permisos de archivo, al descomprimir los archivos y pasar con velocidad usando hormiga

  • Toma un archivo comprimido (.zip)
  • baja la cremallera que
  • añade una serie de archivos
  • Cremalleras seguridad de los archivos resultantes

un extracto del código de build.xml:

<!-- Unzip SDK to a temporary directory --> 
<unzip src="${zipFile}" dest="tmp"/> 

<!-- pull in the files from another directory --> 
<copy todir="tmp/someDirectory" > 
    <fileset dir="${addedFiles}" /> 
</copy> 

<!-- Zip up modified SDK --> 
<zip destfile="${destDir}" basedir="tmp"/> 

Todo esto funciona a la perfección, excepto que los permisos establecidos para los archivos comprimidos antes de ejecutar la construcción de ant se pierden en el archivo zip creado por la compilación de ant. Por ejemplo, los archivos que anteriormente eran ejecutables ya no lo son.

Entonces mi pregunta: ¿es posible usar ant para agregar archivos a un archivo zip sin destruir los permisos de los archivos ya presentes?

estoy usando Ant 1.7.1

Respuesta

3

Resulta que la hormiga destruirá toda la información sobre los permisos al descomprimir debido a una restricción en Java. Sin embargo, lo que sí es posible es añadir archivos en un archivo Zip existente que conserva los permisos de los archivos existentes:

<!-- Add to zip --> 
<zip destfile="${existingZipFiledirectory}.zip" 
    basedir="${directoryOfFilesToAdd}" 
    update="true" 
/> 

El script anterior actualizar el archivo zip especificado con el contenido en basedir, preservando permisos de archivo en el cremallera original.

-1

Por lo que yo sé, esta característica (preserve0permissions) se introdujo con Ant 1.8. Las versiones anteriores de Ant no conservaban los permisos.

Si está atascado con Ant 1.7.1, puede usar Tar que, si no me equivoco, almacena los permisos.

+1

No, 'preserve0permissions' es diferente, eso tiene que ver con el caso en el que está agregando entradas a un archivo zip desde otro (usando' '). Ant siempre ha sido capaz de copiar permisos de un zip a otro, pero antes de Ant 1.8 si el archivo zip de origen tenía un valor cero en el campo de permisos para una entrada determinada, la entrada en el archivo de destino siempre se crearía con los permisos predeterminados (típicamente 644 o 755). 'preserve0permissions =" ​​yes "' en su lugar conservará el valor cero en el archivo zip de destino. –

7

me encontré mismo problema cuando se utiliza objetivo descomprimir Ant:

<unzip src="${project.build.directory}/${project.build.finalName}.zip" dest="${user.home}/apps" overwrite="true" /> 

El permiso de scripts de shell dentro del archivo zip se perdió cuando se usa el objetivo de descomprimir anteriormente.

Después de algunas investigaciones, utilizo el siguiente objetivo 'exec' con los parámetros de la línea de comando descomprimir, funcionó.

<!-- Use command line unzip to keep file permissions --> 
<exec executable="unzip" spawn="true"> 
    <arg line="-o ${project.build.directory}/${project.build.finalName}.zip -d ${user.home}/apps" /> 
</exec> 

Espero que esto pueda ayudar a alguien más cuando se encuentre con este tipo de problemas.

Gracias, J

+0

Esto descomprime tu archivo comprimido y tienes los mismos permisos que cuando lo cerraste. – fscore

+0

Sí, eso creo. –

6

No se puede obtener la tarea postal para preservar los permisos de archivo, pero se puede establecer de forma explícita:

<zip destfile="installer.zip" > 
<zipfileset filemode="755" dir="../" includes="artisan/install.*" /> 
</zip> 

(Esto funcionó para mí en Windows y OSX)

+0

Funciona también bajo GNU Linux, acabo de probar con Mageia Linux 4. Gracias. – gouessej

Cuestiones relacionadas