MacOS : réparer Subversion quand svn ne répond plus

Aujourd’hui, je mets à jour un de mes plugins WordPress sur le dépôt officiel, et Subversion décide soudainement de ne plus répondre sous macOS.

La commande habituelle :

svn stat

renvoie simplement :

-bash: svn: command not found

Ou, selon la version de macOS et l’état de Homebrew, on peut tomber sur une erreur plus spectaculaire :

dyld: Symbol not found: _apr_crypto_block_cleanup
Referenced from: /usr/local/Cellar/subversion/1.14.x/lib/libsvn_subr-1.0.dylib
Expected in: /usr/lib/libaprutil-1.0.dylib
Abort trap: 6Code language: JavaScript (javascript)

Ah tiens, il y avait longtemps. Entre macOS, Xcode, les Command Line Tools et Homebrew, la chaîne d’outils développeur a parfois le sens du timing. Généralement, le problème vient d’une mise à jour qui a supprimé ou cassé le binaire svn, ou d’une dépendance Homebrew mal liée.

Voici comment remettre Subversion en état sur macOS, proprement, sans perdre une heure à insulter son terminal. Même si, soyons honnêtes, il l’a un peu cherché.

Pourquoi SVN disparaît sous macOS ?

Pendant longtemps, macOS et Xcode fournissaient plusieurs outils de développement en ligne de commande, dont Subversion. Ce n’est plus forcément le cas aujourd’hui.

Apple a retiré le support des outils Subversion fournis avec certaines versions des Command Line Tools. On trouve encore des rapports d’utilisateurs indiquant que la commande svn n’est plus fournie après mise à jour de Xcode ou des Command Line Tools. Voir cette discussion sur la disparition de SVN dans les Command Line Tools.

Résultat : si vous utilisez SVN pour publier un plugin WordPress sur WordPress.org, pour maintenir un vieux dépôt, ou pour interagir avec une base de code historique, il faut installer Subversion séparément.

La méthode la plus simple sur macOS consiste à passer par Homebrew.

Vérifier si svn est installé

Commencez par vérifier si la commande svn existe :

command -v svn

Puis vérifiez la version :

svn --version

Si le terminal répond :

svn: command not foundCode language: HTTP (http)

ou :

-bash: svn: command not found

alors Subversion n’est pas disponible dans votre PATH, ou il n’est tout simplement pas installé.

Installer Subversion avec Homebrew

Si Homebrew est installé, la commande est simple :

brew install subversion

Le dépôt Homebrew fournit une formule subversion, ce qui en fait aujourd’hui l’une des méthodes les plus pratiques pour récupérer svn sous macOS. Voir la formule Homebrew Subversion.

Une fois l’installation terminée, ouvrez un nouveau terminal ou rechargez votre shell, puis testez :

svn --version
svn stat

Si vous êtes dans une copie de travail SVN, svn stat doit afficher les fichiers modifiés, ajoutés ou supprimés. Si rien n’est modifié, la commande peut ne rien afficher. C’est bon signe. Oui, parfois l’absence de réponse est une réponse civilisée.

Vérifier le PATH Homebrew

Si brew install subversion réussit mais que svn reste introuvable, le problème vient probablement du PATH.

Vérifiez où Homebrew installe ses binaires :

brew --prefix
brew --prefix subversion
brew list subversionCode language: PHP (php)

Sur Mac Intel, Homebrew utilise souvent :

/usr/local/bin

Sur Apple Silicon, Homebrew utilise généralement :

/opt/homebrew/bin

Vérifiez votre PATH :

echo "$PATH"Code language: PHP (php)

Si /opt/homebrew/bin ou /usr/local/bin n’apparaît pas, ajoutez Homebrew à votre shell.

Pour Apple Silicon avec Zsh :

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"Code language: PHP (php)

Pour Mac Intel avec Zsh :

echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"Code language: PHP (php)

Puis relancez :

command -v svn
svn --version

Corriger l’erreur dyld “Symbol not found: _apr_crypto_block_cleanup”

Après installation, il peut arriver que svn soit trouvé, mais plante immédiatement avec une erreur dyld :

dyld[62247]: Symbol not found: _apr_crypto_block_cleanup
  Referenced from: /usr/local/Cellar/subversion/1.14.2/lib/libsvn_subr-1.0.dylib
  Expected in: /usr/lib/libaprutil-1.0.dylib
Abort trap: 6Code language: JavaScript (javascript)

Cette erreur indique un conflit ou une mauvaise liaison autour d’APR/APR-util, une dépendance utilisée par Subversion. On retrouve ce problème dans plusieurs rapports Homebrew et discussions techniques autour de Subversion sur macOS. Voir une discussion Homebrew sur l’erreur _apr_crypto_block_cleanup.

La correction la plus simple consiste à réinstaller apr-util, puis éventuellement Subversion :

brew reinstall apr-util
brew reinstall subversion

Ensuite, vérifiez :

svn --version

Si tout va bien, svn doit afficher sa version et les modules disponibles.

Mettre Homebrew à jour avant de réinstaller

Si l’erreur persiste, commencez par mettre Homebrew à jour et vérifier l’état de l’installation :

brew update
brew doctor

Puis relancez une réinstallation complète des dépendances utiles :

brew reinstall apr
brew reinstall apr-util
brew reinstall subversion

Si Homebrew signale des problèmes de permissions, de préfixe ou de liens cassés, corrigez-les avant d’insister. Sinon, vous risquez de refaire trois fois la même installation en espérant un résultat différent. Le terminal adore ce genre d’optimisme.

