Contenu

Enlever les annotations SVN "@version $Id$" de son code source

Contenu
Avertissement
Dernière modification de cet article le 2016-10-03, le contenu pourrait être dépassé/obsolète.

Avant vous utilisiez SVN et marquiez chaque version de vos fichiers d’un pratique @version $Id$ ? Mais voilà, ça fait un moment que vous avez délaissé SVN pour mieux autre chose (par exemple Git sur GitLab) et ces annotations n’ont plus lieu d’être ?

Vous les apercevez du coin de l’œil mais n’y faites plus trop attention parce que elles font partie du paysage mais surtout parce que ça vous prendrait trop de temps de toutes les retirer. Vous vous dites que, petit à petit, les collègues qui seront amenés à travailler sur ces fichiers annotés vont retirer ce vestige du passé au passage ?

Et bien non : ils ne vont pas le faire, car s’ils modifient le fichier c’est pour bugfixer ou rajouter des features pas nettoyer les annotations et qu’un :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
--- a/setup.php
+++ b/setup.php
@@ -1,6 +1,5 @@
 <?php
 /*
- * @version $Id$
[...]
``` dans leur commit ferait tâche (personne ne

<del>fait</del> devrait faire ça, hein ?)

Alors si vous êtes propres vous avez une issue quelque part (comprendre &laquo; Priorité "very-low" &raquo;), mais la flemme de passer sur tout les fichiers ou de chercher la commande qui ira bien.

Voici deux commandes pour trouver puis nettoyer vos fichiers source (ici en PHP, CSS et JS mais vous saurez facilement adapter) :

```Shell
# List occurences of &quot;* @version $Id$&quot; or &quot;* @version $Id .... $&quot; except the one in vendor/ or .git directories
grep -RIi '^\s*\*\s*@version\s\+\$Id.*\$$' | grep -v -e &quot;^vendor/&quot; -e &quot;^.git/&quot;
1
2
3
4
5
6
7
8
# Removes &quot;* @version $Id$&quot; and &quot;* @version $Id .... $&quot; (using sed) from
# .php, .phtml, .css and .js files
# except the one from vendor/ or .git directories
find . \
    -type f \
    \( -iname &quot;*.php&quot; -or -iname &quot;*.phtml&quot; -or -iname &quot;*.css&quot; -or -iname &quot;*.js&quot; \) -and \
    \( -not -path &quot;./vendor/*&quot; -and -not -path &quot;./.git/*&quot; \) \
    -exec sed --in-place --regexp-extended '/^\s*\*\s*@version\s+\$Id.*\$$/d' {} \;

Y’a plus qu’à faire votre :

1
git add -u && git commit -m 'Removes Version $Id$ SVN annotations'

ou similaire.