Perforce Plugin - Trouble with environment in execution of job?

pfee at pfee at
Tue Nov 16 00:28:34 UTC 2010

Morten Volden wrote:

> Hi All
> A little while ago I asked on this list about the status of a Perforce
> plug-in for Kdevelop4. Since no one replied I take it that development on
> such a plug-in is not going on at the moment. So I started writing a
> perforce plug-in.
> My current status in short:
> I have the plug-in loaded, and it will show in the context menu - So far
> so good.
> The plugin overrides pure virtual functions in ICentralizedVersionControl
> and in IBasicVersionControl. E.g. for the edit function I do something
> like this:
> KDevelop::VcsJob* perforceplugin::edit(const KUrl& localLocation)
> {
>     QFileInfo fsObject(localLocation.toLocalFile());
>     QString filename(fsObject.fileName());
>     QDir path(fsObject.dir());
>     DVcsJob* job = new DVcsJob(path, this, KDevelop::OutputJob::Verbose);
>     if(job)
>         kDebug() << "After Creating job, the path is " << path.path() <<
> "and the filename is " << filename << "... And the jobs dir is: " <<
> job->directory().path();
>     *job << "p4" << "edit" << filename;
>     return job;
> }
> When Trying to edit one of the files in my perforce testbed the kDebug
> gives me the following output:
> perforceplugin::edit: After Creating job, the path is
> "/home/mvo/testbed/perforcetest" and the filename is  "main.cpp" ... And
> the
> jobs dir is:  "/home/mvo/testbed/perforcetest"
> Which leads me to believe the DVcsJob I am creating has the correct CWD
> (i.e. /home/mvo/testbed/perforcetest ). However, the command issued by the
> job fails for reasons that escape me (as can be seen in the screenshot
> below).
> The perforce server and port are specified in the file p4config.txt (p4
> will look for its settings in a file of that name).
> If I issue the same command in a kdevelop konsole, it works (see konsole
> window in screenshot below)
> Can anyone shed some light on what the difference is between the command
> in the DvcsJob and the command issued in the terminal?
>  Thanks.
> Morten

Looks like the P4PORT is not set when the p4 command is invoked.

Btw, the "p4 info" command is helpful when debugging as it doesn't depend on 
the rest of your client setup, just P4PORT.

Also, rather than fragile environment variables, you can specify the p4 port 
as a command line argument.  That may be easier to pass through DVcsJob - 
especially if there's a bug in environment variable handling.

e.g. p4 -p myserver:1666 info

I see command line arguments and environment variables as cousins of 
function arguments and global variables.  Global variables aren't nice.

... and good luck with the plugin, it'll be good to get Perforce support.



More information about the KDevelop-devel mailing list