Code search in Gforge AS 5.7
One of the new features of Gforge AS 5.7 is the support for source code indexing/search using doxygen and tsearch2 in both Subversion and CVS repositories. In this article, we’ll go trough a complete example to show the highlights of this feature.
Setup
In order to use this feature, you’ll need doxygen. You can get it from your distribution repositories or compile it from source.
After installing doxygen, you may need to edit your /etc/gforge/gforge.conf file. Look for the $config['doxygenPath']
configuration variable, and change it as need.ed Then, recreate the configuration cache.
#cd /opt/gforge5 && php bin/create_config_cache.php
Setting the path for code indexing
If you want to enable the code indexing in a given project, you’ll need to set one or more source code paths. In this example we will use subversion, but you can accomplish the same with CVS.
Navigate to SVN->Admin->Code search paths, you will see a screen like this
In this example we will use the source code from pgadmin, a graphical client for PostgreSql.
We are interested in the code under /trunk/pgadmin path, so let’s proceed to add the path.
In this case we are using C++, but doxygen can handle several other languages (C, Java, Objective-C, Python,PHP, etc), check the doxygen documentation for a complete list of supported languages.
Now that we have configured the path a cronjob executed on a daily basis will index all the code found under the specified path. However, you can run the indexing script manually:
#cd /opt/gforge5
#php bin/gforge cronjobs scm_index
Some searching examples
Now that we have all the source code indexed, we can search for classes, methods and properties in the last revision.
Let’s search for the class PgsRecord
The search will return a long list of methods and properties for this class and the class itself, this is just a small sample
The fields returned are self-explanatory. Comments will be shown for a given item if there is any.
You can search for a specific method or property inside a given class by using :: or . operators (ie: PgsRecordset::insert and PgsRecordset.index are equivalents)
In our final example, we will use the tsearch2 operators. Suppose you want to look for setters in PgsRecord or PgsParser classes, we can use the tsearch2 OR operator (|)