Craig Thayer wrote:
David,
Thank you for your reply.
Yes, I have tested the script on the Subversion server and it runs just fine.
As root, or as the user the repo is accessed as?
/root isn't usually accessible by any user *other* than root in my
experience, and most of the documentation assumes that svnserve or
Apache (and therefore, all of your hook scripts) are running as one of:
-> dedicated svn user
-> Apache runtime user
-> various non-root users if using svn+ssh with system users
And I agree it is obvious that Perl is including the directories to my
libraries (so the use lib statements are working as designed as you stated).
However, it is Perl that is complaining that it can't find my libraries even
though they are clearly in the @INC path. I have never run into this situation
before and I believe it has to do with the fact that the Subversion hook is
running with no environment defined, but why it makes Perl not able to find my
libs ONLY when it runs as a Subversion hook I haven't a clue.
I tried a quick test creating an empty module in /root:
===
package Testme;
our $foobar = "foo!";
===
then ran
perl -e 'use lib "/root"; use Testme;'
as root and as non-root.
Running as root succeeded, non-root failed with "Can't locate Testme.pm
in @INC...".
I suspect you'd still have the issue even if you hardcoded the absolute
path; Perl can't find the module because it can't read the directory
it's in.
I have temporarily resolved the problem by moving my libraries to the
/usr/lib/perl5/site_perl path (which I didn't want to do) which is predefined
by my Perl installation in @INC. The script now runs via the Subversion hook
and finds my libraries just fine. I would, however, like to understand what
causes Perl to not recognize my added paths to @INC when it runs as a
Subversion hook.
perl -V should show you the standard include paths; custom local
modules intended for general use should usually go somewhere under
/usr/local/lib, and I've usually seen custom modules for specific uses
get bundled into /usr/share/<app> or /usr/lib/<app>, along with a
matching "use lib" in the executables.
-kgd