Transférer un dépôt Subversion

Petit mémo rapide sur comment transférer un dépôt Subversion entre deux machines (par exemple) :

svnadmin dump /chemin/actuel/du/dépôt > dépôt.dump

Cette commande crée un "dump" du dépôt, qui inclue tous les fichiers et toutes les révisions (et donc peut être assez long à générer et conséquent en taille).

On transfère ensuite le fichier (scp, FTP, clé USB, pigeon voyageur...), et sur l'hôte de destination :

svnadmin create /chemin/du/nouveau/dépôt
svnadmin load /chemin/du/nouveau/dépôt < dépôt.dump

Et voilà !

Cachez cette requête que je ne saurais voir...

Une erreur idiote sur les requêtes MySQL : faire des calculs à la seconde près alors qu'on en a pas besoin.

Je m'explique. Soit une table d'article, on veut ceux de la semaine en cours :

SELECT * FROM articles
WHERE created_at >= <debut de semaine>;

On peut calculer <debut de semaine> de la manière suivante avec MySQL :

SELECT DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
AS debut_semaine;

En gros, on cherche la date (ie YYYY-mm-dd) du lundi comme la date du jour (NOW()) à laquelle on soustrait n jours, n étant égal au jour de la semaine (la numérotation commence à 0 pour le lundi). La fonction DATE() qui englobe le tout permet de comparer par rapport au lundi à minuit (par défaut, sans heure précisée, une date est considérée comme prise à minuit).

C'est bien joli tout ça... Mais les performances sont pourries. La requête prend chez moi 0.45 ms en moyenne, contre 0.15 ms pour les autres requêtes, qui sont parfois plus compliquées que cette requête. Pourquoi donc ?

Tout simplement parce que les autres requêtes sont effectuées contre le cache de MySQL, alors que celle-ci doit être recalculée à chaque fois. Pourquoi donc ?

A cause de NOW(), qui impose une précision inutile à la seconde (ou pire)... NOW() doit donc nécessairement être recalculée à chaque requête.

En pratique, est-ce que nous avons besoin d'une précision à la seconde ? Non. On cherche juste les articles de la semaine, donc qui datent de lundi minuit au maximum. Deux solutions s'offrent à nous : précalculer dans notre code la valeur de cette date butoir, ou bien utiliser CURDATE(), qui ne renvoie que la date actuelle, à la place de NOW(). Je précise que je n'ai pas testé la deuxième solution. J'ai choisi la première qui, codée en PHP, présente l'avantage d'être plus élégante.