Forcer le relink si nécessaire

Dans certains cas, les liens Homebrew peuvent être cassés. Vous pouvez tenter :

brew unlink subversion
brew link subversion

Si Homebrew refuse à cause de fichiers existants :

brew link --overwrite subversion

Vérifiez ensuite quel binaire est utilisé :

which svn
ls -l "$(which svn)"
svn --versionCode language: JavaScript (javascript)

Le chemin doit pointer vers Homebrew, par exemple /opt/homebrew/bin/svn ou /usr/local/bin/svn.

Réparer les Command Line Tools si macOS s’emmêle

Si vous obtenez un message du type :

svn: error: The subversion command line tools are no longer provided by XcodeCode language: HTTP (http)

ou si macOS semble utiliser un ancien wrapper Apple au lieu du binaire Homebrew, vérifiez les outils Xcode :

xcode-select -p
xcode-select --install

Ensuite, assurez-vous que le binaire Homebrew passe avant les chemins Apple dans votre PATH :

type -a svn
echo "$PATH"Code language: PHP (php)

Si /usr/bin/svn apparaît avant Homebrew, votre shell risque d’appeler le mauvais binaire ou un stub Apple obsolète. Corrigez l’ordre du PATH dans ~/.zprofile ou ~/.zshrc.

Solution rapide

Dans la majorité des cas, cette séquence suffit :

brew update
brew install subversion
brew reinstall apr-util
brew reinstall subversion

command -v svn
svn --version

Sur une machine Apple Silicon, si svn reste introuvable, ajoutez Homebrew au PATH :

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"Code language: PHP (php)

Sur Mac Intel :

echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"Code language: PHP (php)

Tester SVN dans un dépôt WordPress.org

Une fois Subversion réparé, retournez dans votre copie de travail WordPress.org :

cd /chemin/vers/votre-plugin-svn

Puis testez :

svn stat

Exemple de retour attendu :

M       trunk/better-comments.php
M       trunk/changelog.txt
M       trunk/composer.lock
M       trunk/includes/options.php
M       trunk/readme.txt
M       trunk/vendor/composer/ClassLoader.php

Si vous voyez vos fichiers modifiés, SVN fonctionne à nouveau.

WordPress.org utilise toujours Subversion pour le dépôt officiel des plugins. La documentation officielle du Plugin Handbook explique le workflow SVN pour publier et maintenir une extension dans le répertoire WordPress.org. Voir la documentation WordPress.org sur Subversion.

Commandes SVN utiles pour un plugin WordPress

Pour mémoire, voici les commandes les plus utiles quand on maintient un plugin WordPress sur le dépôt officiel.

Voir l’état des fichiers :

svn stat

Ajouter de nouveaux fichiers :

svn add chemin/du/fichier.php

Supprimer un fichier suivi :

svn delete chemin/du/fichier.phpCode language: JavaScript (javascript)

Voir les différences :

svn diff

Envoyer les changements :

svn commit -m "Update plugin files"Code language: JavaScript (javascript)

Créer un tag de version :

svn cp trunk tags/1.2.3
svn commit -m "Tag version 1.2.3"Code language: JavaScript (javascript)

Plusieurs tutoriels récents sur le workflow WordPress.org rappellent encore ce passage obligé par SVN pour publier les plugins. Voir un exemple de workflow SVN pour plugin WordPress.

Nettoyer une installation Homebrew trop cassée

Si rien ne fonctionne, vérifiez d’abord ce que Homebrew raconte :

brew doctor
brew config

Sur certains systèmes, les problèmes viennent d’un préfixe Homebrew non standard, d’une migration Intel vers Apple Silicon, d’un vieux /usr/local conservé, ou d’un mélange entre Rosetta et ARM.

Homebrew a déjà signalé que certaines bouteilles binaires dépendent du préfixe attendu et que les installations avec un préfixe non standard peuvent provoquer des problèmes. Voir cette discussion Homebrew sur les préfixes non standards.

Sur Apple Silicon, évitez de mélanger sans raison un Homebrew Intel sous Rosetta dans /usr/local et un Homebrew ARM dans /opt/homebrew. Cela peut fonctionner, mais cela peut aussi transformer une simple commande svn en chasse au trésor dynamique.

Résumé rapide

Pour réparer SVN sur macOS :

  1. vérifiez si svn existe avec command -v svn ;
  2. installez Subversion avec brew install subversion ;
  3. corrigez le PATH si le binaire reste introuvable ;
  4. réinstallez apr-util si vous avez l’erreur _apr_crypto_block_cleanup ;
  5. réinstallez Subversion si nécessaire ;
  6. vérifiez avec svn --version ;
  7. retournez dans votre dépôt et lancez svn stat.

La séquence courte :

brew update
brew install subversion
brew reinstall apr-util
brew reinstall subversion
svn --version

Conclusion

Si Subversion ne répond plus sous macOS, le problème vient généralement d’un binaire absent, d’un PATH incomplet ou d’une dépendance Homebrew cassée.

Pour une erreur svn: command not found, installez Subversion avec Homebrew et vérifiez que le chemin Homebrew est bien chargé par votre shell.

Pour l’erreur dyld: Symbol not found: _apr_crypto_block_cleanup, réinstallez apr-util, puis Subversion.

Une fois svn --version fonctionnel, votre workflow de publication WordPress.org peut reprendre normalement. Et avec un peu de chance, vous pourrez enfin faire ce que vous étiez venu faire au départ : publier votre plugin, pas débugger votre Mac.

Sources utiles

Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

Opinions