Almacenamiento de permisos de archivos en el repository de Subversion

¿Cómo se almacenan los permisos de archivos en un repository? Algunos archivos deben ser de solo lectura para evitar que un progtwig de terceros los destruya, pero después de salir del repository están configurados para leer y escribir.

Busqué en google y encontré una publicación de blog desde 2005 que indica que Subversion no almacena archivos-permisos. Hay parches y scripts de gancho en la lista (solo existe una URL). Tres años después, ¿aún no almacena Subversion permisos de archivos y son los ganchos la única forma de hacerlo? (Nunca he hecho hooks y uso algo que es nativo de Subversion).

Una posible solución sería escribir un script que controle con el rest de su código y que se ejecute como el primer paso de su proceso de comstackción.

Esta secuencia de comandos se ejecuta en su copia de la base de código y establece los permisos de lectura en ciertos archivos.

Lo ideal sería que el script lea la lista de archivos de un archivo de entrada simple. Esto haría que sea fácil de mantener y fácil para otros desarrolladores entender qué archivos se marcan como de solo lectura.

SVN tiene la capacidad de almacenar metadatos ( propiedades ) junto con un archivo. Las propiedades son básicamente pares de clave / valor, sin embargo, hay algunas teclas especiales como ‘svn: executable’, si esta propiedad existe para un archivo, Subversion configurará el bit ejecutable del sistema de archivos para ese archivo al verificar el archivo. Aunque sé que esto no es exactamente lo que estás buscando, podría ser suficiente (fue para mí).

Existen otras propiedades para el final de línea (svn: eol-style) y el tipo de mime (svn: mime-type).

No hay forma nativa de almacenar permisos de archivos en SVN.

Tanto el ASVN como el parche de esa publicación de blog parecen estar activos (y alojados en el repository SVN oficial), y eso es algo bueno, pero no creo que tengan ese manejo de metadatos en la versión principal en el corto plazo.

SVN ha tenido la capacidad de manejar enlaces simbólicos y ejecutables especialmente durante mucho tiempo, pero ninguno funciona correctamente en Win32. No me quedaría sin aliento por otra característica no portátil (aunque no sería demasiado difícil de implementar sobre el sistema de metadatos ya existente).

Consideraría escribir un script de shell para ajustar manualmente los permisos de los archivos, y luego ponerlo en el repository.

Dado que esto no fue totalmente dicho en respuestas anteriores todavía. Odio resucitar hilos zombie sin embargo.

Desde la adición de soporte de permiso para SVN tendría que acomodar múltiples sistemas operativos y tipos de permisos, NFS, POSIX, ARWED y RACF

Esto haría que SVN se hinchara, posiblemente chocara con tipos de permisos conflictivos como NFS y POSIX, o abriera posibles exploits / vulnerabilidades de seguridad.

Hay un par de soluciones. pre-commit, post-commit, start-commit son los más utilizados, y forman parte del sistema Subversion. Pero le permitirá controlar los permisos con el lenguaje de progtwigción que desee.

El sistema que implementé es lo que llamo un empaquetador, que valida los archivos comprometidos de la copia de trabajo, luego analiza un archivo de metadatos, que enumera los permisos predeterminados que se desean para los archivos / carpetas y cualquier cambio que desee.

Owner, Group, Folders, Files default:  www-user 750 640 /path/to/file:  non-www 770 770 /path/to/file2:   700 700 

También puede ampliar esto y permitir cosas como el movimiento automático, cambiarles el nombre, etiquetar la revisión por tipos, como alfa, beta, release candidate, release

En cuanto a apoyar a los clientes para que paguen sus archivos de repository con los permisos adjuntos. Es mejor buscar crear un instalador de su paquete y ofrecerlo como un recurso.

Imagine que las personas configuran sus repositorys con un ejecutable en el que se configura con los permisos de root: www-user 4777

Este es el enlace actualizado para el parche SVN que maneja los permisos del archivo de estilo Unix correctamente. He probado en fedora12 y parece funcionar como se esperaba:

Acabo de guardarlo / usr / bin / asvn y usar asvn en lugar del comando svn si necesito que los permisos se manejen correctamente.

Muchas respuestas han indicado que svn no almacena los permisos de archivos. Esto puede ser cierto, pero pude resolver un archivo dll sin ejecutar el problema de permisos simplemente por estos pasos:

  1. chmod 755 badpermission.dll
  2. mv badpermission.dll ../
  3. svn actualización
  4. svn rm badpermission.dll
  5. svn commit badpermission.dll -m “Eliminar dll para arreglar permisos”
  6. mv ../badpermission.dll.
  7. svn agregar badpermission.dll
  8. svn commit badpermission.dll -m “Vuelve a agregar el dll para corregir los permisos”
  9. rm badpermission.dll
  10. svn actualización
  11. badpermission.dll vuelve con permisos de ejecución

@morechilli:

El contenedor de ASVN de mi publicación anterior y el blog en la publicación OP parece hacer lo que estás sugiriendo. Aunque almacena los permisos en las propiedades del repository de los archivos correspondientes a diferencia de un solo archivo externo.

Recomendaría generar un mapa de permisos usando la utilidad mtree (FreeBSD lo tiene de forma predeterminada), almacenar el mapa en el repository y, como se mencionó anteriormente, ejecutar un script que restauraría los permisos de archivo correctos del mapa como primer paso del proceso de construcción.

Bloquear no resolvería este problema. El locking impide que otros editen el archivo. Esta es una aplicación de terceros que se ejecuta como parte del proceso de comstackción que intenta escribir en un archivo, cambiarlo, lo que rompe el proceso de comstackción. Por lo tanto, debemos evitar que el progtwig cambie el archivo que simplemente marca el archivo como de solo lectura. Nos gustaría que esa información se guarde en el repository y se lleve a través de registros, sucursales, etc.

Graham, svn no almacena permisos. Su única opción es envolver su llamada a svn en un script. La secuencia de comandos debe llamar a svn con sus argumentos, luego establecer los permisos después. Dependiendo de su entorno, es posible que necesite llamar al script svn y modificar su PATH para asegurarse de que se llame.

Me gusta bastante la idea de morechilli de tener la lista de archivos y permisos registrados en el repository mismo.

Creamos un archivo por lotes para hacer esto por nosotros. Preferiría soporte real en subversión aunque …

Considere usar svn lock para no permitir que otros escriban en el archivo.