Finding a project's root directory

As I continue to work project development tools I repeatedly run into
the case of needing a reliable way to identify the project’s root
directory, i.e. to ascend up the directories until it is found.

So far the best idea of come up with is to look for .git/, .hg/ or as
a fallback, README*.

Have any ideas for more reliable means?

On Thu, Jun 24, 2010 at 03:43:09AM +0900, Intransition wrote:

As I continue to work project development tools I repeatedly run into
the case of needing a reliable way to identify the project’s root
directory, i.e. to ascend up the directories until it is found.

So far the best idea of come up with is to look for .git/, .hg/ or as
a fallback, README*.

Have any ideas for more reliable means?

I use the parent directory of the lib/ directory as project root.

-jeremy

On Wed, Jun 23, 2010 at 12:43 PM, Intransition [email protected]
wrote:

As I continue to work project development tools I repeatedly run into
the case of needing a reliable way to identify the project’s root
directory, i.e. to ascend up the directories until it is found.

So far the best idea of come up with is to look for .git/, .hg/ or as
a fallback, README*.

In cases where I actually need this, I usually have a “root” method
defined
on the class/module that represents the project. This is usually
calculated
from FILE based off the file where the “root” method is defined. I
prefer to have this be the only usage of FILE in the entire project,
if
possible.

On Jun 23, 6:43 pm, Jeremy H. [email protected] wrote:

I use the parent directory of the lib/ directory as project root.
Thanks Jeremy. I’m using lib/ as the fallback in place of README*.

I also added a .root/ check to .git and .hg, so if all else fails
people can add that to their project.

On Jun 23, 7:02 pm, Tony A. [email protected] wrote:

In cases where I actually need this, I usually have a “root” method defined
on the class/module that represents the project. This is usually calculated
from FILE based off the file where the “root” method is defined. I
prefer to have this be the only usage of FILE in the entire project, if
possible.

I need to find the root external to the project itself. In fact I
would be very weary of ever looking up a project’s root from within
the project’s code. Different install setups will not necessarily keep
a project intact.