¿Script para encontrar todos los comentarios TODO creados en una rama de git?

2 minutos de lectura

Avatar de usuario de Ben Dilts
ben dilts

Tengo una rama de funciones que ha crecido bastante. Hay bastantes comentarios TODO persistentes en nuestro código, pero me gustaría encontrar todos los TODO agregados al código (y no eliminados aún) en confirmaciones que aún no se fusionaron en maestro. ¿Cómo podría hacerlo?

  • Una situación similar: stackoverflow.com/q/52617314/470749

    – Ryan

    07/12/2018 a las 18:32

Simplemente puede comparar su rama con master y grep para TODO en la salida

git diff master..branch | grep "^+.*TODO"

Esto funciona muy bien para mí, suponiendo suficiente contexto en la línea TODO.

  • Esto no proporciona ubicaciones de archivos.

    -Mohit Jain

    19 de enero de 2018 a las 5:51

avatar de usuario de bimlas
bimlas

Puedes usar esto como un alias de Git:

git --no-pager diff -U0 master | \
grep '^+.*TODO' | \
sed 's/^+//' | \
git --no-pager grep -nFf - 2> /dev/null

Muestra las líneas TODO añadidas/modificadas de la rama actual (en comparación con master), pero tienes que git add antes de usarlo (debido a git grep).

Puede ser aún más útil si lo agrega a la status alias, por lo que estaría seguro de que no quedan TODO cuando vea el estado.

[alias]
  s = "!sh -c ' \
    [ $GIT_PREFIX ] && cd $GIT_PREFIX; \
    git status --short --branch $*; \
    git --no-pager diff -U0 master | \
    grep \"^+.*TODO\" | \
    sed \"s/^+//\" | \
    git --no-pager grep -nFf - 2> /dev/null' -"

Salida de ejemplo:

$ git s
## my-branch...origin/my-branch [ahead 2]
 M README.adoc
README.adoc:12: // TODO: Add screencast
README.adoc:26: // TODO: Advertise Asciidoctor

  • Para que este alias funcione en git worktrees, agregue export GIT_WORK_TREE=$(pwd); \ como la primera línea, antes de la [ $GIT_PREFIX ] && cd $GIT_PREFIX

    – Ene

    26 de julio de 2018 a las 8:55


avatar de usuario de knittl
tejer

git grep puede realizar una búsqueda de texto en un árbol dado. git branch --no-merged $commit le da todas las ramas no fusionadas en la confirmación nombrada. Combina los dos y listo (lo sé, no deberías usar git branch en scripts, pero no pude encontrar rápidamente una manera de decir git for-each-ref para considerar solo referencias no fusionadas. Si alguien tiene una solución, siéntase libre de comentar/editar)

git branch --no-merged master | cut -c3- | while read branch; do
  git grep 'TODO' "$branch"
done

avatar de usuario de zyf0330
zyf0330

Combine las dos respuestas anteriores, escribo este código para mostrar TODO en la confirmación HEAD.

git --no-pager diff -U0 HEAD^..HEAD | grep -o 'TODO.*$' | xargs -I{} git --no-pager grep -wn -P '{}$' 2>/dev/null

¿Ha sido útil esta solución?