Domanda

Come memorizzi i permessi dei file in un repository?Alcuni file devono essere di sola lettura per impedire a un programma di terze parti di eliminarli, ma dopo essere stati estratti dal repository vengono impostati in lettura-scrittura.

Ho cercato su Google e ho trovato un post sul blog del 2005 che afferma che Subversion non memorizza i permessi dei file.Sono elencati patch e script hook (esiste ancora un solo URL).Tre anni dopo, Subversion non memorizza ancora i permessi dei file e gli hook sono l'unico modo per farlo?(Non ho mai creato hook e preferisco utilizzare qualcosa che sia nativo di Subversion.)

È stato utile?

Soluzione

Una possibile soluzione potrebbe essere quella di scrivere uno script da archiviare con il resto del codice e che venga eseguito come primo passaggio del processo di creazione.

Questo script esegue la copia della base di codice e imposta le autorizzazioni di lettura su determinati file.

Idealmente lo script leggerebbe l'elenco dei file da un semplice file di input.Ciò semplificherebbe la manutenzione e faciliterebbe per gli altri sviluppatori la comprensione di quali file vengono contrassegnati come di sola lettura.

Altri suggerimenti

SVN ha la capacità di archiviare metadati (proprietà) insieme a un file.Le proprietà sono fondamentalmente solo coppie chiave/valore, tuttavia ci sono alcune chiavi speciali come "svn:executable", se questa proprietà esiste per un file, Subversion imposterà il bit eseguibile del filesystem per quel file durante il check-out del file.Anche se so che questo non è esattamente quello che stai cercando, potrebbe essere sufficiente (era per me).

Ci sono altre proprietà per la fine della riga (svn:eol-style) e il tipo mime (svn:mime-type).

Non esiste un modo nativo per archiviare i permessi dei file in SVN.

Entrambi asvn E la toppa da quel post del blog sembrano essere attivi (e ospitati sul repository SVN ufficiale), e questa è una buona cosa, ma non penso che avranno tale gestione dei metadati nella versione core in tempi brevi.

SVN ha avuto la capacità di gestire collegamenti simbolici E eseguibili specialmente per molto tempo, ma nessuno dei due funziona correttamente su Win32.Non trattenerei il fiato per un'altra funzionalità non portatile (anche se non sarebbe troppo difficile da implementare sul sistema di metadati già esistente).

Prenderei in considerazione la possibilità di scrivere uno script di shell per regolare manualmente i permessi dei file, quindi inserirlo nel repository.

Poiché questo non è stato ancora detto completamente nelle risposte precedenti.Odio però resuscitare i thread zombie.

Poiché l'aggiunta del supporto delle autorizzazioni per SVN dovrebbe adattarsi a più sistemi operativi e tipi di autorizzazioni, NFS, POSIX, ARWED e RACF

Ciò renderebbe SVN gonfio, potrebbe entrare in conflitto con tipi di autorizzazione in conflitto come NFS e POSIX o aprire possibili exploit/vulnerabilità della sicurezza.

Ci sono un paio di soluzioni alternative.pre-commit, post-commit, start-commit sono quelli più comunemente usati e fanno parte del sistema Subversion.Ma ti permetterà di controllare le autorizzazioni con qualunque linguaggio di programmazione tu voglia.

Il sistema che ho implementato è quello che chiamo packager, che convalida i file impegnati della copia di lavoro, quindi analizza un file di metadati, che elenca le autorizzazioni predefinite desiderate per file/cartelle e anche eventuali modifiche desiderate.

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

Puoi anche espandere questo aspetto e consentire cose come lo spostamento automatizzato, la ridenominazione, l'etichettatura della revisione per tipo, come alfa, beta, release candidate, release

Per quanto riguarda il supporto ai client per il checkout dei file del repository con le autorizzazioni ad essi collegate.Faresti meglio a cercare di creare un programma di installazione del tuo pacchetto e offrirlo come risorsa.

Immagina che le persone impostino i loro repository con un eseguibile impostato con i permessi di root: www-user 4777

Questo è il collegamento aggiornato per la patch SVN che gestisce correttamente i permessi dei file in stile Unix.Ho provato su Fedora12 e sembra funzionare come previsto:

L'ho appena salvato /usr/bin/asvn e uso asvn invece del comando svn se ho bisogno che le autorizzazioni vengano gestite correttamente.

Molte risposte hanno affermato che svn non memorizza i permessi dei file.Questo potrebbe essere vero, ma sono riuscito a risolvere un file dll senza problemi di permessi di esecuzione semplicemente seguendo questi passaggi:

  1. chmod 755 badpermission.dll
  2. mv badpermission.dll ../
  3. aggiornamento svn
  4. svn rm badpermission.dll
  5. svn commit badpermission.dll -m "Rimuovi dll per correggere i permessi"
  6. mv ../badpermission.dll .
  7. svn aggiungi badpermission.dll
  8. svn commit badpermission.dll -m "Aggiungi nuovamente la dll per correggere le autorizzazioni"
  9. rm badpermission.dll
  10. aggiornamento svn
  11. badpermission.dll ritorna con i permessi di esecuzione

@morechilli:

Il wrapper asvn del mio post precedente e il blog nel post dell'OP sembrano fare ciò che stai suggerendo.Sebbene memorizzi le autorizzazioni nelle proprietà del repository dei file corrispondenti anziché in un singolo file esterno.

Consiglierei di generare la mappa dei permessi utilizzando l'utilità mtree (FreeBSD ce l'ha per impostazione predefinita), archiviare la mappa nel repository e, come menzionato sopra, eseguire uno script che ripristinerebbe i permessi corretti del file dalla mappa come primo passo del processo di costruzione.

Il blocco non risolverebbe questo problema.Il blocco impedisce ad altri di modificare il file.Si tratta di un'applicazione di terze parti che viene eseguita come parte del processo di compilazione che tenta di scrivere su un file, modificandolo, interrompendo il processo di compilazione.Pertanto dobbiamo impedire al programma di modificare il file, contrassegnandolo semplicemente come di sola lettura.Vorremmo che tali informazioni fossero conservate nel repository e trasportate attraverso check-in, filiali, ecc.

Graham, svn non memorizza le autorizzazioni.La tua unica opzione è concludere la chiamata svn in una sceneggiatura.Lo script dovrebbe chiamare svn con i suoi argomenti, quindi impostare successivamente le autorizzazioni.A seconda dell'ambiente, potrebbe essere necessario chiamare lo script svn e modifica il tuo PATH per assicurarsi che venga chiamato.

Mi piace molto l'idea di morechilli di controllare l'elenco dei file e dei permessi nel repository stesso.

Abbiamo creato un file batch per farlo per noi.Preferirei però un supporto effettivo nella sovversione...

Considera l'utilizzo svn lock per impedire ad altri di scrivere sul file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top