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

Comment stockez-vous les permissions de fichiers dans un référentiel? Quelques fichiers doivent être en lecture seule pour empêcher un programme tiers de le détruire, mais après leur extraction du référentiel, ils sont définis en lecture-écriture.

J’ai regardé sur Google et trouvé un article de blog de 2005 qui indique que Subversion ne stocke pas les permissions de fichiers. Il existe des correctifs et des scripts de hook (une seule URL existe toujours). Trois ans plus tard, Subversion ne stocke-t-il toujours pas les permissions de fichiers et les hooks sont-ils le seul moyen d’y parvenir? (Je n’ai jamais fait de crochets et utilise plutôt quelque chose qui est natif à Subversion.)

    Une solution possible consisterait à écrire un script que vous archivez avec le rest de votre code et qui est exécuté comme première étape de votre processus de génération.

    Ce script s’exécute sur votre copie du code et définit les permissions 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 faciliterait pour les autres développeurs la compréhension des fichiers marqués comme étant en lecture seule.

    SVN a la capacité de stocker des métadonnées ( propriétés ) avec un fichier. Les propriétés sont essentiellement des paires clé / valeur, mais il existe des touches spéciales comme «svn: executable», si cette propriété existe pour un fichier, Subversion définira le bit exécutable du système de fichiers pour ce fichier lors de la vérification du fichier. Même si je sais que ce n’est pas exactement ce que vous recherchez, cela pourrait être suffisant (c’était pour moi).

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

    Il n’existe aucun moyen natif de stocker les permissions de fichiers dans SVN.

    Asvn et le patch de cet article semblent tous deux (et hébergés sur le repository officiel SVN), ce qui est une bonne chose, mais je ne pense pas qu’ils vont bientôt avoir de telles métadonnées dans la version principale.

    SVN a eu la capacité de gérer les liens symboliques et les exécutables spécialement pendant longtemps, mais aucun ne fonctionne correctement sous Win32. Je ne retiendrais pas mon souffle pour une autre fonctionnalité non portable de ce type (même si cela ne serait pas trop difficile à mettre en œuvre par-dessus le système de métadonnées existant).

    J’envisagerais d’écrire un script shell pour ajuster manuellement les permissions de fichiers, puis le placer dans le référentiel.

    Comme cela n’a pas encore été dit dans les réponses précédentes. Je déteste ressusciter les fils zombies cependant.

    L’ajout de la prise en charge des permissions pour SVN devrait prendre en charge plusieurs types de système d’exploitation et types d’autorisation, NFS, POSIX, ARWED et RACF

    Cela ferait gonfler SVN, se heurterait peut-être à des types d’permissions contradictoires comme NFS et POSIX, ou créerait des vulnérabilités d’exploitation / de sécurité.

    Il y a quelques solutions de contournement. pré-commit, post-commit, start-commit sont les plus couramment utilisés et font partie du système Subversion. Mais vous permettra de contrôler les permissions avec le langage de programmation que vous aimez.

    Le système que j’ai implémenté est ce que j’appelle un conditionneur, qui valide les fichiers validés de la copie de travail, puis parsing un fichier de métadonnées, qui répertorie les permissions par défaut souhaitées pour les fichiers / dossiers et toutes les modifications que vous souhaitez.

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

    Vous pouvez également développer cela et permettre des choses telles que le déplacement automatisé, les renommer, marquer les révisions par types, comme alpha, bêta, release candidate, release

    En ce qui concerne la prise en charge des clients pour extraire vos fichiers de référentiel avec des permissions qui leur sont associées. Il est préférable de créer un installateur de votre package et de l’offrir en tant que ressource.

    Imaginez des personnes configurant leurs référentiels avec un exécutable avec des permissions de root: www-user 4777

    Ceci est le lien mis à jour pour le correctif SVN qui gère correctement les permissions de fichier de style Unix. J’ai testé sur fedora12 et semble fonctionner comme prévu:

    Je viens de l’enregistrer / usr / bin / asvn et d’utiliser asvn au lieu de svn si j’ai besoin d’permissions gérées correctement.

    De nombreuses réponses ont indiqué que svn ne stocke pas les permissions de fichiers. Cela peut être vrai, mais j’ai été capable de résoudre un fichier dll sans problème d’permissions d’exécution simplement en procédant comme suit:

    1. chmod 755 badpermission.dll
    2. mv badpermission.dll ../
    3. svn update
    4. svn rm badpermission.dll
    5. svn commit badpermission.dll -m “Supprimer dll pour corriger les permissions”
    6. mv ../badpermission.dll.
    7. svn add badpermission.dll
    8. svn commit badpermission.dll -m “Ajouter le dll pour réparer les permissions”
    9. rm badpermission.dll
    10. svn update
    11. badpermission.dll revient avec les permissions d’exécution

    @morechilli:

    Le papier peint de mon post précédent et le blog dans le post du PO semblent faire ce que vous proposez. Bien qu’il stocke les permissions dans les propriétés du référentiel des fichiers correspondants par opposition à un seul fichier externe.

    Je recommande de générer une carte d’permissions à l’aide de l’utilitaire mtree (FreeBSD l’a par défaut), de stocker la carte dans le référentiel et, comme mentionné ci-dessus, d’exécuter un script permettant de restaurer processus de construction.

    Le locking ne résoudrait pas ce problème. Le locking empêche d’autres personnes de modifier le fichier. Il s’agit d’une application tierce qui s’exécute dans le cadre du processus de génération qui tente d’écrire dans un fichier (en le modifiant), ce qui interrompt le processus de génération. Par conséquent, nous devons empêcher le programme de modifier le fichier qui marque simplement le fichier en lecture seule. Nous aimerions que ces informations soient conservées dans le référentiel et acheminées à travers les checkins, les succursales, etc.

    Graham, svn ne stocke pas les permissions. Votre seule option consiste à envelopper votre appel à svn dans un script. Le script devrait appeler svn avec ses arguments, puis définir les permissions après. Selon votre environnement, vous devrez peut-être appeler votre script svn et modifier votre PATH pour vous assurer qu’il est appelé.

    J’aime bien l’idée de morechilli d’avoir la liste des fichiers et des permissions vérifiée dans le référentiel lui-même.

    Nous avons créé un fichier batch pour le faire pour nous. Préférerait un soutien réel dans la subversion si …

    Envisagez d’utiliser svn lock pour empêcher les autres utilisateurs d’écrire dans le fichier.