Am 02.01.2015 um 18:03 schrieb Robert Dailey: > On Fri, Jan 2, 2015 at 10:49 AM, Robert Dailey <rcdailey.lists@xxxxxxxxx> wrote: >> I have a function like so: >> >> void MyClass::SomeFunction(int someParameter) >> { >> // Stuff changed in here >> } >> >> When I do `git diff` on the file containing this function, I get a >> chunk showing some changed code in this function somewhere in the >> middle of the body. However, the chunk header shows my root namespace >> name in the file instead of the function header: >> >> @@ -144,15 +149,22 @@ namespace Utils >> >> What I expect to see: >> >> @@ -144,15 +149,22 @@ void MyClass::SomeFunction(int someParameter) >> >> I've tried various regular expressions that work in regex testers I >> use against this function signature, however they do not work when I >> apply them to my config: >> >> [diff "cpp"] >> xfuncname = >> "^\\s*[\\w_][\\w\\d_]*\\s*.*\\s*[\\w_][\\w\\d_]*\\s*\\(.*\\)\\s*$" >> >> File name is "foo.cpp", I even added it to my git attributes file: >> >> *.cpp diff=cpp >> >> Using the regex above, my chunk headers come back blank. Why is it >> showing namespace? How do I make this match the nearest function >> header? > > Oopsie, I didn't realize the regex must be POSIX compatible. I've > updated the regex to this: > https://www.regex101.com/r/kP3dM6 > > The test seems to work; however git gives me an error with the regex > when I do a diff: > > $ git diff Core > fatal: Invalid regexp to look for hunk header: > ^[[:space:]]*[[:word:]_][[:word:][:digit:]_]*[[:space:]]*.*[[:space:]]*[[:word:]_][[:word:][:digit:]_]*[[:space:]]*\(.*\)[[:space:]]*$ > > Here is how it is stored in my .gitconfig: > > [diff "cpp"] > xfuncname = > "^[[:space:]]*[[:word:]_][[:word:][:digit:]_]*[[:space:]]*.*[[:space:]]*[[:word:]_][[:word:][:digit:]_]*[[:space:]]*\\(.*\\)[[:space:]]*$" > Perhaps there is a pair of parentheses missing that capture text for the hunk header? I you intended that to be the part inside \(...\), then that is wrong. Use unescapted parentheses. There are two catch-all .* in your pattern. That is very suspicious, particularly since the first one is outside the meant-to-be capturing parentheses. -- Hannes -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html