funnel hash calculation to single location
don't initialize RelativePathAdapter if no relative paths are found (#272)