git log -G<regex> -p
to wspaniałe narzędzie do przeszukiwania historii bazy kodów w poszukiwaniu zmian pasujących do określonego wzorca. Jednak zlokalizowanie odpowiedniego przystojniaka na wyjściu diff / patch w morzu głównie nieistotnych przystani może być przytłaczające.
Oczywiście możliwe jest przeszukanie wyjściowego git log
ciągu / wyrażenia regularnego, ale to niewiele robi, aby zredukować wizualny szum i rozproszenie wielu niepowiązanych zmian.
Czytając dalej git log
, widzę, że jest to --pickaxe-all
, co jest dokładnym przeciwieństwem tego, czego chcę: poszerza wyjście (do całego zestawu zmian), podczas gdy chcę je ograniczyć (do określonego przystojniaka).
Zasadniczo szukam sposobu na „inteligentne” parsowanie pliku różnicowego / łaty do poszczególnych przystojniaków, a następnie przeprowadzenie wyszukiwania dla każdego przystojniaka (celowanie tylko w zmienione linie), odrzucenie kawałków, które nie pasują, i wysłanie tych to robi.
Czy istnieje takie narzędzie, jakie opisuję? Czy istnieje lepsze podejście do uzyskania pasujących / dotkniętych porcji?
Niektóre wstępne badania, które przeprowadziłem ...
Gdyby było to możliwe w
grep
przypadku wyjścia diff / patch i uczynienie wartości opcji kontekstowych dynamicznymi - powiedzmy, przez wyrażenia regularne zamiast zliczania linii - może to wystarczyć. Alegrep
nie jest zbudowany w ten sposób (niekoniecznie wymagam tej funkcji).Znalazłem pakiet patchutils , który początkowo wydawał się odpowiedni dla moich potrzeb. Ale po przeczytaniu jego
man
stron narzędzia wydają się nie obsługiwać pasujących fragmentów na podstawie wyrażeń regularnych. (Mogą zaakceptować listę przystojniaków, choć ...)W końcu natknąłem się na splitpatch.rb , który wydaje się dobrze radzić sobie z parsowaniem łatki, ale trzeba by go znacznie rozszerzyć, aby obsługiwać łatki do czytania
stdin
, dopasowując pożądane fragmenty, a następnie generując fragmenty.