Les solutions proposées ne correspondaient pas exactement à mes besoins, ce qui a permis de résoudre les problèmes suivants mon question.
(
START_DIFF=abc123
END_DIFF=123dcf
# loop over all the files that have changed inside the diff
# you can add a `| grep '<ext>$'` to the end of `--name-only`
# if you need to be more aggresive with the filtering / or
# make it go faster...
for file in $(git diff $START_DIFF $END_DIFF --name-only); do
# loop over every line of the diff FOR that file.
while IFS= read -r line; do
# prepend the file name to every line
echo "$file:$line"
done < <(git diff $START_DIFF $END_DIFF $file)
done
) | grep what-youre-looking-for
Je n'ai pas réussi à faire fonctionner les numéros de ligne, mais je n'en avais pas vraiment besoin pour les faire fonctionner. Le nom de fichier ajouté au préalable me suffisait.
C'est exactement mon problème :
Trouvez tous les fichiers qui ont ajouté soit un from __future__ import ..
ou un -*- coding: utf-8 -*-
sur plus de 70 dossiers.
(
START_DIFF=branch-a
END_DIFF=HEAD
for file in $(git diff $START_DIFF $END_DIFF --name-only); do
while IFS= read -r line; do
echo "$file:$line"
done < <(git diff $START_DIFF $END_DIFF $file)
done
) | grep ':+' | awk '(/import/ && /__future/) || (/coding/)'
Le résultat ressemble à ceci :
....
app/tests/test_views.py:+# -*- coding: utf-8 -*-
app/tests/test_views.py:+from __future__ import absolute_import
app/tests/test_views.py:+from __future__ import division
app2/tests/test_views.py:+from __future__ import division
...