SVNBOOK Chap4 Branching and Merging Vendor Branches svn load dirs.pl

De Framalang Wiki.

Cette page fait partie du projet Version control with subversion.


Pseudo Code Rôle Statut
Sub Versif SVF Traduction Fait
Hotshot92 1ere Relecture Fait
Validation



Sommaire

Titre

svn_load_dirs.pl

svn_load_dirs.pl

Paragraphe 1

Vendor drops that contain more than a few deletes, additions, and moves complicate the process of upgrading to each successive version of the third-party data. So Subversion supplies the svn_load_dirs.pl script to assist with this process. This script automates the importing steps we mentioned in the general vendor branch management procedure to make sure mistakes are minimized. You will still be responsible for using the merge commands to merge the new versions of the third-party data into your main development branch, but svn_load_dirs.pl can help you more quickly and easily arrive at that stage.

Les livraisons fournisseur qui contiennent plus de quelques suppressions, ajouts et déplacements compliquent le processus de mise à niveau à chaque version successive des données tierces. Subversion fournit donc le script svn_load_dirs.pl pour faciliter ce processus. Ce script automatise les étapes importantes que nous avons mentionnées dans la procédure générale de gestion des branches fournisseurs afin de minimiser les erreurs. Vous serez toujours responsable de l'utilisation des commandes merge pour fusionner les nouvelles versions des données tierces vers votre branche de développement principale, mais svn_load_dirs.pl peut vous aider à parvenir à cette étape plus rapidement et plus facilement.

Paragraphe 2

In short, svn_load_dirs.pl is an enhancement to svn import that has several important characteristics:

  • It can be run at any point in time to bring an existing directory in the repository to exactly match an external directory, performing all the necessary adds and deletes, and optionally performing moves, too.
  • It takes care of complicated series of operations between which Subversion requires an intermediate commit—such as before renaming a file or directory twice.
  • It will optionally tag the newly imported directory.
  • It will optionally add arbitrary properties to files and directories that match a regular expression.

En bref, svn_load_dirs.pl est une version améliorée de svn import qui possède plusieurs caractéristiques importantes :

  • On peut le lancer n'importe quand, dans le but d'amener un répertoire existant du dépôt à refléter exactement un répertoire extérieur, en effectuant toutes les opérations d'ajouts et de suppressions, et, en option, de déplacements.
  • Il prend soin de séries compliquées d'opérations entre lesquelles Subversion a besoin d'une livraison intermédiaire - telles qu'avant de renommer un fichier ou un dossier pour la deuxième fois.
  • En option, il peut étiqueter les nouveaux dossiers importés.
  • En option, il peut ajouter des propriétés arbitraires aux fichiers et dossiers qui correspondent à une expression régulière.

Paragraphe 3

svn_load_dirs.pl takes three mandatory arguments. The first argument is the URL to the base Subversion directory to work in. This argument is followed by the URL—relative to the first argument—into which the current vendor drop will be imported. Finally, the third argument is the local directory to import. Using our previous example, a typical run of svn_load_dirs.pl might look like this:

svnl_load_dirs.pl prend trois paramètres obligatoires. Le premier paramètre est l'URL du répertoire de base de Subversion à modifier. Ce paramètre est suivi par l'URL - relative au premier paramètre - dans laquelle la livraison fournisseur sera importée. Enfin, le troisième paramètre est le dossier local à importer. En utilisant notre exemple précédent, une exécution type de svn_load_dirs.pl pourrait ressembler à ceci :

Paragraphe 4

$ svn_load_dirs.pl http://svn.example.com/repos/vendor/libcomplex \
                   current                                        \
                   /path/to/libcomplex-1.1
...
$ svn_load_dirs.pl http://svn.exemple.com/depot/fournisseur/libcomplex \
                   actuel                                              \
                   /chemin/vers/libcomplex-1.1
...

Paragraphe 5

You can indicate that you'd like svn_load_dirs.pl to tag the new vendor drop by passing the -t command-line option and specifying a tag name. This tag is another URL relative to the first program argument.

Vous pouvez indiquer que vous aimeriez que svn_load_dirs.pl étiquette la nouvelle livraison fournisseur en passant l'option -t et en spécifiant un nom d'étiquette. Cette étiquette est aussi une URL relative au premier paramètre du programme.

Paragraphe 6

$ svn_load_dirs.pl -t libcomplex-1.1                              \
                   http://svn.example.com/repos/vendor/libcomplex \
                   current                                        \
                   /path/to/libcomplex-1.1
