Question

Is there some way to analyze C++ mercurial changeset to figure out for example the function or class modified?

I would like to get statistics of the amount of revisions of some part of the code: methods, classes, files, folders, etc.

Was it helpful?

Solution

Not sure how good this is when working with C++, but Mercurial optionally uses git-format diffs. Both git diff and hg diff have an option to view the function in which a change was made... in Mercurial you can use hg diff -p:

> hg diff
diff --git a/sandbox/sandbox.cpp b/sandbox/sandbox.cpp
--- a/sandbox/sandbox.cpp
+++ b/sandbox/sandbox.cpp
@@ -86,6 +103,8 @@
... diff output removed for conciseness

> hg diff -p
diff --git a/sandbox/sandbox.cpp b/sandbox/sandbox.cpp
--- a/sandbox/sandbox.cpp
+++ b/sandbox/sandbox.cpp
@@ -86,6 +103,8 @@ int _tmain(int argc, _TCHAR* argv[])
... diff output removed for conciseness

Notice that with the -p option, each chunk of the diff output includes the containing functions (_tmain in this case). Note that new functions don't appear to include that information.

I'm not sure how you would use this, mind. Perhaps grep the output for lines containing @@.*\(.*\) to get a list of functions?

OTHER TIPS

VCS are generally contents-agnostic, they know about lines of text and nothing (much) else. To add the burden of knowing about C functions, C++ classes, FORTRAN subroutines/functions, ... ends up in emacs-land. Don't go there...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top