Existe-t-il un moyen de trouver une révision SVN en recherchant une chaîne de texte qui a été supprimée dans le fichier? Je connais le texte exact à rechercher et le fichier à consulter, mais il existe des centaines de révisions.
Réponses
Trop de publicités?En s'appuyant sur le script de khmarbaise, j'ai trouvé ceci:
#!/bin/bash
file="$1"
REVISIONS=`svn log $file -q --stop-on-copy |grep "^r" | cut -d"r" -f2 | cut -d" " -f1`
for rev in $REVISIONS; do
prevRev=$(($rev-1))
difftext=`svn diff --old=$file@$prevRev --new=$file@$rev | tr -s " " | grep -v " -\ \- " | grep -e "$2"`
if [ -n "$difftext" ]; then
echo "$rev: $difftext"
fi
done
passez le nom de fichier et la chaîne de recherche sur la ligne de commande:
xyz.sh "filename" "text to search"
svn diff me donne à la fois le tour où il est ajouté et où il est supprimé; Je vais le laisser ici au cas où il serait utile à quiconque. Il y a un message d'erreur lors de la dernière révision dont je ne sais pas comment me débarrasser (j'ai encore beaucoup de bash à apprendre :)) mais les nombres de tours sont corrects.
juste un petit script bash qui filtre les lignes modifiées ... Si vous changez pom.xml dans votre fichier, avec une URL supplémentaire, vous avez ce dont vous avez besoin ... (Si vous êtes sur le système Unix). Mettez ce qui suit dans un fichier de script (xyz.sh) et effectuez un filtre sur la sortie.
#!/bin/bash
REVISIONS=`svn log pom.xml -q|grep "^r" | cut -d"r" -f2 | cut -d" " -f1`
for rev in $REVISIONS; do
svn blame -r$rev:$rev pom.xml | tr -s " " | grep -v " -\ \- "
done
xyz.sh | grep "Text you are searching for"
L'impression sera quelque chose comme:
256 ......
Le 256 est la révision dans laquelle le changement a été effectué.
J'aime blameall.py .
Sa sortie pour un fichier contient toutes les lignes existantes et supprimées afin que je puisse voir les lignes supprimées dans le contexte environnant.