2009-07-17 22 views
3

In SVN gibt es eine Möglichkeit, (Bugtraq) -Eigenschaften auf allen Verzeichnissen in einer Struktur, ohne die gesamte Struktur auschecken?SVN: Eigenschaften nur für Verzeichnisse festlegen

Ich kann Eigenschaften im Repository nicht direkt ohne Haken festlegen. Auch wenn ich mir nicht sicher sein könnte, dass dies helfen würde - Sie können keine rekursiven Eigenschaften mit Tortoise einstellen, und ich vermute, dass es mit dem Kommandozeilen-Client nicht einfach wäre.

Es gibt sparse Checkouts - aber wenn ich die Tiefe für jedes Verzeichnis leer lege, funktioniert das rekursive Festlegen von Eigenschaften nicht, selbst wenn ich jedes Unterverzeichnis manuell auschecke.

Ich konnte das gesamte Repository auschecken und Tortoise verwenden, um die Eigenschaften von Bugtraq rekursiv auf den Verzeichnissen festzulegen (standardmäßig werden sie nicht auf Dateien angewendet). Aber dafür muss ich nur das gesamte Repository auschecken.

Gibt es einen besseren Weg, den ich vermisse?

Edit:

Ich habe versucht, das ganze Repository auschecken und die Eigenschaften an der Wurzel zu ändern - aber die unsere pre-commit Haken verletzt commit: kann nicht Eigenschaften auf Tags ändern. Ohne den Haken zu entfernen, sieht es so aus, als würde ich die Eigenschaften manuell ändern müssen (auf allen außer Tags).

+0

http: // Stapelüberlauf.com/questions/537234/svn-checkout-export-only-die-Verzeichnis-Struktur Nur gefunden, vielleicht mit ls könnte helfen. –

Antwort

4

Eine Liste aller Verzeichnisse zu erhalten, ist vielleicht ein guter erster Schritt. Hier ist eine Möglichkeit das zu tun, ohne tatsächlich etwas heraus zu überprüfen:

  1. Erstellen Sie eine Textdatei mit dem Inhalt des Repository:

    svn list --depth infinity https://myrepository.com/svn/path/to/root/directory> everything.txt

  2. Trimmen Sie es auf nur die Verzeichnisse. Verzeichnisse werden alle mit einem Schrägstrich enden:

    grep „/ $“ everything.txt> just_directories.txt

In Ihrem Fall möchten Sie es in einem Texteditor öffnen und herausnehmen die Tag-Verzeichnisse, an denen sich deine Hooks ersticken.

Da Sie das Repository haben ausgecheckt Sie diese Datei direkt als Eingabe für einen propset Betrieb verwenden können:

svn propset myprop myvalue --targets just_directories.txt 

ich die Eigenschaften direkt auf den Repository-Versionen der Dateien, ohne zu überprüfen, sie setzen wollte zuerst, aber es hat nicht funktioniert. I voran jeden Verzeichnisnamen mit dem Repository-Pfad (https://myrepository.com/svn/path/to/root/directory) und versuchte svn propset Myprop mypropvalue --targets just_directories.txt aber es gab einen Fehler: svn: Einstellung Eigenschaft auf nicht-lokales Ziel ‚https://myrepository.com/svn/path/to/root/directory/subdir1‘ brauchen eine Basisrevision . Nicht sicher, ob es einen Weg gibt.

+0

Die Meldung "benötigt eine Basisrevision" liegt daran, dass Sie versionierte Eigenschaften für Repositories nur für Arbeitskopien nicht festlegen können. –

+0

Sieht so aus, als könnte das ursprüngliche Poster nicht das machen, was er wollte, ohne den ganzen Baum zu überprüfen. Übrigens können Sie mit Tortoise Eigenschaften für ein Verzeichnis im Repository festlegen, ohne es über den Repository-Browser auschecken zu müssen. Sie können jedoch nur jeweils ein Verzeichnis erstellen. – Darryl

4

Ich schrieb ein Skript, um dies mit den Pysvn Bindings (die sehr einfach zu bedienen sind) zu tun. Es ist unten, falls jemand es will.

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()) 
Verwandte Themen