Domanda

In SVN non v'è alcun modo per impostare (BugTraq) immobili in tutte le directory in un albero senza verificare tutto l'albero?

Non è possibile impostare proprietà nel repository direttamente senza impostare ganci. Anche se potessi io non sono sicuro che questo avrebbe aiutato -. Non è possibile impostare le proprietà ricorsive con Tortoise, e ho il sospetto che non sarebbe stato semplice con il client a riga di comando

Non ci sono casse sparse - ma se ho impostato la profondità vuoto per ogni directory, quindi proprietà di impostazione in modo ricorsivo non funziona anche se ho check manualmente ogni sottodirectory

.

ho potuto controllare l'intero repository e utilizzare Tortoise per impostare le proprietà BugTraq sulle directory ricorsivamente (essi non vengono applicati ai file per impostazione predefinita). Ma che sta andando a richiedere me check-out l'intero archivio solo per questo.

C'è un modo migliore per farlo che mi manca?

Modifica:

Ho cercato di verificare l'intero repository e la modifica delle proprietà alla radice - ma il commit violato il nostro pre-commit hook: non è possibile modificare le proprietà sui tag. Senza rimuovere il gancio, sembra che sto andando ad avere bisogno di modificare manualmente le proprietà (su tutto, tranne i tag).

È stato utile?

Soluzione

Ottenere un elenco di tutte le directory potrebbe essere un buon primo passo. Ecco un modo per farlo senza realmente controllare nulla:

  1. Crea un file di testo con il contenuto del repository:

    Elenco svn --depth infinito https://myrepository.com/svn/path / a / root / directory > everything.txt

  2. Trim verso il basso per solo le directory. Directory finiranno tutti con una barra:

    grep "/ $" everything.txt> just_directories.txt

Nel tuo caso ti consigliamo di aprirlo in un editor di testo ed estrarre le directory tag tuoi ganci soffocare.

Dal momento che hai il repository estratto è possibile utilizzare il file direttamente come input per un'operazione di propset:

svn propset myprop myvalue --targets just_directories.txt

Ho voluto impostare le proprietà direttamente sulle versioni repository dei file senza check-out prima, ma non ha funzionato. Ho anteposto ogni nome di directory con il percorso del repository ( https://myrepository.com/svn/ path / to / root / directory ) e ha cercato svn propset myprop mypropvalue --targets just_directories.txt , ma ha dato un errore: svn: Impostare proprietà su bersaglio non locale ' https://myrepository.com/svn/path/to/root/directory/ subdir1 ' ha bisogno di una revisione di base. Non so se c'è un modo per aggirare questo.

Altri suggerimenti

ho finito per scrivere uno script per farlo usando le associazioni pysvn (che sono molto facili da usare). E 'seguito nel caso in cui nessuno lo vuole.

import sys
import os
from optparse import OptionParser
import pysvn
import re

usage = """%prog [path] property-name property-value

Set property-name to property-value on all non-tag subdirectories in an svn working copy.

path is an optional argument and defaults to "."
"""

class Usage(Exception):
    def __init__(self, msg):
        self.msg = msg

def main():
    try:
        parser = OptionParser(usage)
        (options, args) = parser.parse_args()

        if len(args) < 2:
            raise Usage("Must specify property-name and property-value")
        elif len(args) == 2:
            directory = "."
            property_name = args[0]
            property_value = args[1]
        elif len(args) == 3:
            directory = args[0]
            property_name = args[1]
            property_value = args[2]
        elif len(args) > 3:
            raise Usage("Too many arguments specified")

        print "Setting property %s to %s for non-tag subdirectories of %s" % (property_name, property_value, directory)

        client = pysvn.Client()
        for path_info in client.info2(directory):
            path = path_info[0]
            if path_info[1]["kind"] != pysvn.node_kind.dir:
                #print "Ignoring file directory: %s" % path
                continue
            remote_path = path_info[1]["URL"]
            if not re.search('(?i)(\/tags$)|(\/tags\/)', remote_path):
                print "%s" % path
                client.propset(property_name, property_value, path, depth=pysvn.depth.empty)
            else:
                print "Ignoring tag directory: %s" % path
    except Usage, err:
        parser.error(err.msg)
        return 2


if __name__ == "__main__":
    sys.exit(main())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top