I do not know what a SCC provider is required to do
That is spelled out by the MS-SCCI specification and all SccXXX functions shown in the log file are part of that specification.
nor do I know how PowerBuilder works let alone the interaction between the two.
One of the problems is PowerBuilder have their own version of the MS-SCCI specification but it is not publicly documented.
The SccQueryInfoEx is an addition made to the MS-SCCI by PowerBuilder for PowerBuilder but there is no public definition on how it is meant work
I do know with Starteam we do not have these performance issues. Starteam also is using a SCC plugin.
Obviously Starteam knows something more about PowerBuilder than we don't. They might even have the proper definition of the SccQueryInfoEx function
There are no issues in Visual Studio (Our VS projects are much much smaller though) so lets not compare apples to oranges.
The size of the project might be an issues but as I pointed out I have a 700+ file Visual Studio project and I see very little slow down.
I am not sure what exactly PowerBuilder requested the plugin to update or if that request asked for the whole directory or simply a list of files.
All the SccXXX function shown in the log are instances of PowerBuilder calling the plugin, requesting information.
Take your expand issue. PowerBuilder called the SccQueryInfoEx function 88 times asking for information. Why is it doing that
I do know your code is creating the below command that results in the entire PBL being refreshed including objects not part of the Workspace.
Lets consider this small section of the log that you are referring to:
Code: Select all
[Mon Mar 28 14:21:18 2016] >> * Command: svn.exe --non-interactive --trust-server-cert --no-auth-cache --username JustinWolbeck --show-updates --verbose status --depth files --xml .
[Mon Mar 28 14:21:18 2016] >> * Directory: c:\PHDoc_Source\CurrentVersion\PHDoc_Core\chs\phd_app\
[Mon Mar 28 14:21:18 2016] >> * Valid: Yes
[Mon Mar 28 14:21:20 2016] >> Result: 0 Status Code: 0 (0x0)
[Mon Mar 28 14:21:21 2016] >> *** XML Parsing Started ***
[Mon Mar 28 14:21:21 2016] >> File XML Details: ---------------------------------------------------------------------
[Mon Mar 28 14:21:21 2016] >> File Path: upload_g.png
[Mon Mar 28 14:21:21 2016] >> File Name: upload_g.png
[Mon Mar 28 14:21:21 2016] >> (WC) Item: normal
[Mon Mar 28 14:21:21 2016] >> (WC) Props: normal
[Mon Mar 28 14:21:21 2016] >> Local Revision: 4712
[Mon Mar 28 14:21:21 2016] >> Author: brianprom
[Mon Mar 28 14:21:21 2016] >> Change Revision: 4015
[Mon Mar 28 14:21:21 2016] >> Locking Code: ' '
[Mon Mar 28 14:21:21 2016] >> Local Status: 1 (0x1) Repo Status: -1 (0xFFFFFFFF) Final Status: 1 (0x1) Lock Status: 0 (0x0)
The effective SVN command being run is this:
Code: Select all
svn.exe --show-updates --verbose status --depth files --xml .
Importantly that command is being run in this directory:
Code: Select all
c:\PHDoc_Source\CurrentVersion\PHDoc_Core\chs\phd_app\
The first thing I would do is use the
DOS Shell button found in Agent SVN and run that exact same command in the exact same directory to see how long it takes to run.
Now the important thing to consider is the results for the
upload_g.png shown above. In particular this output:
Code: Select all
[Mon Mar 28 14:21:21 2016] >> Local Revision: 4712
[Mon Mar 28 14:21:21 2016] >> Author: brianprom
[Mon Mar 28 14:21:21 2016] >> Change Revision: 4015
That output clearly shows the image is in the Subversion repo making it part of the project.
That file is in the same subversion local working copy as your other PowerBuilder files.
In other words it is in the same part of the Subversion tree as your PowerBuilder files.
As far as Subversion is concerned it is part of the project.
But this is very easy to change at your end by just
turning off the cache option in Agent SVN.
That code is nothing more than Agent SVN caching the status of all the files in the folder by doing one trip to the subversion server, rather than doing one trip to the server for each file.
I would assume PowerBuilder on open is asking SccQueryInfoEx for only the pbt file. Logically to me that is all that is needed.
And that pbt file is in the same folder location in Subversion as all your image files.
To me if your plugin was no respecting requests for a single file to have its status refreshed
Turning off the cache option will make the plug-in work as you want.
Now doing that might indeed speed up this one particular example, but I suspect it will kill the performance for other examples.
All the caching in Agent SVN was specifically added for PowerBuilder to handle it's many thousands of status requests on individual objects.
You could also
turn off the update status option and that too will probably give you a massive speed improvement as Agent SVN will no longer be going to the Subversion server to get the file status.
But naturally that means you will only be tracking the status of your files, not changes made by other users
It is difficult to find information about the SCC API spec and I cannot find good documentation on how PowerBuilder implemented SCC.
You have found the MS-SCCI definition:
https://msdn.microsoft.com/en-us/library/bb165429.aspx
What you will not find is information on the SccQueryInfoEx function as that is something added by PowerBuilder itself
They mention it here but don't describe it in any detail:
http://infocenter.sybase.com/archive/in ... HDAGBB.htm
Cheers Jussi