Línea de command p4 equivalente a "git log -p"?

A menudo uso git log -p <file> o git log -p <directory> para get un resumen completo de los cambios en un file o set de files. Muestra un historial de las confirmaciones que afectan a los files, junto con una diferencia unificada de cada confirmación.

Usando Perforce puedo hacer p4 changes <file> o p4 changes <directory>/... para get una list de confirmaciones. Pero no parece haber una opción para mostrar los diffs correspondientes.

¿Hay algún equivalente de Perforce que pueda usar? Si las secuencias de commands shell son necesarias, una function totalmente funcional sería agradable.

Si quieres saber por qué me pierdo la function, aquí hay algunas cosas que git log -p me permite hacer muy rápido:

  • ¿ .cpp fue el último file .cpp que se va a modificar?
  • encontrar todos los commits donde la cadena FOO ha sido agregada a un file.
  • una function acaba de ser depreciada; ¿Con qué lo replaceon otros desarrolladores?
  • en general, solo sé lo que sucedió recientemente en un directory determinado.

Aquí hay una aproximación razonable:

 p4log () { p4 changes "$1" | awk '{print $2}' | xargs -i p4 describe -du {} | less -F } 

Tenga en count que a diferencia de git log -p , un argumento es obligatorio. Puede dar un patrón como p4log ... para ejecutarlo contra todo lo que está bajo el directory actual recursivamente.

Detalles

p4 changes "$1" : obtenga resúmenes de cambios de una línea (del más reciente al más antiguo) para los files que coincidan con el patrón.

awk '{print $2}' : Extraiga el número de cambio.

p4 describe -du CHANGE [$CHANGE2 etc] : p4 describe -du CHANGE [$CHANGE2 etc] la descripción completa del cambio y los diffs. El -du especifica el formatting de diff unificado, que es el más cercano al formatting de diferencia de git.

xargs -i p4 describe -du {} : ejecuta el command describe con todos los numbers de cambio como sus arguments.

less -F : página si es más larga que una pantalla, volcar a la terminal de lo contrario. Git canaliza la mayor parte de su salida a través de less -F por defecto