...
$ svn_load_dirs.pl -t libcomplex-1.1                              \
                   http://svn.exemple.com/depot/fournisseur/libcomplex \
                   actuel                                        \
                   /chemin/vers/libcomplex-1.1
...

Paragraphe 7

When you run svn_load_dirs.pl, it examines the contents of your existing “current” vendor drop and compares them with the proposed new vendor drop. In the trivial case, no files will be in one version and not the other, and the script will perform the new import without incident. If, however, there are discrepancies in the file layouts between versions, svn_load_dirs.pl will ask you how to resolve those differences. For example, you will have the opportunity to tell the script that you know that the file math.c in version 1.0 of libcomplex was renamed to arithmetic.c in libcomplex 1.1. Any discrepancies not explained by moves are treated as regular additions and deletions.

Lorsque vous lancez svn_load_dirs.pl, il examine le contenu de votre livraison fournisseur existante, "actuel", et le compare à la nouvelle livraison fournisseur. Dans le cas le plus trivial, aucun fichier ne sera présent dans une version sans l'être dans l'autre, et le script effectuera le nouvel import sans incident. Cependant, s'il y a des divergences dans l'agencement des fichiers entre les versions, svn_load_dirs.pl vous demandera comment résoudre ces différences. Par exemple, vous aurez l'opportunité d'indiquer au script que vous savez que le fichier math.c de la version 1.0 de libcomplex a été renommé en arithmetique.c dans libcomplex 1.1. Toutes les divergences qui ne sont pas liées à des renommages sont traitées comme des ajouts et des suppressions classiques.

Paragraphe 8

The script also accepts a separate configuration file for setting properties on files and directories matching a regular expression that are added to the repository. This configuration file is specified to svn_load_dirs.pl using the -p command-line option. Each line of the configuration file is a whitespace-delimited set of two or four values: a Perl-style regular expression against which to match the added path, a control keyword (either break or cont), and then optionally a property name and value.

Le script peut également prendre en compte un fichier de configuration séparé, permettant de spécifier des propriétés sur des fichiers et dossiers, correspondant à une expression régulière, qui vont être ajoutées au dépôt. Ce fichier de configuration sera indiqué à svn_load_dirs.pl en utilisant l'option -p en ligne de commande. Chaque ligne du fichier de configuration est un ensemble de deux ou quatre valeurs délimitées par des espaces : une expression régulière du style Perl à laquelle comparer le chemin ajouté, un mot clé de contrôle (soit break soit cont), et ensuite en option un nom de propriété et une valeur.

Paragraphe 9

\.png$              break   svn:mime-type   image/png
\.jpe?g$            break   svn:mime-type   image/jpeg
\.m3u$              cont    svn:mime-type   audio/x-mpegurl
\.m3u$              break   svn:eol-style   LF
.*                  break   svn:eol-style   native
\.png$              break   svn:mime-type   image/png
\.jpe?g$            break   svn:mime-type   image/jpeg
\.m3u$              cont    svn:mime-type   audio/x-mpegurl
\.m3u$              break   svn:eol-style   LF
.*                  break   svn:eol-style   native

Paragraphe 10

For each added path, the configured property changes whose regular expression matches the path are applied in order, unless the control specification is break (which means that no more property changes should be applied to that path). If the control specification is cont—an abbreviation for continue—matching will continue with the next line of the configuration file.

Pour chaque chemin ajouté, les modifications de propriétés configurées dont l'expression régulière correspond au chemin sont appliquées dans l'ordre, sauf si le terme de contrôle est break (ce qui signifie qu'aucune autre modification de propriété ne doit être appliquée à ce chemin). Si le terme de contrôle est cont (abrévation de continuer), la comparaison continuera avec la ligne suivante du fichier de configuration.

Paragraphe 11

Any whitespace in the regular expression, property name, or property value must be surrounded by either single or double quotes. You can escape quotes that are not used for wrapping whitespace by preceding them with a backslash (\) character. The backslash escapes only quotes when parsing the configuration file, so do not protect any other characters beyond what is necessary for the regular expression.

Tout espace faisant partie de l'expression régulière, du nom de la propriété ou de la valeur de la propriété doit être entouré d'apostrophes ou de guillemets. Vous pouvez banaliser les guillemets et apostrophes qui ne sont pas utilisés pour entourer un espace en les faisant précéder d'une barre oblique inversée (aussi nommée backslash ou antislash : \). L'antislash ne banalise que les guillemets et apostrophes pendant le traitement du fichier de configuration, donc pas la peine de protéger d'autres caractères au-delà de ce qui est nécessaire pour l'expression régulière.