40 votes

Stockage des permissions de fichiers dans le référentiel Subversion

Comment stocker les autorisations de fichiers dans un référentiel ? Quelques fichiers doivent être en lecture seule pour éviter qu'un programme tiers ne les mette à la poubelle, mais une fois sortis du référentiel, ils sont mis en lecture-écriture.

J'ai regardé sur google et j'ai trouvé un article de blog de 2005 qui déclare que Subversion ne stocke pas les permissions de fichiers. Il y a des patches et des hook-scripts listés (une seule url existe encore). Trois ans plus tard, est-ce que Subversion ne stocke toujours pas les permissions de fichiers et est-ce que les hooks sont la seule façon d'y arriver ? (Je n'ai jamais fait de hooks et préfère utiliser quelque chose qui est natif à Subversion).

36voto

Richard Tasker Points 492

SVN a la possibilité de stocker des métadonnées ( propriétés ) ainsi qu'un fichier. Les propriétés sont fondamentalement juste des paires clé/valeur, cependant il y a quelques clés spéciales comme 'svn:executable', si cette propriété existe pour un fichier, Subversion mettra le bit exécutable du système de fichiers pour ce fichier quand il extraira le fichier. Bien que je sache que ce n'est pas exactement ce que vous recherchez, cela pourrait être suffisant (c'était le cas pour moi).

Il existe d'autres propriétés pour la fin de ligne (svn:eol-style) et le type de mime (svn:mime-type).

14voto

aib Points 18608

Il n'y a pas de moyen natif de stocker les permissions de fichiers dans SVN.

Les deux sites asvn y le patch de ce billet de blog semblent être en place (et hébergés sur le dépôt SVN officiel), et c'est une bonne chose, mais je ne pense pas qu'ils auront une telle gestion des métadonnées dans la version de base de sitôt.

SVN a eu la capacité de gérer liens symboliques y exécutables spécialement depuis longtemps, mais aucun ne fonctionne correctement sous Win32. Je ne retiendrais pas mon souffle pour une autre fonctionnalité non portable de ce type (bien qu'elle ne serait pas trop difficile à mettre en œuvre au-dessus du système de métadonnées déjà existant).

J'envisagerais d'écrire un shell script pour ajuster manuellement les autorisations de fichiers, puis de le mettre dans le référentiel.

10voto

morechilli Points 4889

Une solution possible serait d'écrire un script que vous enregistrez avec le reste de votre code et qui est exécuté comme première étape de votre processus de construction.

Ce script parcourt votre copie du codebase et définit les autorisations de lecture sur certains fichiers.

Idéalement, le script devrait lire la liste des fichiers à partir d'un simple fichier d'entrée. Cela faciliterait la maintenance et permettrait aux autres développeurs de comprendre quels fichiers sont marqués comme étant en lecture seule.

4voto

fyrye Points 759

Puisque cela n'a pas encore été entièrement dit dans les réponses précédentes. Je déteste ressusciter les fils de discussion zombifiés.

Étant donné que l'ajout de la prise en charge des permissions pour SVN devrait prendre en compte plusieurs systèmes d'exploitation et types de permission, NFS, POSIX, ARWED et RACF.

Cela rendrait le SVN trop lourd, pourrait entrer en conflit avec des types de permissions contradictoires comme NFS et POSIX, ou ouvrirait la voie à des exploits ou des vulnérabilités de sécurité.

Il existe quelques solutions de contournement. pre-commit, post-commit, start-commit sont les plus couramment utilisés, et font partie du système Subversion. Mais cela vous permettra de contrôler les permissions avec le langage de programmation de votre choix.

Le système que j'ai mis en place est ce que j'appelle un packager, qui valide les fichiers engagés de la copie de travail, puis analyse un fichier de métadonnées, qui liste les autorisations par défaut souhaitées pour les fichiers/dossiers, ainsi que les modifications que vous souhaitez leur apporter.

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

Il est également possible d'étendre ce système et de permettre des opérations telles que le déplacement automatique, le renommage, le marquage des révisions par type (alpha, beta, release candidate, release).

En ce qui concerne la prise en charge des clients pour l'extraction des fichiers de votre dépôt avec les autorisations qui y sont attachées. Il est préférable de créer un installateur de votre paquet et de le proposer comme ressource.

Imaginez que les gens configurent leurs dépôts avec un exécutable dedans avec les permissions Root:www-user 4777.

3voto

billywhizz Points 99

Ce site est le lien mis à jour pour le patch SVN qui gère correctement les permissions de fichiers de style unix. J'ai testé sur fedora12 et semble fonctionner comme prévu :

Je l'ai juste enregistré dans /usr/bin/asvn et j'utilise asvn au lieu de la commande svn si j'ai besoin que les permissions soient gérées correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X