diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a496726 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +[*] +charset=utf-8 +end_of_line=lf +trim_trailing_whitespace=true +insert_final_newline=true +indent_style=space +indent_size=4 + +[{*.json,*.yml}] +indent_size=2 + +[{*.vcxproj}] +end_of_line=crlf +indent_size=2 + +[{*.pl,*.pm,Makefile.*}] +indent_style=tab diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..55fd48d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.lib filter=lfs diff=lfs merge=lfs -text +*.a filter=lfs diff=lfs merge=lfs -text +PerforceBinaries/**/p4* filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 2e54199..d8f0ba0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,71 +1,39 @@ -# Specific -Build/ -PerforceBinaries/ -Library/ -*.BASE.*.cpp -*.LOCAL.*.cpp -*.BACKUP.*.cpp -*.REMOTE.*.cpp -*.orig -Test/tmp/* -PerforcePlugin -SubversionPlugin - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch -*.ipch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -# Output folders -[Dd]ebug/ -[Rr]elease/ -[Bb]in/ -[Oo]bj/ - -# Visual Studio 2010 local files -*.vcxproj.user -*.opensdf -*.sdf -*.suo - -# Visual Studio 2015 local files -.vs/ - -# Test Ouput -TestResults/ - -# Sublime files -*.sublime-project -*.sublime-workspace -server.pid - -# VI files -*.swp - -# CLion files -.idea +# Specific +Build/ +Library/ +*.BASE.*.cpp +*.LOCAL.*.cpp +*.BACKUP.*.cpp +*.REMOTE.*.cpp +*.orig +Test/tmp/* +PerforcePlugin + +# Output folders +[Dd]ebug/ +[Rr]elease/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2010 local files +*.vcxproj.user +*.opensdf +*.sdf +*.suo + +# Visual Studio local files +.vs/ + +# Test Ouput +TestResults/ + +# Sublime files +*.sublime-project +*.sublime-workspace +server.pid + +# VI files +*.swp + +# JetBrains IDEs files +.idea/ diff --git a/.yamato/linux-build.yml b/.yamato/linux-build.yml index 4620b3d..f58a93e 100644 --- a/.yamato/linux-build.yml +++ b/.yamato/linux-build.yml @@ -1,18 +1,20 @@ name: Linux - Build & Test VCS plugins agent: - type: Unity::VM - image: cds-ops/ubuntu-16.04-katana-agent - flavor: b1.large + type: Unity::VM + image: cds-ops/ubuntu-16.04-katana-agent + flavor: b1.large commands: - - hg clone --config extensions.largefiles= http://hg-mirror-slo.hq.unity3d.com/unity-extra/perforce PerforceBinaries - - perl build.pl | tee linux_build.txt - - perl build.pl -test | tee linux_test.txt + # Build PerforcePlugin and TestServer + - perl build.pl + + # Perforce CLI and server + - chmod +x PerforceBinaries/linux64/p4 PerforceBinaries/linux64/p4d + + # Run Perforce integration tests with the TestServer + - perl build.pl -test + artifacts: - builds: - paths: - - "Build/linux64/PerforcePlugin" - logs: - paths: - - "linux_build.txt" - - "linux_test.txt" \ No newline at end of file + builds: + paths: + - "Build/linux64/PerforcePlugin" diff --git a/.yamato/osx-build.yml b/.yamato/osx-build.yml index dcd9d9f..52e54a4 100644 --- a/.yamato/osx-build.yml +++ b/.yamato/osx-build.yml @@ -1,19 +1,20 @@ name: Mac - Build & Test VCS plugins agent: - type: Unity::VM::osx - image: desktop/unity-macos-10.15-xcode-12.2:stable - flavor: b1.large + type: Unity::VM::osx + image: desktop/unity-macos-10.15-xcode-12.2:stable + flavor: b1.large commands: - - hg clone --config extensions.largefiles= http://hg-mirror-slo.hq.unity3d.com/unity-extra/perforce PerforceBinaries - - perl build.pl | tee mac_build.txt - - perl build.pl -test | tee mac_test.txt + # Build PerforcePlugin and TestServer + - perl build.pl + + # Perforce CLI and server + - chmod +x PerforceBinaries/OSX/p4 PerforceBinaries/OSX/p4d + + # Run Perforce integration tests with the TestServer + - perl build.pl -test artifacts: - builds: - paths: - - "Build/OSXx64/PerforcePlugin" - logs: - paths: - - "mac_build.txt" - - "mac_test.txt" + builds: + paths: + - "Build/OSXx64/PerforcePlugin" diff --git a/.yamato/windows-build.yml b/.yamato/windows-build.yml index f36cf7d..a6c2e5a 100644 --- a/.yamato/windows-build.yml +++ b/.yamato/windows-build.yml @@ -1,21 +1,18 @@ name: Win - Build & Test VCS plugins agent: - type: Unity::VM - image: core-kaunas/win10-vs2010:latest - flavor: b1.large - -interpreter: powershell + type: Unity::VM + image: core-kaunas/win10-vs2010:latest + flavor: b1.large + commands: - - perl build.pl | tee win_build.txt - - hg clone --config extensions.largefiles= http://hg-mirror-slo.hq.unity3d.com/unity-extra/perforce PerforceBinaries - - perl build.pl -test | tee win_test.txt - + # Build PerforcePlugin and TestServer + - perl build.pl + + # Run Perforce integration tests with the TestServer + - perl build.pl -test + artifacts: - builds: - paths: - - "Build/Win32/PerforcePlugin.exe" - - "Build/Win32/PerforcePlugin.pdb" - logs: - paths: - - "win_build.txt" - - "win_test.txt" \ No newline at end of file + builds: + paths: + - "Build/Win32/PerforcePlugin.exe" + - "Build/Win32/PerforcePlugin.pdb" diff --git a/.yamato/zipVCSPlugins.yml b/.yamato/zipVCSPlugins.yml index 906de69..10b82da 100644 --- a/.yamato/zipVCSPlugins.yml +++ b/.yamato/zipVCSPlugins.yml @@ -1,35 +1,31 @@ name: Zip VCS plugins agent: - type: Unity::VM - image: core-kaunas/win10-vs2010:latest - flavor: b1.small + type: Unity::VM + image: core-kaunas/win10-vs2010:latest + flavor: b1.small -interpreter: powershell +interpreter: powershell commands: - - mkdir linux64 - - mkdir OSXx64 - - mkdir Win32 - - Copy-Item Build/linux64/* linux64 -Recurse - - Copy-Item Build/OSXx64/* OSXx64 -Recurse - - Copy-Item Build/Win32/* Win32 -Recurse - + - mkdir linux64 + - mkdir OSXx64 + - mkdir Win32 + - Copy-Item Build/linux64/* linux64 -Recurse + - Copy-Item Build/OSXx64/* OSXx64 -Recurse + - Copy-Item Build/Win32/* Win32 -Recurse + artifacts: - builds: - paths: - - "linux64/**" - - "OSXx64/**" - - "Win32/**" - + builds: + paths: + - "linux64/**" + - "OSXx64/**" + - "Win32/**" + dependencies: - - .yamato/windows-build.yml - - .yamato/linux-build.yml - - .yamato/osx-build.yml - + - .yamato/windows-build.yml + - .yamato/linux-build.yml + - .yamato/osx-build.yml + triggers: - branches: - only: + branches: + only: - "/.*/" - pull_requests: - - sources: - only: - - "/.*/" \ No newline at end of file diff --git a/Makefile.gnu b/Makefile.gnu index b8a8d11..181c746 100644 --- a/Makefile.gnu +++ b/Makefile.gnu @@ -7,9 +7,11 @@ AR = ar GTK3_INCLUDE = -I/usr/include/gtk-3.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/atk-1.0 -I/usr/include/harfbuzz GTK3_LIBRARIES = -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -CXXFLAGS += -O2 -g -fpermissive -Wno-deprecated-declarations $(GTK3_INCLUDE) $(P4PLUGIN_INCLUDE) -LDFLAGS += -g -LIBRARIES = -lstdc++ -lrt $(GTK3_LIBRARIES) +CFLAGS += -O3 -g -fPIC -fexceptions -fvisibility=hidden -DLINUX +CXXFLAGS += $(CFLAGS) -fpermissive -Wno-deprecated-declarations $(GTK3_INCLUDE) $(P4PLUGIN_INCLUDE) +LDFLAGS += -g -pthread +LIBRARIES += -lstdc++ -lrt $(GTK3_LIBRARIES) +PLATFORM = linux64 COMMON_MODULES = $(COMMON_SRCS:.c=.o) COMMON_MODULES := $(COMMON_MODULES:.cpp=.o) @@ -21,7 +23,7 @@ TESTSERVER_TARGET= Build/$(PLATFORM)/TestServer P4PLUGIN_MODULES = $(P4PLUGIN_SRCS:.c=.o) P4PLUGIN_MODULES := $(P4PLUGIN_MODULES:.cpp=.o) P4PLUGIN_TARGET = PerforcePlugin -P4PLUGIN_LINK += $(LIBRARIES) -ldl -fPIC -no-pie +P4PLUGIN_LINK += $(LIBRARIES) -ldl -no-pie default: all @@ -49,7 +51,7 @@ $(TESTSERVER_TARGET): $(COMMON_MODULES) $(TESTSERVER_MODULES) $(CXX) -g $(LDFLAGS) -o $@ $^ $(P4PLUGIN_TARGET): $(COMMON_MODULES) $(P4PLUGIN_MODULES) - $(CXX) $(LDFLAGS) -o $@ $^ $(P4PLUGIN_LINK) -L./P4Plugin/Source/r19.1/lib/$(PLATFORM) + $(CXX) $(LDFLAGS) -o $@ $^ $(P4PLUGIN_LINK) -L./P4Plugin/Source/p4api/lib/$(PLATFORM) -L./P4Plugin/Source/openssl/lib/$(PLATFORM) clean: rm -f Build/*.* $(COMMON_MODULES) $(P4PLUGIN_MODULES) $(TESTSERVER_MODULES) diff --git a/Makefile.osx b/Makefile.osx index f09fc8f..a0c5192 100644 --- a/Makefile.osx +++ b/Makefile.osx @@ -53,7 +53,7 @@ $(TESTSERVER_TARGET): $(COMMON_MODULES) $(TESTSERVER_MODULES) $(CXX) -g $(LDFLAGS) -o $@ $^ $(P4PLUGIN_TARGET): $(COMMON_MODULES) $(P4PLUGIN_MODULES) - $(CXX) $(LDFLAGS) -o $@ -framework Cocoa $^ -L./P4Plugin/Source/r19.1/lib/osx64 $(P4PLUGIN_LINK) + $(CXX) $(LDFLAGS) -o $@ -framework Cocoa -framework Security $^ -L./P4Plugin/Source/p4api/lib/osx64 -L./P4Plugin/Source/openssl/lib/osx64 $(P4PLUGIN_LINK) clean: rm -f Build/*.* $(COMMON_MODULES) $(P4PLUGIN_MODULES) $(TESTSERVER_MODULES) diff --git a/Makefile.srcs b/Makefile.srcs index ba9a0c5..99b2a6b 100644 --- a/Makefile.srcs +++ b/Makefile.srcs @@ -1,30 +1,30 @@ COMMON_SRCS = ./Common/Changes.cpp \ - ./Common/CommandLine.cpp \ - ./Common/FileSystem.cpp \ - ./Common/Pipe.cpp \ - ./Common/Utility.cpp \ - ./Common/VersionedAsset.cpp \ - ./Common/Status.cpp \ - ./Common/Connection.cpp \ - ./Common/Command.cpp \ - ./Common/Log.cpp \ - ./Common/POpen.cpp + ./Common/CommandLine.cpp \ + ./Common/FileSystem.cpp \ + ./Common/Pipe.cpp \ + ./Common/Utility.cpp \ + ./Common/VersionedAsset.cpp \ + ./Common/Status.cpp \ + ./Common/Connection.cpp \ + ./Common/Command.cpp \ + ./Common/Log.cpp \ + ./Common/POpen.cpp COMMON_INCLS = ./Common/Changes.h \ - ./Common/CommandLine.h \ - ./Common/FileSystem.h \ - ./Common/Pipe.h \ - ./Common/Utility.h \ - ./Common/VersionedAsset.h \ - ./Common/Status.h \ - ./Common/Connection.h \ - ./Common/Command.h \ - ./Common/Dispatch.h \ - ./Common/Log.h \ - ./Common/POpen.h + ./Common/CommandLine.h \ + ./Common/FileSystem.h \ + ./Common/Pipe.h \ + ./Common/Utility.h \ + ./Common/VersionedAsset.h \ + ./Common/Status.h \ + ./Common/Connection.h \ + ./Common/Command.h \ + ./Common/Dispatch.h \ + ./Common/Log.h \ + ./Common/POpen.h TESTSERVER_SRCS = ./Test/Source/ExternalProcess_Posix.cpp \ - ./Test/Source/TestServer.cpp + ./Test/Source/TestServer.cpp TESTSERVER_INCLS = ./Test/Source/ExternalProcess.h TESTSERVER_INCLUDE = -I./Common @@ -41,14 +41,17 @@ P4PLUGIN_SRCS = ./P4Plugin/Source/P4Plugin_Posix.cpp \ ./P4Plugin/Source/P4DeleteCommand.cpp \ ./P4Plugin/Source/P4DownloadCommand.cpp \ ./P4Plugin/Source/P4ExitCommand.cpp \ + ./P4Plugin/Source/P4FileModeCommand.cpp \ ./P4Plugin/Source/P4FileSetBaseCommand.cpp \ ./P4Plugin/Source/P4GetLatestCommand.cpp \ + ./P4Plugin/Source/P4InfoCommand.cpp \ ./P4Plugin/Source/P4IncomingChangeAssetsCommand.cpp \ ./P4Plugin/Source/P4IncomingCommand.cpp \ ./P4Plugin/Source/P4LockCommand.cpp \ ./P4Plugin/Source/P4LoginCommand.cpp \ ./P4Plugin/Source/P4Login2Command.cpp \ ./P4Plugin/Source/P4LogoutCommand.cpp \ + ./P4Plugin/Source/P4MFA.cpp \ ./P4Plugin/Source/P4MoveCommand.cpp \ ./P4Plugin/Source/P4QueryConfigParametersCommand.cpp \ ./P4Plugin/Source/P4ResolveCommand.cpp \ @@ -57,24 +60,22 @@ P4PLUGIN_SRCS = ./P4Plugin/Source/P4Plugin_Posix.cpp \ ./P4Plugin/Source/P4SpecCommand.cpp \ ./P4Plugin/Source/P4StatusBaseCommand.cpp \ ./P4Plugin/Source/P4StatusCommand.cpp \ + ./P4Plugin/Source/P4StreamsCommand.cpp \ ./P4Plugin/Source/P4SubmitCommand.cpp \ - ./P4Plugin/Source/P4FileModeCommand.cpp \ ./P4Plugin/Source/P4Task.cpp \ ./P4Plugin/Source/P4UnlockCommand.cpp \ - ./P4Plugin/Source/P4InfoCommand.cpp \ - ./P4Plugin/Source/P4StreamsCommand.cpp \ - ./P4Plugin/Source/P4Utility.cpp \ - ./P4Plugin/Source/P4MFA.cpp + ./P4Plugin/Source/P4Utility.cpp P4PLUGIN_INCLS = ./P4Plugin/Source/P4Command.h \ - ./P4Plugin/Source/P4FileSetBaseCommand.h \ - ./P4Plugin/Source/P4StatusBaseCommand.h \ - ./P4Plugin/Source/P4StatusCommand.h \ - ./P4Plugin/Source/P4Task.h \ - ./P4Plugin/Source/P4Info.h \ - ./P4Plugin/Source/P4Stream.h \ - ./P4Plugin/Source/P4Utility.h \ - ./P4Plugin/Source/P4MFA.h + ./P4Plugin/Source/P4FileSetBaseCommand.h \ + ./P4Plugin/Source/P4Info.h \ + ./P4Plugin/Source/P4MFA.h \ + ./P4Plugin/Source/P4PluginVersion.h \ + ./P4Plugin/Source/P4StatusBaseCommand.h \ + ./P4Plugin/Source/P4StatusCommand.h \ + ./P4Plugin/Source/P4Stream.h \ + ./P4Plugin/Source/P4Task.h \ + ./P4Plugin/Source/P4Utility.h -P4PLUGIN_LINK = -lclient -lrpc -lsupp -lssl -lcrypto -lp4script -lp4script_curl -lp4script_sqlite -lp4script_c -P4PLUGIN_INCLUDE = -I./Common -I./P4Plugin/Source/r19.1/include/p4 -I./P4Plugin/Source +P4PLUGIN_LINK = -lclient -lrpc -lsupp -lp4api -lp4script -lp4script_curl -lp4script_sqlite -lp4script_c -lssl -lcrypto +P4PLUGIN_INCLUDE = -I./Common -I./P4Plugin/Source/p4api/include/p4 -I./P4Plugin/Source diff --git a/P4Plugin/P4Plugin.vcxproj b/P4Plugin/P4Plugin.vcxproj index 8901b33..3e77623 100644 --- a/P4Plugin/P4Plugin.vcxproj +++ b/P4Plugin/P4Plugin.vcxproj @@ -68,6 +68,7 @@ + @@ -87,6 +88,7 @@ + @@ -141,14 +143,14 @@ _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NODEPRECATE;_CRT_NONSTDC_NO_DEPRECATE; _SCL_SECURE_NO_DEPRECATE ;_SECURE_SCL=0;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - $(ProjectDir)..\Common;$(ProjectDir)Source\;$(ProjectDir)Source\r19.1\include\P4;%(AdditionalIncludeDirectories) + $(ProjectDir)..\Common;$(ProjectDir)Source\;$(ProjectDir)Source\p4api\include\P4;%(AdditionalIncludeDirectories) MultiThreadedDebug Windows true - $(ProjectDir)Source\r19.1\lib\win32debug;%(AdditionalLibraryDirectories) - libclient.lib;libeay32.lib;libp4script.lib;libp4script_c.lib;libp4script_curl.lib;libp4script_sqlite.lib;librpc.lib;libsupp.lib;ssleay32.lib;ws2_32.lib;shlwapi.lib;%(AdditionalDependencies) + $(ProjectDir)Source\p4api\lib\win32debug;$(ProjectDir)Source\openssl\lib\win32;%(AdditionalLibraryDirectories) + libclient.lib;libeay32.lib;libp4api.lib;libp4script.lib;libp4script_c.lib;libp4script_curl.lib;libp4script_sqlite.lib;librpc.lib;libsupp.lib;ssleay32.lib;ws2_32.lib;crypt32.lib;shlwapi.lib;%(AdditionalDependencies) echo f | xcopy "$(SolutionDir)$(Configuration)\$(TargetFileName)" "$(SolutionDir)Build\Win32\$(TargetFileName)" /Y @@ -165,7 +167,7 @@ _SCL_SECURE_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NODEPRECATE;_CRT_NONSTDC_NO_DEPRECATE; _SCL_SECURE_NO_DEPRECATE ;_SECURE_SCL=0;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - $(ProjectDir)..\Common;$(ProjectDir)Source\;$(ProjectDir)Source\r19.1\include\P4;%(AdditionalIncludeDirectories) + $(ProjectDir)..\Common;$(ProjectDir)Source\;$(ProjectDir)Source\p4api\include\P4;%(AdditionalIncludeDirectories) MultiThreaded @@ -173,8 +175,8 @@ _SCL_SECURE_NO_DEPRECATE true true true - $(ProjectDir)Source\r19.1\lib\win32;%(AdditionalLibraryDirectories) - libclient.lib;libeay32.lib;libp4script.lib;libp4script_c.lib;libp4script_curl.lib;libp4script_sqlite.lib;librpc.lib;libsupp.lib;ssleay32.lib;ws2_32.lib;shlwapi.lib;%(AdditionalDependencies) + $(ProjectDir)Source\p4api\lib\win32;$(ProjectDir)Source\openssl\lib\win32;%(AdditionalLibraryDirectories) + libclient.lib;libeay32.lib;libp4api.lib;libp4script.lib;libp4script_c.lib;libp4script_curl.lib;libp4script_sqlite.lib;librpc.lib;libsupp.lib;ssleay32.lib;ws2_32.lib;crypt32.lib;shlwapi.lib;%(AdditionalDependencies) echo f | xcopy "$(SolutionDir)$(Configuration)\$(TargetFileName)" "$(SolutionDir)Build\Win32\$(TargetFileName)" /Y @@ -184,4 +186,4 @@ echo f | xcopy "$(SolutionDir)$(Configuration)\$(TargetName).pdb" "$(SolutionDir - \ No newline at end of file + diff --git a/P4Plugin/P4Plugin.vcxproj.filters b/P4Plugin/P4Plugin.vcxproj.filters index 3223926..b47612b 100644 --- a/P4Plugin/P4Plugin.vcxproj.filters +++ b/P4Plugin/P4Plugin.vcxproj.filters @@ -146,12 +146,6 @@ P4Plugin - - P4Plugin - - - P4Plugin - P4Plugin @@ -161,6 +155,12 @@ P4Plugin + + Common + + + Common + @@ -247,12 +247,26 @@ Common - - - - P4Plugin + + P4Plugin + + + P4Plugin + + + Common + + + Common + + + Common\Commands + + + P4Plugin + \ No newline at end of file diff --git a/P4Plugin/Source/P4PluginVersion.h b/P4Plugin/Source/P4PluginVersion.h new file mode 100644 index 0000000..be02aea --- /dev/null +++ b/P4Plugin/Source/P4PluginVersion.h @@ -0,0 +1,16 @@ +#pragma once + +// Update the plugin version according to Semantic Versioning (SemVer) guidelines +// https://semver.org/ +// +// Changelog: +// 1.0.x Initial versions from long ago +// 1.1.0 2022/02/10 Support TLSv1.2 in Perforce Plugin +// TODO unity versions and backports? +// 1.2.0 2022/08/05 Added MFA login2 support +// 2023.1.0a14 +// 1.2.1 2024/03/15 Fix login failure license about to expire +// 2021.3.38f1, 2023.2.19f1, 6000.0.0b14 +// 1.3.0 2025/07/29 P4 API 2021.2 for Perforce Cloud + +#define PERFORCE_PLUGIN_VERSION "1.3.0" diff --git a/P4Plugin/Source/P4Task.cpp b/P4Plugin/Source/P4Task.cpp index 61ace2f..65512c5 100755 --- a/P4Plugin/Source/P4Task.cpp +++ b/P4Plugin/Source/P4Task.cpp @@ -1,5 +1,6 @@ #include "P4Task.h" #include "P4Command.h" +#include "P4PluginVersion.h" #include "error.h" #include "i18napi.h" #include "msgclient.h" @@ -253,8 +254,7 @@ int P4Task::Run(const bool testmode) { cmd = m_Connection->ReadCommand(args); - // Make it convenient to get the pipe even though the commands - // are callback based. + // Make it convenient to get the pipe even though the commands are callback based. P4Command::s_Conn = m_Connection; if (cmd == UCOM_Invalid) @@ -320,11 +320,14 @@ bool P4Task::Reconnect() } Error err; - m_Client.SetProg( "Unity" ); - m_Client.SetVersion( "1.0" ); + m_Client.SetProg("Unity"); + m_Client.SetVersion(PERFORCE_PLUGIN_VERSION); - // Set the config because in case of reconnect the - // config has been reset + m_Connection->Log().Notice() << "PerforcePlugin " PERFORCE_PLUGIN_VERSION << Endl; + m_Connection->Log().Notice() << "Client API: " << m_Client.GetAPI() << Endl; + m_Connection->Log().Notice() << "Client Build: " << m_Client.GetBuild().Text() << Endl; + + // Set the config because in case of reconnect the config has been reset SetP4Root(""); m_Client.SetPort(m_PortConfig.c_str()); m_Client.SetUser(m_UserConfig.c_str()); diff --git a/P4Plugin/Source/openssl/lib/linux64/libcrypto.a b/P4Plugin/Source/openssl/lib/linux64/libcrypto.a new file mode 100644 index 0000000..01f5ca6 --- /dev/null +++ b/P4Plugin/Source/openssl/lib/linux64/libcrypto.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab812bb9163a9af20e5d60fd20f018c9d32f280752fd56b0a1236e865f593859 +size 4599074 diff --git a/P4Plugin/Source/openssl/lib/linux64/libssl.a b/P4Plugin/Source/openssl/lib/linux64/libssl.a new file mode 100644 index 0000000..ef21e5d --- /dev/null +++ b/P4Plugin/Source/openssl/lib/linux64/libssl.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7026c7b8cfc7b0c66c2fad85a4e8e9cfc6287a7d7b407452e1651ce05bfb807c +size 714262 diff --git a/P4Plugin/Source/openssl/lib/osx64/libcrypto.a b/P4Plugin/Source/openssl/lib/osx64/libcrypto.a new file mode 100644 index 0000000..fe11017 --- /dev/null +++ b/P4Plugin/Source/openssl/lib/osx64/libcrypto.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b01905a3a24fdafd6b0f7f77aa32a436521e4ff40c39b8f4e95fd281332ff7d1 +size 3153152 diff --git a/P4Plugin/Source/openssl/lib/osx64/libssl.a b/P4Plugin/Source/openssl/lib/osx64/libssl.a new file mode 100644 index 0000000..bc85874 --- /dev/null +++ b/P4Plugin/Source/openssl/lib/osx64/libssl.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e61a50ceea2648f74c1122075cb628e3489cc7b3ab18c193b8144ea2dbe2b94a +size 510136 diff --git a/P4Plugin/Source/openssl/lib/win32/libeay32.lib b/P4Plugin/Source/openssl/lib/win32/libeay32.lib new file mode 100644 index 0000000..e7aebfc --- /dev/null +++ b/P4Plugin/Source/openssl/lib/win32/libeay32.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cde893a7b4cf7d91bd62a38a2d54e8b49ad96fc9b882991487ed053c95703764 +size 13647106 diff --git a/P4Plugin/Source/openssl/lib/win32/ssleay32.lib b/P4Plugin/Source/openssl/lib/win32/ssleay32.lib new file mode 100644 index 0000000..3a4c0f6 --- /dev/null +++ b/P4Plugin/Source/openssl/lib/win32/ssleay32.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6c5dd9c6e81630b965b39bf274141df3bed70339d9aa30797001b8126de02c8 +size 2004530 diff --git a/P4Plugin/Source/p4api/README.md b/P4Plugin/Source/p4api/README.md new file mode 100644 index 0000000..5d9b1e9 --- /dev/null +++ b/P4Plugin/Source/p4api/README.md @@ -0,0 +1,15 @@ +Document the links from where the P4 C++ API (include files and static libraries) where downloaded: + +https://filehost.perforce.com/perforce/r21.2/ p4api-2021.2.2536545 + +Notes: see also download_perforce_binaries.ps1 + +# linux64 +- https://filehost.perforce.com/perforce/r21.2/bin.linux26x86_64/p4api-glibc2.3-openssl1.0.2.tgz + +# osx64 +- https://filehost.perforce.com/perforce/r21.2/bin.macosx105x86_64/p4api-openssl1.0.2.tgz + +# Win32 +- https://filehost.perforce.com/perforce/r21.2/bin.ntx86/p4api_vs2010_static_openssl1.0.2.zip +- https://filehost.perforce.com/perforce/r21.2/bin.ntx86/p4api_vs2010_static_vsdebug_openssl1.0.2.zip diff --git a/P4Plugin/Source/r19.1/include/p4/base64.h b/P4Plugin/Source/p4api/include/p4/base64.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/base64.h rename to P4Plugin/Source/p4api/include/p4/base64.h diff --git a/P4Plugin/Source/r19.1/include/p4/charcvt.h b/P4Plugin/Source/p4api/include/p4/charcvt.h similarity index 99% rename from P4Plugin/Source/r19.1/include/p4/charcvt.h rename to P4Plugin/Source/p4api/include/p4/charcvt.h index 1e74d5f..26e6afe 100644 --- a/P4Plugin/Source/r19.1/include/p4/charcvt.h +++ b/P4Plugin/Source/p4api/include/p4/charcvt.h @@ -69,6 +69,8 @@ class CharSetCvt : public CharSetApi { static unsigned long offsetsFromUTF8[]; static unsigned long minimumFromUTF8[]; + static void Init(); + protected: friend class CharSetCvtCache; // for the following default constructor CharSetCvt() : lasterr(0), linecnt(1), charcnt(0), fastbuf(0), fastsize(0){} diff --git a/P4Plugin/Source/r19.1/include/p4/charman.h b/P4Plugin/Source/p4api/include/p4/charman.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/charman.h rename to P4Plugin/Source/p4api/include/p4/charman.h diff --git a/P4Plugin/Source/r19.1/include/p4/charset.h b/P4Plugin/Source/p4api/include/p4/charset.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/charset.h rename to P4Plugin/Source/p4api/include/p4/charset.h diff --git a/P4Plugin/Source/r19.1/include/p4/clientapi.h b/P4Plugin/Source/p4api/include/p4/clientapi.h similarity index 99% rename from P4Plugin/Source/r19.1/include/p4/clientapi.h rename to P4Plugin/Source/p4api/include/p4/clientapi.h index c7f8041..339a1d9 100644 --- a/P4Plugin/Source/r19.1/include/p4/clientapi.h +++ b/P4Plugin/Source/p4api/include/p4/clientapi.h @@ -167,6 +167,8 @@ class ClientApi : public StrDict { // caller's main interface ClientApi(); + ClientApi( Enviro *env ); + virtual ~ClientApi(); void SetTrans( int output, int content = -2, diff --git a/P4Plugin/Source/r19.1/include/p4/clientmerge.h b/P4Plugin/Source/p4api/include/p4/clientmerge.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/clientmerge.h rename to P4Plugin/Source/p4api/include/p4/clientmerge.h diff --git a/P4Plugin/Source/r19.1/include/p4/clientprog.h b/P4Plugin/Source/p4api/include/p4/clientprog.h similarity index 88% rename from P4Plugin/Source/r19.1/include/p4/clientprog.h rename to P4Plugin/Source/p4api/include/p4/clientprog.h index 6b3fa3e..3272649 100644 --- a/P4Plugin/Source/r19.1/include/p4/clientprog.h +++ b/P4Plugin/Source/p4api/include/p4/clientprog.h @@ -36,10 +36,18 @@ class ClientProgressText : public ClientProgress void Total( long ); int Update( long ); void Done( int fail ); + + // Track if we're already in use, multiple will overwrite + static bool InUse; + + int GetProgressType() const; + private: int cnt; long total; int typeOfProgress; int backup; StrBuf desc; + bool done; + }; diff --git a/P4Plugin/Source/r19.1/include/p4/clientresolvea.h b/P4Plugin/Source/p4api/include/p4/clientresolvea.h similarity index 87% rename from P4Plugin/Source/r19.1/include/p4/clientresolvea.h rename to P4Plugin/Source/p4api/include/p4/clientresolvea.h index 259616f..332dca4 100644 --- a/P4Plugin/Source/r19.1/include/p4/clientresolvea.h +++ b/P4Plugin/Source/p4api/include/p4/clientresolvea.h @@ -55,6 +55,14 @@ class ClientResolveA const Error &GetTypePrompt() const { return typeP; } const Error &GetUsageError() const { return error; } const Error &GetHelp() const { return help; } + const Error &GetMoveReaddIntegConflictIgnored() const + { + return moveReaddIntegConflictIgnored; + } + const Error &GetMoveReaddIntegConflictSkip() const + { + return moveReaddIntegConflictSkip; + } // Called by clientservice while talking to the server @@ -82,6 +90,16 @@ class ClientResolveA void SetHelp( const Error &msg ) { help = msg; } void SetUsageError( const Error &msg ) { error = msg; } + void SetMoveReaddIntegConflictIgnored ( const Error &msg ) + { + moveReaddIntegConflictIgnored = msg; + } + + void SetMoveReaddIntegConflictSkip( const Error &msg ) + { + moveReaddIntegConflictSkip = msg; + } + void SetAuto( MergeStatus s ) { suggest = s; } private: @@ -108,6 +126,8 @@ class ClientResolveA Error help; Error prompt; Error error; + Error moveReaddIntegConflictIgnored; + Error moveReaddIntegConflictSkip; MergeStatus suggest; }; diff --git a/P4Plugin/Source/r19.1/include/p4/clientscript.h b/P4Plugin/Source/p4api/include/p4/clientscript.h similarity index 96% rename from P4Plugin/Source/r19.1/include/p4/clientscript.h rename to P4Plugin/Source/p4api/include/p4/clientscript.h index 91f80d9..9834c74 100644 --- a/P4Plugin/Source/r19.1/include/p4/clientscript.h +++ b/P4Plugin/Source/p4api/include/p4/clientscript.h @@ -45,7 +45,8 @@ class ClientScript std::vector< std::unique_ptr< Extension > > exts; - StrBuf path, pattern; + std::vector< std::string > patterns; + StrBuf path; Client* client; }; diff --git a/P4Plugin/Source/r19.1/include/p4/clientuser.h b/P4Plugin/Source/p4api/include/p4/clientuser.h similarity index 98% rename from P4Plugin/Source/r19.1/include/p4/clientuser.h rename to P4Plugin/Source/p4api/include/p4/clientuser.h index cdec8d8..964f549 100644 --- a/P4Plugin/Source/r19.1/include/p4/clientuser.h +++ b/P4Plugin/Source/p4api/include/p4/clientuser.h @@ -156,8 +156,10 @@ class ClientUser { virtual void Help( const char *const *help ); virtual FileSys *File( FileSysType type ); + virtual ClientProgress *CreateProgress( int, P4INT64 ); virtual ClientProgress *CreateProgress( int ); virtual int ProgressIndicator(); + virtual int CanParallelProgress() { return 0; } virtual void Finished() {} diff --git a/P4Plugin/Source/r19.1/include/p4/datetime.h b/P4Plugin/Source/p4api/include/p4/datetime.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/datetime.h rename to P4Plugin/Source/p4api/include/p4/datetime.h diff --git a/P4Plugin/Source/r19.1/include/p4/debug.h b/P4Plugin/Source/p4api/include/p4/debug.h similarity index 88% rename from P4Plugin/Source/r19.1/include/p4/debug.h rename to P4Plugin/Source/p4api/include/p4/debug.h index 2a95d44..44e5b4a 100644 --- a/P4Plugin/Source/r19.1/include/p4/debug.h +++ b/P4Plugin/Source/p4api/include/p4/debug.h @@ -54,9 +54,20 @@ enum P4DebugType { DT_STG, // Tracking storage records. DT_THREAD, // threading DT_EXTS, // exts (extension) + DT_PROTECT, // protections stats + DT_HEARTBEAT, // Heartbeat related + DT_SHELVE, // Shelving related + DT_SQW, // StreamQWorker related + DT_TOPOLOGY, // Topology DT_LAST } ; +enum P4TunableType { + DTT_NONE, // Unknown tuneable + DTT_INT, // Numeric tuneable + DTT_STR, // String tuneable +}; + extern P4MT int list2[]; class P4Tunable { @@ -71,6 +82,8 @@ class P4Tunable { list2[t] : list[t].value; } int GetLevel( const char *n ) const; + StrBuf GetString( const char *n ) const; + StrBuf GetString( int t ) const; int GetIndex( const char *n ) const; const char *GetName( int t ) const { return list[t].name; } int IsSet( int t ) const { return list[t].isSet; } @@ -78,6 +91,7 @@ class P4Tunable { int IsKnown( const char * n ); int IsNumeric( const char * n ); void IsValid( const char * n, const char * v, Error *e ); + int IsSensitive( int t ) const { return list[t].sensitive;} void Unbuffer(); void UnsetAll(); @@ -100,8 +114,16 @@ class P4Tunable { int modVal; int k; // what's 1k? 1000 or 1024? int original; + int sensitive; } list[]; - + + static struct stunable { + const char *name; + int isSet; + const char *def; + char *value; + int sensitive; + } slist[]; } ; typedef void (*DebugOutputHook)( void *context, const StrPtr *buffer ); diff --git a/P4Plugin/Source/r19.1/include/p4/diff.h b/P4Plugin/Source/p4api/include/p4/diff.h similarity index 99% rename from P4Plugin/Source/r19.1/include/p4/diff.h rename to P4Plugin/Source/p4api/include/p4/diff.h index dd1234d..3e76dc1 100644 --- a/P4Plugin/Source/r19.1/include/p4/diff.h +++ b/P4Plugin/Source/p4api/include/p4/diff.h @@ -62,6 +62,8 @@ class Diff { int GetChunkCnt() { return (chunkCnt); } + int IsIdentical(); + private: void Walker( const char *flags, Sequence *s, diff --git a/P4Plugin/Source/r19.1/include/p4/diffmerge.h b/P4Plugin/Source/p4api/include/p4/diffmerge.h similarity index 99% rename from P4Plugin/Source/r19.1/include/p4/diffmerge.h rename to P4Plugin/Source/p4api/include/p4/diffmerge.h index 68ee272..46de41c 100644 --- a/P4Plugin/Source/r19.1/include/p4/diffmerge.h +++ b/P4Plugin/Source/p4api/include/p4/diffmerge.h @@ -102,7 +102,6 @@ class DiffMerge { DiffDiffs diffDiff; GridTypes gridType; - int twoWay; int state; int oldMode; int diff3behavior; diff --git a/P4Plugin/Source/r19.1/include/p4/dmextension.h b/P4Plugin/Source/p4api/include/p4/dmextension.h similarity index 54% rename from P4Plugin/Source/r19.1/include/p4/dmextension.h rename to P4Plugin/Source/p4api/include/p4/dmextension.h index 7a47a5e..8bf5418 100644 --- a/P4Plugin/Source/r19.1/include/p4/dmextension.h +++ b/P4Plugin/Source/p4api/include/p4/dmextension.h @@ -7,12 +7,11 @@ # ifdef HAS_EXTENSIONS # include -# include +# include # include # include # include -# include -# include +# include # include # include # include @@ -31,6 +30,32 @@ struct ExtensionCallerData std::function< void( const char* msg ) > SetClientMsg = []( const char* msg ){}; + std::function< bool( const char *desc, const long total, + const long position ) > ProgressSet + = []( const char *desc, const long total, + const long position ){ return true; }; + std::function< std::tuple< const bool, std::string >( const char* form, + std::function< bool( const char * ) > fn ) + > ClientEditData = []( const char* form, + std::function< bool( const char * ) > fn ){ + return std::make_tuple< bool, std::string >( true, std::string() ); }; + std::function< bool( const long pos ) > ProgressIncrement + = []( const long pos ){ return true; }; + std::function< std::tuple< bool, std::string > ( const char* msg ) > ClientOutputText + = []( const char* msg ){ return std::make_tuple( true, std::string( "Success" ) ); }; + std::function< std::tuple< bool, std::string > ( const int level, const char* msg ) + > ReportError + = []( const int level, const char* msg ) + { return std::make_tuple< bool, std::string >( true, + std::string( "Success" ) ); }; + std::function< std::tuple< bool, std::string > ( std::map< std::string, + std::string > tagmsg ) > FstatInfo + = []( std::map< std::string, std::string > tagmsg ){ + return std::make_tuple< bool, std::string >( true, + std::string( "Success" ) ); }; + std::function< bool( const char* user, const char *path, + int perm ) > CheckPermission + = []( const char* user, const char *path, int perm ){ return false; }; std::function< void() > SetExtExecError = [](){}; StrBuf archDir, dataDir; @@ -52,7 +77,7 @@ class Extension : public p4script public: Extension( const SCR_VERSION v, const int apiVersion, - std::optional< + p4_std_optional::optional< std::unique_ptr< ExtensionCallerData > > ecd, Error* e, const bool alloc = false ); virtual ~Extension(); @@ -61,7 +86,7 @@ class Extension : public p4script virtual void doBindings( Error* e ); ExtensionCallerData* GetECD(); - std::optional< std::any > RunCallBack( const char* name, Error* e ); + p4_std_any::p4_any RunCallBack( const char* name, Error* e ); protected: @@ -72,7 +97,7 @@ class Extension : public p4script private: - std::optional< std::unique_ptr< ExtensionCallerData > > ecd; + p4_std_optional::optional< std::unique_ptr< ExtensionCallerData > > ecd; } ; class Extension::extImpl @@ -84,7 +109,7 @@ class Extension::extImpl virtual void doBindings( Error* e ) = 0; - virtual std::optional< std::any > + virtual p4_std_any::p4_any RunCallBack( const char* name, Error* e ) = 0; protected: @@ -101,7 +126,7 @@ class Extension::extImpl53 : public Extension::extImpl virtual void doBindings( Error* e ); - std::optional< std::any > RunCallBack( const char* name, Error* e ); + p4_std_any::p4_any RunCallBack( const char* name, Error* e ); } ; # else diff --git a/P4Plugin/Source/r19.1/include/p4/dmextension_c.h b/P4Plugin/Source/p4api/include/p4/dmextension_c.h similarity index 91% rename from P4Plugin/Source/r19.1/include/p4/dmextension_c.h rename to P4Plugin/Source/p4api/include/p4/dmextension_c.h index 8376bc1..771c19f 100644 --- a/P4Plugin/Source/r19.1/include/p4/dmextension_c.h +++ b/P4Plugin/Source/p4api/include/p4/dmextension_c.h @@ -7,12 +7,11 @@ # ifdef HAS_EXTENSIONS # include -# include +# include # include # include # include -# include -# include +# include # include # include # include @@ -41,7 +40,7 @@ class ExtensionClient : public Extension public: ExtensionClient( const SCR_VERSION v, const int apiVersion, - std::optional< + p4_std_optional::optional< std::unique_ptr< ExtensionCallerData > > ecd, Error* e ); @@ -90,6 +89,7 @@ class ExtensionClient : public Extension void SetMaxMem( int ){} void SetMaxTime( int ){} bool doFile( const char*, Error* ){ return false; } + bool doStr( const char*, Error* ){ return false; } void DisableExtensionBinding(); }; diff --git a/P4Plugin/Source/r19.1/include/p4/dmextensiondata.h b/P4Plugin/Source/p4api/include/p4/dmextensiondata.h similarity index 92% rename from P4Plugin/Source/r19.1/include/p4/dmextensiondata.h rename to P4Plugin/Source/p4api/include/p4/dmextensiondata.h index 5f86df9..a5add50 100644 --- a/P4Plugin/Source/r19.1/include/p4/dmextensiondata.h +++ b/P4Plugin/Source/p4api/include/p4/dmextensiondata.h @@ -9,7 +9,7 @@ # include # include # include -# include +# include # include # include # include @@ -24,12 +24,12 @@ class ExtensionData // Pre-install validation and installation. ExtensionData( const StrBuf& archiveFile, - std::optional< StrBuf > unzipPath, Error* e ); + p4_std_optional::optional< StrBuf > unzipPath, Error* e ); // Load an existing, installed ext. ExtensionData( const StrBuf& depotFile, const int& depotRev, const StrBuf& srvExtsDir, - const std::optional< StrBuf > archiveFile, + const p4_std_optional::optional< StrBuf > archiveFile, Error* e ); virtual ~ExtensionData(); @@ -91,8 +91,8 @@ class ExtensionData SplitSpecUUID( const StrBuf& SpecAndUUID ); FileSysUPtr Unzip( const StrBuf &zipFileName, - std::optional< StrBuf > unzipPath, - std::optional< StrBuf > oneFile, Error *e ); + p4_std_optional::optional< StrBuf > unzipPath, + p4_std_optional::optional< StrBuf > oneFile, Error *e ); StrBuf srvExtsDir; // server.extensions.dir @@ -124,6 +124,8 @@ class ExtensionData # else +//# include + class ExtensionData { public: diff --git a/P4Plugin/Source/r19.1/include/p4/dmextensiondata_c.h b/P4Plugin/Source/p4api/include/p4/dmextensiondata_c.h similarity index 83% rename from P4Plugin/Source/r19.1/include/p4/dmextensiondata_c.h rename to P4Plugin/Source/p4api/include/p4/dmextensiondata_c.h index 43c088c..9dace58 100644 --- a/P4Plugin/Source/r19.1/include/p4/dmextensiondata_c.h +++ b/P4Plugin/Source/p4api/include/p4/dmextensiondata_c.h @@ -9,7 +9,7 @@ # include # include # include -# include +# include # include # include # include @@ -24,12 +24,13 @@ class ExtensionDataClient : public ExtensionData // Pre-install validation and installation. ExtensionDataClient( const StrBuf& archiveFile, - std::optional< StrBuf > unzipPath, Error* e ); + p4_std_optional::optional< StrBuf > unzipPath, + Error* e ); // Load an existing, installed ext. ExtensionDataClient( const StrBuf& depotFile, const int& depotRev, const StrBuf& srvExtsDir, - const std::optional< StrBuf > archiveFile, + const p4_std_optional::optional< StrBuf > archiveFile, Error* e ); static const std::string nameDelimiter; diff --git a/P4Plugin/Source/r19.1/include/p4/echoctl.h b/P4Plugin/Source/p4api/include/p4/echoctl.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/echoctl.h rename to P4Plugin/Source/p4api/include/p4/echoctl.h diff --git a/P4Plugin/Source/r19.1/include/p4/enviro.h b/P4Plugin/Source/p4api/include/p4/enviro.h similarity index 99% rename from P4Plugin/Source/r19.1/include/p4/enviro.h rename to P4Plugin/Source/p4api/include/p4/enviro.h index ef562d4..7091097 100644 --- a/P4Plugin/Source/r19.1/include/p4/enviro.h +++ b/P4Plugin/Source/p4api/include/p4/enviro.h @@ -37,6 +37,7 @@ class Enviro { public: Enviro(); ~Enviro(); + Enviro( const Enviro &rhs ); // Enties at the top (lower numbers) take precedence over those below enum ItemType { diff --git a/P4Plugin/Source/r19.1/include/p4/error.h b/P4Plugin/Source/p4api/include/p4/error.h similarity index 99% rename from P4Plugin/Source/r19.1/include/p4/error.h rename to P4Plugin/Source/p4api/include/p4/error.h index 2f61b96..4b5d819 100644 --- a/P4Plugin/Source/r19.1/include/p4/error.h +++ b/P4Plugin/Source/p4api/include/p4/error.h @@ -97,6 +97,7 @@ struct ErrorId { int Severity() const { return (code >> 28) & 0x0f; } int UniqueCode() const { return code & 0xffff; } + static const ErrorId NullErrorId; } ; struct ErrorIdMap { diff --git a/P4Plugin/Source/r19.1/include/p4/errorlog.h b/P4Plugin/Source/p4api/include/p4/errorlog.h similarity index 88% rename from P4Plugin/Source/r19.1/include/p4/errorlog.h rename to P4Plugin/Source/p4api/include/p4/errorlog.h index db00184..e7caa70 100644 --- a/P4Plugin/Source/r19.1/include/p4/errorlog.h +++ b/P4Plugin/Source/p4api/include/p4/errorlog.h @@ -53,15 +53,19 @@ class ErrorLog { REPORT_NO_FLAGS = 0, REPORT_TAGGED = 1, REPORT_HOOKED = 2, - - REPORT_ALL = 0x3 + REPORT_STDIO = 4, + + REPORT_ALL = 0x3, + REPORT_ABORT = 0x7 } ; void Report( const Error *e ){ Report( e, REPORT_ALL ); } + void ReportAbort( const Error *e ){ Report( e, REPORT_ABORT ); } void ReportNoTag( const Error *e ){ Report( e, REPORT_HOOKED ); } void ReportNoHook( const Error *e ){ Report( e, REPORT_TAGGED ); } void Report( const Error *e, int flags ); - void LogWrite( const StrPtr & ); + void LogWrite( const StrPtr &, int stdio = 0 ); + void StdioWrite( const StrPtr &, int err = 1 ); // Utility methods diff --git a/P4Plugin/Source/r19.1/include/p4/errornum.h b/P4Plugin/Source/p4api/include/p4/errornum.h similarity index 97% rename from P4Plugin/Source/r19.1/include/p4/errornum.h rename to P4Plugin/Source/p4api/include/p4/errornum.h index 44ffe40..acd9ce2 100644 --- a/P4Plugin/Source/r19.1/include/p4/errornum.h +++ b/P4Plugin/Source/p4api/include/p4/errornum.h @@ -56,4 +56,5 @@ enum ErrorSubsystem { ES_GRAPH = 16, // graph depot messages ES_SCRIPT = 17, // scripting ES_SERVER2 = 18, // server overflow + ES_DM2 = 19, // dm overflow } ; diff --git a/P4Plugin/Source/r19.1/include/p4/filesys.h b/P4Plugin/Source/p4api/include/p4/filesys.h similarity index 97% rename from P4Plugin/Source/r19.1/include/p4/filesys.h rename to P4Plugin/Source/p4api/include/p4/filesys.h index 2493d0a..22e8a3d 100644 --- a/P4Plugin/Source/r19.1/include/p4/filesys.h +++ b/P4Plugin/Source/p4api/include/p4/filesys.h @@ -52,6 +52,7 @@ * * FileSys::GetFd() - return underlying FD_TYPE fd, FST_BINARY only * FileSys::GetSize() - return file size, FST_BINARY,TEXT,ATEXT only + * FileSys::GetCurrentSize() - size of current (not rename()'d) ATEXT file * FileSys::GetOwner() - return the UID of the file owner * FileSys::GetDiskSpace() - fill in data about filesystem space usage. * FileSys::Seek() - seek to offset, FST_BINARY,TEXT,ATEXT only @@ -216,7 +217,7 @@ class DiskSpaceInfo { StrBuf *fsType; } ; -# ifdef HAS_CPP17 +# ifdef HAS_CPP11 # include @@ -260,20 +261,11 @@ class FileSys { return f; } -# ifdef HAS_CPP17 +# ifdef HAS_CPP11 - static FileSysUPtr CreateUPtr( FileSysType type ) { - FileSysUPtr f = - std::make_unique< FileSys* >( Create( type ) ); - return f; - } + static FileSysUPtr CreateUPtr( FileSysType type ); + static FileSysUPtr CreateGlobalTempUPtr( FileSysType type ); - static FileSysUPtr CreateGlobalTempUPtr( FileSysType type ) { - FileSysUPtr f = - std::make_unique< FileSys* >( CreateGlobalTemp - ( type ) ); - return f; - } # endif // special temp for simple locking @@ -372,6 +364,7 @@ class FileSys { virtual int Stat() = 0; + virtual int LinkCount(); virtual int StatModTime() = 0; virtual void StatModTimeHP(DateTimeHighPrecision *modTime); virtual void Truncate( Error *e ) = 0; @@ -390,8 +383,10 @@ class FileSys { virtual FD_PTR GetFd(); virtual int GetOwner(); virtual offL_t GetSize(); + virtual offL_t GetCurrentSize(); virtual void Seek( offL_t offset, Error * ); virtual offL_t Tell(); + virtual void DepotSize( offL_t &len, Error * ); // Convenience wrappers for above @@ -414,6 +409,7 @@ class FileSys { void MakeGlobalTemp(); virtual void MakeLocalTemp( char *file ); + static void TempName( char *buf ); int IsDeleteOnClose() { return isTemp; } virtual void SetDeleteOnClose() { isTemp = 1; } virtual void ClearDeleteOnClose() { isTemp = 0; } @@ -470,6 +466,7 @@ class FileSys { void GetDiskSpace( DiskSpaceInfo *info, Error *e ); void LowerCasePath(); + protected: FileOpenMode mode; // read or write @@ -486,7 +483,6 @@ class FileSys { # endif private: - void TempName( char *buf ); int isTemp; int preserveCWD; diff --git a/P4Plugin/Source/r19.1/include/p4/handler.h b/P4Plugin/Source/p4api/include/p4/handler.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/handler.h rename to P4Plugin/Source/p4api/include/p4/handler.h diff --git a/P4Plugin/Source/r19.1/include/p4/hostenv.h b/P4Plugin/Source/p4api/include/p4/hostenv.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/hostenv.h rename to P4Plugin/Source/p4api/include/p4/hostenv.h diff --git a/P4Plugin/Source/r19.1/include/p4/i18napi.h b/P4Plugin/Source/p4api/include/p4/i18napi.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/i18napi.h rename to P4Plugin/Source/p4api/include/p4/i18napi.h diff --git a/P4Plugin/Source/r19.1/include/p4/ident.h b/P4Plugin/Source/p4api/include/p4/ident.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/ident.h rename to P4Plugin/Source/p4api/include/p4/ident.h diff --git a/P4Plugin/Source/r19.1/include/p4/ignore.h b/P4Plugin/Source/p4api/include/p4/ignore.h similarity index 98% rename from P4Plugin/Source/r19.1/include/p4/ignore.h rename to P4Plugin/Source/p4api/include/p4/ignore.h index 2dacbc9..373ae03 100644 --- a/P4Plugin/Source/r19.1/include/p4/ignore.h +++ b/P4Plugin/Source/p4api/include/p4/ignore.h @@ -9,7 +9,7 @@ class IgnoreTable; -struct IgnoreItem; +class IgnoreItem; class StrArray; class FileSys; diff --git a/P4Plugin/Source/r19.1/include/p4/keepalive.h b/P4Plugin/Source/p4api/include/p4/keepalive.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/keepalive.h rename to P4Plugin/Source/p4api/include/p4/keepalive.h diff --git a/P4Plugin/Source/r19.1/include/p4/macfile.h b/P4Plugin/Source/p4api/include/p4/macfile.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/macfile.h rename to P4Plugin/Source/p4api/include/p4/macfile.h diff --git a/P4Plugin/Source/r19.1/include/p4/macutil.h b/P4Plugin/Source/p4api/include/p4/macutil.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/macutil.h rename to P4Plugin/Source/p4api/include/p4/macutil.h diff --git a/P4Plugin/Source/p4api/include/p4/malloc_override.h b/P4Plugin/Source/p4api/include/p4/malloc_override.h new file mode 100644 index 0000000..1ef1925 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/malloc_override.h @@ -0,0 +1,114 @@ +/* + * Copyright 1995, 2019 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + +Note that for P4API users, the definitions in this file will always +default to the plain malloc/free definitions - the P4API need not be +built with a memory manager. + +*/ + +# pragma once + +# if defined(MALLOC_OVERRIDE) +# define HAS_MALLOC_OVERRIDE + +# ifdef USE_MIMALLOC +// Note that mimalloc/Jamfile has a copy of these. +# define MI_STATIC_LIB +# ifndef NDEBUG +# define NDEBUG +# endif +# define MI_STAT 1 +# define MI_NO_ENVIRO 1 +# include + +# define HAS_MIMALLOC +# define P4_MALLOC mi_malloc +# define P4_CALLOC mi_calloc +# define P4_REALLOC mi_realloc +# define P4_FREE mi_cfree +# define P4_STRDUP mi_strdup +// These functions can crash if passed a non MiMalloc pointer to free. +// See job107801 +# ifdef NO_DEF +# define P4_SIZED_DELETE(ptr, size) mi_free_size( ptr, size ) +# define P4_SIZED_DELETE_ARR(ptr, size) mi_free_size( ptr, size ) +# endif + +# endif // USE_MIMALLOC + +# ifdef USE_JEMALLOC +// Note that jemalloc/Jamfile has a copy of these. +# define JEMALLOC_NO_PRIVATE_NAMESPACE +# define _REENTRANT +# define JEMALLOC_EXPORT +# define _LIB +# define JEMALLOC_NO_RENAME +# include + +# define HAS_JEMALLOC +# define P4_MALLOC je_malloc +# define P4_CALLOC je_calloc +# define P4_REALLOC je_realloc +# define P4_FREE je_free +# define P4_STRDUP strdup +# define P4_SIZED_DELETE(ptr, size) je_free(ptr) +# define P4_SIZED_DELETE_ARR(ptr, size) je_free(ptr) + + +# endif // USE_JEMALLOC + +# ifdef USE_RPMALLOC +# include + +# define HAS_RPMALLOC +# define P4_MALLOC rpmalloc +# define P4_CALLOC rpcalloc +# define P4_REALLOC rprealloc +# define P4_FREE rpfree +# define P4_STRDUP strdup +# define P4_SIZED_DELETE(ptr, size) rpfree( ptr ) +# define P4_SIZED_DELETE_ARR(ptr, size) rpfree( ptr ) + +# endif // USE_RPMALLOC + +# ifdef USE_SMARTHEAP +# include +# define HAS_SMARTHEAP +# if 0 +# if (_MSC_VER >= 1900) +# define P4_MALLOC SH_malloc +# define P4_CALLOC SH_calloc +# define P4_REALLOC SH_realloc +# define P4_FREE SH_free +# define P4_STRDUP strdup +# define P4_SIZED_DELETE(ptr, size) SH_free( ptr ) +# define P4_SIZED_DELETE_ARR(ptr, size) SH_free( ptr ) +# endif // _MSC_VER < 1900 +# endif // 0 +# endif // USE_SMARTHEAP + +# define NEEDS_OPERATOR_NEW_OVERRIDE + +// In Visual Studio 2015 and lower on Windows, SmartHeap can override +// new/delete/malloc/free via linking. Newer versions can't. +# if (_MSC_VER < 1900) && defined(HAS_SMARTHEAP) +# undef NEEDS_OPERATOR_NEW_OVERRIDE +# endif + +# endif // MALLOC_OVERRIDE + +# ifndef P4_MALLOC // None +# define P4_MALLOC malloc +# define P4_CALLOC calloc +# define P4_REALLOC realloc +# define P4_FREE free +# define P4_STRDUP strdup +# define P4_SIZED_DELETE(ptr, size) free( ptr ) +# define P4_SIZED_DELETE_ARR(ptr, size) free( ptr ) +# endif diff --git a/P4Plugin/Source/r19.1/include/p4/mangle.h b/P4Plugin/Source/p4api/include/p4/mangle.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/mangle.h rename to P4Plugin/Source/p4api/include/p4/mangle.h diff --git a/P4Plugin/Source/r19.1/include/p4/mapapi.h b/P4Plugin/Source/p4api/include/p4/mapapi.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/mapapi.h rename to P4Plugin/Source/p4api/include/p4/mapapi.h diff --git a/P4Plugin/Source/r19.1/include/p4/md5.h b/P4Plugin/Source/p4api/include/p4/md5.h similarity index 86% rename from P4Plugin/Source/r19.1/include/p4/md5.h rename to P4Plugin/Source/p4api/include/p4/md5.h index f88680f..e2b0cc2 100644 --- a/P4Plugin/Source/r19.1/include/p4/md5.h +++ b/P4Plugin/Source/p4api/include/p4/md5.h @@ -1,7 +1,15 @@ +/* + * Copyright 1995, 2019 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + /* * md5.h -- MD5 (message digest algorithm) interface */ +# ifndef USE_SSL + #if defined(__GNUC__) # if defined(__x86_64__) || defined(__i686__) || defined(__sparc__) || \ defined(__ia64__) || defined(__powerpc__) || defined(__i386__) || \ @@ -130,3 +138,25 @@ class MD5 { }; # undef ALIGN + +# else + +class MD5 { + + public: + MD5(); + ~MD5(); + MD5& operator=( const MD5& rhs ); + + void Update( const StrPtr &buf ); + void Final( StrBuf &output ); + void Final( unsigned char digest[ 16 ] ); + P4INT64 Count(); + + private: + + void* ctx; + P4INT64 bits; +}; + +# endif diff --git a/P4Plugin/Source/r19.1/include/p4/msgclient.h b/P4Plugin/Source/p4api/include/p4/msgclient.h similarity index 96% rename from P4Plugin/Source/r19.1/include/p4/msgclient.h rename to P4Plugin/Source/p4api/include/p4/msgclient.h index 6f96f41..3788da0 100644 --- a/P4Plugin/Source/r19.1/include/p4/msgclient.h +++ b/P4Plugin/Source/p4api/include/p4/msgclient.h @@ -117,6 +117,10 @@ class MsgClient { static ErrorId InvalidUrl; static ErrorId GotoUrl; + static ErrorId PrivatekeyNotSecure; + + static ErrorId DirectoryNotEmpty; + static ErrorId CantRevertDirectoryNotEmpty; // Retired ErrorIds. We need to keep these so that clients // built with newer apis can commnunicate with older servers diff --git a/P4Plugin/Source/r19.1/include/p4/msgdb.h b/P4Plugin/Source/p4api/include/p4/msgdb.h similarity index 96% rename from P4Plugin/Source/r19.1/include/p4/msgdb.h rename to P4Plugin/Source/p4api/include/p4/msgdb.h index a98b535..76329d7 100644 --- a/P4Plugin/Source/r19.1/include/p4/msgdb.h +++ b/P4Plugin/Source/p4api/include/p4/msgdb.h @@ -42,6 +42,7 @@ class MsgDb { static ErrorId Read; static ErrorId Stumblebum; static ErrorId GetFormat; + static ErrorId OpFormat; static ErrorId ScanNoLock; static ErrorId Scan; static ErrorId ScanFormat; @@ -92,6 +93,8 @@ class MsgDb { static ErrorId AddressChanged; static ErrorId LicenseNeedsApplication; static ErrorId BadIPservice; + static ErrorId BadXCapLine; + static ErrorId BadXCapWord; static ErrorId TreeCorrupt; static ErrorId TreeNotOpened; @@ -109,6 +112,8 @@ class MsgDb { static ErrorId CaseMismatch; + static ErrorId GenNumPageTooNew; + // Retired ErrorIds. We need to keep these so that clients // built with newer apis can commnunicate with older servers // still sending these. diff --git a/P4Plugin/Source/r19.1/include/p4/msgdm.h b/P4Plugin/Source/p4api/include/p4/msgdm.h similarity index 99% rename from P4Plugin/Source/r19.1/include/p4/msgdm.h rename to P4Plugin/Source/p4api/include/p4/msgdm.h index f29d3b9..906280b 100644 --- a/P4Plugin/Source/r19.1/include/p4/msgdm.h +++ b/P4Plugin/Source/p4api/include/p4/msgdm.h @@ -279,6 +279,7 @@ class MsgDm { static ErrorId ChangeDeleteHasFiles; static ErrorId ChangeDeleteShelved; static ErrorId ChangeDeleteHasStream; + static ErrorId ChangeDeleteTaskUnload; static ErrorId ChangeDeleteSuccess; static ErrorId ChangeNotOwner; static ErrorId CommittedNoPerm; @@ -633,6 +634,8 @@ class MsgDm { static ErrorId PurgeSnapData; static ErrorId PurgeDeleted; static ErrorId PurgeCheck; + static ErrorId PurgePurged; + static ErrorId PurgePurgeCheck; static ErrorId PurgeNoRecords; static ErrorId PurgeData; static ErrorId PurgeActiveTask; @@ -1003,6 +1006,8 @@ class MsgDm { static ErrorId LogFormatInvalid; static ErrorId LogNumericInvalid; static ErrorId LogEventsUnmatched; + static ErrorId LogEventUnknown; + static ErrorId LogEventVerUnknown; static ErrorId JournalStateBadFmt; static ErrorId JournalStateCkp; @@ -1023,6 +1028,8 @@ class MsgDm { static ErrorId CommandNotOnServer; static ErrorId MalformedUUID; static ErrorId TooManyConfigurables; + static ErrorId DataOutOfRange; + static ErrorId ExtensionBadDirectory; // Retired ErrorIds. We need to keep these so that clients // built with newer apis can commnunicate with older servers diff --git a/P4Plugin/Source/p4api/include/p4/msgdm2.h b/P4Plugin/Source/p4api/include/p4/msgdm2.h new file mode 100644 index 0000000..da82301 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/msgdm2.h @@ -0,0 +1,71 @@ +/* + * Copyright 2019 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + * msgdm2.h - overflow definitions of errors for data manager core subsystem. + */ + +class MsgDm2 { + public: + static ErrorId ExistingStorage; + static ErrorId ConfigHistData; + static ErrorId LbrScanBadState; + static ErrorId LbrScanCtlNotFound; + static ErrorId UnshelveStreamResolve; + static ErrorId RequiresAutoIdCode; + static ErrorId SpecMissingBuiltin; + static ErrorId StreamSpecIntegOkay; + static ErrorId CheckFailedNoDB; + static ErrorId RequiresAutoIdOrPosCode; + static ErrorId CannotRecreateDeleteField; + static ErrorId SpecRepairDisallowNNN; + static ErrorId SpecRepairNoCustomSpec; + static ErrorId NoStreamSpecPermsWarn; + static ErrorId StreamSpecProtectsNotCompatible; + static ErrorId StreamOpenedByUser; + static ErrorId StreamOpenReOpen; + static ErrorId RemoteLabelOpenFailed; + static ErrorId RemoteLabelUpdateFailed; + static ErrorId RemoteStreamUpdateFailed; + static ErrorId StreamAtChangeDeleted; + static ErrorId StreamNotOpenInChange; + static ErrorId StreamParentViewNoChange; + static ErrorId LbrRevVerOutOfRange; + static ErrorId GblLockIndexMismatch; + static ErrorId GblLockIndexMissing; + static ErrorId GblLockMissing; + static ErrorId StreamlogInteg; + static ErrorId RemoteAutoGenSpecFailed; + static ErrorId StreamParentViewMustBeOpen; + static ErrorId StreamPVSourceComment; + static ErrorId BeginUpgradeStep; + static ErrorId EndUpgradeStep; + static ErrorId StreamNoCmtClientBadSave; + static ErrorId ConnNeedsFwdCrypto; + static ErrorId NoStreamTypeChangePV; + static ErrorId PurgeTaskStream; + static ErrorId PurgeCheckWldDelIgn; + static ErrorId PurgeCheckWldDel; + static ErrorId PurgeCheckIgn; + static ErrorId PurgePurgeCheckWldDelIgn; + static ErrorId PurgePurgeCheckWldDel; + static ErrorId PurgePurgeCheckIgn; + static ErrorId IdHasWhitespace; + static ErrorId IdHasEquals; + static ErrorId RmtAddTopologyFailed; + static ErrorId RmtTopologyExists; + static ErrorId ImportDittoGraph; + static ErrorId ReopenHasMoved; + static ErrorId TopologyData; + static ErrorId StreamViewMatchData; + static ErrorId NoTopologyRecord; + static ErrorId NoServerIDSet; + static ErrorId NoPartitionedToReadonly; + static ErrorId LockNameNull; + static ErrorId WorkRecNotFound; + static ErrorId ProtectsMismatch; + static ErrorId StreamViewGenAtChangeSkip; +} ; diff --git a/P4Plugin/Source/r19.1/include/p4/msggraph.h b/P4Plugin/Source/p4api/include/p4/msggraph.h similarity index 96% rename from P4Plugin/Source/r19.1/include/p4/msggraph.h rename to P4Plugin/Source/p4api/include/p4/msggraph.h index 3a1feab..449b99a 100644 --- a/P4Plugin/Source/r19.1/include/p4/msggraph.h +++ b/P4Plugin/Source/p4api/include/p4/msggraph.h @@ -359,9 +359,22 @@ class MsgGraph { static ErrorId HaveSpecificNoRev; static ErrorId NotOnReplica; static ErrorId CommitFileLogOneline; + static ErrorId CommitFileLogOnelineTree; static ErrorId WarnNoWriteAccess; static ErrorId BadParentNumber; static ErrorId RefTagUpdateNoForce; + static ErrorId UseGraphPurgeRefhist; + static ErrorId UnexpectedObjectType; + static ErrorId DeletedRecords; + static ErrorId WldDeleteRecords; + static ErrorId UseGraphGc; + static ErrorId ObjectSha; + static ErrorId UseGraphRecomputeRefcnts; + static ErrorId WldCorrectObjRefcnt; + static ErrorId CorrectedObjRefcnt; + static ErrorId RefcntInProgress; + static ErrorId NoOrphanedObj; + static ErrorId ObjectRecNotFound; // Retired ErrorIds. We need to keep these so that clients // built with newer apis can commnunicate with older servers // still sending these. diff --git a/P4Plugin/Source/p4api/include/p4/msghelp.h b/P4Plugin/Source/p4api/include/p4/msghelp.h new file mode 100644 index 0000000..e535544 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/msghelp.h @@ -0,0 +1,280 @@ +/* + * Copyright 1995, 2000 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + * msghelp.h - definitions of errors for help subsystem. + */ + +class MsgHelp { + + public: + + static ErrorId NoHelp; + static ErrorId NoGraphHelp; + static ErrorId HelpPerforce; + static ErrorId HelpUsage; + static ErrorId HelpSimple; + static ErrorId HelpCheckPermission; + static ErrorId HelpCommands; + static ErrorId HelpUndoc; + static ErrorId HelpEnvironment; + static ErrorId HelpFiletypes; + static ErrorId HelpJobView; + static ErrorId HelpRevisions; + static ErrorId HelpViews; + static ErrorId HelpMaxResults; + static ErrorId HelpCachepurge; + static ErrorId HelpCharset; + static ErrorId HelpCommandments; + static ErrorId HelpCredits; + static ErrorId HelpAdd; + static ErrorId HelpAliases; + static ErrorId HelpAnnotate; + static ErrorId HelpAdmin; + static ErrorId HelpAdministration; + static ErrorId HelpArchive; + static ErrorId HelpAttribute; + static ErrorId HelpBackup; + static ErrorId HelpBGTask; + static ErrorId HelpBranch; + static ErrorId HelpBranches; + static ErrorId HelpBroker; + static ErrorId HelpBuildserver; + static ErrorId HelpChange; + static ErrorId HelpChanges; + static ErrorId HelpClient; + static ErrorId HelpClients; + static ErrorId HelpClone; + static ErrorId HelpCluster; + static ErrorId HelpConfigure; + static ErrorId HelpConfigurables; + static ErrorId HelpCopy; + static ErrorId HelpCopyshelf; + static ErrorId HelpCounter; + static ErrorId HelpCounters; + static ErrorId HelpCstat; + static ErrorId HelpDbpack; + static ErrorId HelpDbschema; + static ErrorId HelpReshelve; + static ErrorId HelpDbstat; + static ErrorId HelpDbverify; + static ErrorId HelpDepot; + static ErrorId HelpDepots; + static ErrorId HelpDelete; + static ErrorId HelpDescribe; + static ErrorId HelpDiff; + static ErrorId HelpDiff2; + static ErrorId HelpDirs; + static ErrorId HelpDiskspace; + static ErrorId HelpDistributed; + static ErrorId HelpDuplicate; + static ErrorId HelpDvcs; + static ErrorId HelpEdit; + static ErrorId HelpExport; + static ErrorId HelpFetch; + static ErrorId HelpExtension; + static ErrorId HelpClientExtensionIntro; + static ErrorId HelpServerExtensionIntro; + static ErrorId HelpFailover; + static ErrorId HelpFiles; + static ErrorId HelpFilelog; + static ErrorId HelpFix; + static ErrorId HelpFixes; + static ErrorId HelpForwardingreplica; + static ErrorId HelpFstat; + static ErrorId HelpGrantPermission; + static ErrorId HelpGrep; + static ErrorId HelpGroup; + static ErrorId HelpGroups; + static ErrorId HelpHave; + static ErrorId HelpHeartbeat; + static ErrorId HelpHelp; + static ErrorId HelpIgnores; + static ErrorId HelpIndex; + static ErrorId HelpInfo; + static ErrorId HelpInit; + static ErrorId HelpInteg; + static ErrorId HelpInteg3; + static ErrorId HelpInteged; + static ErrorId HelpInterchanges; + static ErrorId HelpIstat; + static ErrorId HelpJob; + static ErrorId HelpJobs; + static ErrorId HelpJobSpec; + static ErrorId HelpJournalcopy; + static ErrorId HelpJournaldbchecksums; + static ErrorId HelpJournals; + static ErrorId HelpKey; + static ErrorId HelpKeys; + static ErrorId HelpLabel; + static ErrorId HelpLabels; + static ErrorId HelpLabelsync; + static ErrorId HelpLegal; + static ErrorId HelpLdap; + static ErrorId HelpLdaps; + static ErrorId HelpLdapSync; + static ErrorId HelpLicense; + static ErrorId HelpList; + static ErrorId HelpLock; + static ErrorId HelpLockstat; + static ErrorId HelpLogappend; + static ErrorId HelpLogger; + static ErrorId HelpLogin; + static ErrorId HelpLogin2; + static ErrorId HelpLogout; + static ErrorId HelpLogparse; + static ErrorId HelpLogrotate; + static ErrorId HelpLogschema; + static ErrorId HelpLogstat; + static ErrorId HelpLogtail; + static ErrorId HelpMerge; + static ErrorId HelpMerge3; + static ErrorId HelpMonitor; + static ErrorId HelpMove; + static ErrorId HelpNetworkAddress; + static ErrorId HelpObliterate; + static ErrorId HelpOpenableStreamSpecs; + static ErrorId HelpOpened; + static ErrorId HelpPing; + static ErrorId HelpPasswd; + static ErrorId HelpPopulate; + static ErrorId HelpPrint; + static ErrorId HelpProperty; + static ErrorId HelpProtect; + static ErrorId HelpProtects; + static ErrorId HelpProxy; + static ErrorId HelpPrune; + static ErrorId HelpPubKey; + static ErrorId HelpPubKeys; + static ErrorId HelpPull; + static ErrorId HelpPush; + static ErrorId HelpRealtime; + static ErrorId HelpReload; + static ErrorId HelpRemote; + static ErrorId HelpRemotes; + static ErrorId HelpRename; + static ErrorId HelpRenameUser; + static ErrorId HelpReconcile; + static ErrorId HelpReopen; + static ErrorId HelpReplication; + static ErrorId HelpRepo; + static ErrorId HelpRepos; + static ErrorId HelpResolve; + static ErrorId HelpResolved; + static ErrorId HelpRestore; + static ErrorId HelpResubmit; + static ErrorId HelpResubmitShort; + static ErrorId HelpRetype; + static ErrorId HelpRevert; + static ErrorId HelpReview; + static ErrorId HelpReviews; + static ErrorId HelpRevokePermission; + static ErrorId HelpTunables; + static ErrorId HelpShowPermission; + static ErrorId HelpShowPermissions; + static ErrorId HelpSearch; + static ErrorId HelpServer; + static ErrorId HelpServerid; + static ErrorId HelpServers; + static ErrorId HelpSet; + static ErrorId HelpShelve; + static ErrorId HelpSizes; + static ErrorId HelpSnap; + static ErrorId HelpSpec; + static ErrorId HelpStorage; + static ErrorId HelpStream; + static ErrorId HelpStreamCmds; + static ErrorId HelpStreamintro; + static ErrorId HelpStreamlog; + static ErrorId HelpStreams; + static ErrorId HelpStreamSpec; + static ErrorId HelpStreamSpecInteg; + static ErrorId HelpSubmit; + static ErrorId HelpSwitch; + static ErrorId HelpSync; + static ErrorId HelpTag; + static ErrorId HelpTickets; + static ErrorId HelpTopology; + static ErrorId HelpTrigger; + static ErrorId HelpTriggers; + static ErrorId HelpTrust; + static ErrorId HelpTypeMap; + static ErrorId HelpUndo; + static ErrorId HelpUnload; + static ErrorId HelpUnlock; + static ErrorId HelpUnshelve; + static ErrorId HelpUnsubmit; + static ErrorId HelpUnzip; + static ErrorId HelpUpgrades; + static ErrorId HelpUser; + static ErrorId HelpUsers; + static ErrorId HelpVerify; + static ErrorId HelpWhere; + static ErrorId HelpZip; + static ErrorId HelpReplicate; + + static ErrorId ResolveUserHelp; + + static ErrorId HelpGraph; + static ErrorId HelpGraphCommands; + static ErrorId HelpGraphAdministration; + static ErrorId HelpGraphAdd; + static ErrorId HelpGraphClient; + static ErrorId HelpGraphCherryPick; + static ErrorId HelpGraphDelete; + static ErrorId HelpGraphDescribe; + static ErrorId HelpGraphDiff; + static ErrorId HelpGraphDiff2; + static ErrorId HelpGraphDirs; + static ErrorId HelpGraphEdit; + static ErrorId HelpGraphFilelog; + static ErrorId HelpGraphFiles; + static ErrorId HelpGraphFstat; + static ErrorId HelpGraphHave; + static ErrorId HelpGraphLfsLocks; + static ErrorId HelpGraphLfsLock; + static ErrorId HelpGraphLfsUnLock; + static ErrorId HelpGraphLock; + static ErrorId HelpGraphLog; + static ErrorId HelpGraphMerge; + static ErrorId HelpGraphOpened; + static ErrorId HelpGraphRebase; + static ErrorId HelpGraphReconcile; + static ErrorId HelpGraphRevert; + static ErrorId HelpGraphSubmit; + static ErrorId HelpGraphSwitch; + static ErrorId HelpGraphSync; + static ErrorId HelpGraphTag; + static ErrorId HelpGraphTags; + static ErrorId HelpGraphReceivePack; + static ErrorId HelpGraphShowRef; + static ErrorId HelpGraphRefHist; + static ErrorId HelpGraphPackObjects; + static ErrorId HelpGraphSubmodule; + static ErrorId HelpGraphLsTree; + static ErrorId HelpGraphCatFile; + static ErrorId HelpGraphUnlock; + static ErrorId HelpGraphPrint; + static ErrorId HelpGraphResolve; + static ErrorId HelpGraphRevList; + static ErrorId HelpGraphLfsPush; + static ErrorId HelpGraphLfsFetch; + static ErrorId HelpGraphLfsStat; + static ErrorId HelpGraphVerify; + static ErrorId HelpGraphUndo; + static ErrorId HelpGraphRecomputeRefcnts; + static ErrorId HelpGraphGc; + static ErrorId HelpGraphPurgeRefhist; + + static ErrorId Help2FA; + + // Retired ErrorIds. We need to keep these so that clients + // built with newer apis can commnunicate with older servers + // still sending these. + + static ErrorId HelpBrowse; // DEPRECATED 2013.1 removed ZeroConf + static ErrorId HelpZeroConf; // DEPRECATED 2013.1 removed ZeroConf +}; diff --git a/P4Plugin/Source/p4api/include/p4/msglbr.h b/P4Plugin/Source/p4api/include/p4/msglbr.h new file mode 100644 index 0000000..684adb5 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/msglbr.h @@ -0,0 +1,66 @@ +/* + * Copyright 1995, 2000 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + * msglbr.h - definitions of errors for Lbr subsystem. + */ + + +class MsgLbr { + + public: + + static ErrorId BadType1; + static ErrorId Purged; + static ErrorId ScriptFailed; + + static ErrorId After; + static ErrorId Checkin; + static ErrorId Checkout; + static ErrorId Commit; + static ErrorId Diff; + static ErrorId Edit0; + static ErrorId Edit1; + static ErrorId Edit2; + static ErrorId Empty; + static ErrorId EofAt; + static ErrorId Expect; + static ErrorId ExpDesc; + static ErrorId ExpEof; + static ErrorId ExpRev; + static ErrorId ExpSemi; + static ErrorId Lock; + static ErrorId Loop; + static ErrorId Mangled; + static ErrorId MkDir; + static ErrorId NoBrRev; + static ErrorId NoBranch; + static ErrorId NoRev; + static ErrorId NoRev3; + static ErrorId NoRevDel; + static ErrorId Parse; + static ErrorId RevLess; + static ErrorId TooBig; + static ErrorId RcsTooBig; + static ErrorId FmtLbrStat; + static ErrorId FmtLbrStat2; + static ErrorId FmtLbrStat3; + static ErrorId FmtLbrStat4; + static ErrorId FmtLbrStat5; + static ErrorId LbrOpenFail; + static ErrorId AlreadyOpen; + static ErrorId BadKeyword; + static ErrorId KeywordUnterminated; + static ErrorId ObjectReadError; + static ErrorId SameFile; + static ErrorId LbrTypeInsane; + static ErrorId LbrTrackInsane; + + // Retired ErrorIds. We need to keep these so that clients + // built with newer apis can commnunicate with older servers + // still sending these. + +} ; diff --git a/P4Plugin/Source/r19.1/include/p4/msgos.h b/P4Plugin/Source/p4api/include/p4/msgos.h similarity index 98% rename from P4Plugin/Source/r19.1/include/p4/msgos.h rename to P4Plugin/Source/p4api/include/p4/msgos.h index cb70fac..408b579 100644 --- a/P4Plugin/Source/r19.1/include/p4/msgos.h +++ b/P4Plugin/Source/p4api/include/p4/msgos.h @@ -17,6 +17,7 @@ class MsgOs { static ErrorId SysUn; static ErrorId SysUn2; static ErrorId Net; + static ErrorId Net2; static ErrorId NetUn; static ErrorId TooMany; diff --git a/P4Plugin/Source/r19.1/include/p4/msgrpc.h b/P4Plugin/Source/p4api/include/p4/msgrpc.h similarity index 94% rename from P4Plugin/Source/r19.1/include/p4/msgrpc.h rename to P4Plugin/Source/p4api/include/p4/msgrpc.h index 392ffee..df02f92 100644 --- a/P4Plugin/Source/r19.1/include/p4/msgrpc.h +++ b/P4Plugin/Source/p4api/include/p4/msgrpc.h @@ -59,6 +59,10 @@ class MsgRpc { static ErrorId SslDirHasCreds; static ErrorId SslCredsBadOwner; static ErrorId SslCertBadDates; + static ErrorId SslCertBad; + static ErrorId SslCertBadChain; + static ErrorId SslCertMalformed; + static ErrorId SslCertBadSubject; static ErrorId SslNoCredentials; static ErrorId SslFailGetExpire; diff --git a/P4Plugin/Source/p4api/include/p4/msgscript.h b/P4Plugin/Source/p4api/include/p4/msgscript.h new file mode 100644 index 0000000..d5d1d77 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/msgscript.h @@ -0,0 +1,41 @@ +/* + * Copyright 2018 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + * msgscript.h - definitions of errors for scripting subsystem. + */ + +class MsgScript { + + public: + + static ErrorId ScriptRuntimeError; + static ErrorId ScriptMaxRunErr; + static ErrorId DoNotBlameTheScript; + static ErrorId ExtAddChangeDesc; + static ErrorId ExtEditChangeDesc; + static ErrorId ExtOverChangeDesc; + static ErrorId ExtDelChangeDesc; + static ErrorId ExtLoadErr; + static ErrorId ExtDisabled; + static ErrorId ExtCodingErr; + static ErrorId ExtCodingGenErr; + static ErrorId DevErr; + static ErrorId ExtClientMsg; + static ErrorId ExtClientError; + static ErrorId ExtClientPrompt; + static ErrorId ExtClientCmdRejected; + static ErrorId ExtClientRuntimeFail; + static ErrorId ExtResourceErr; + static ErrorId ScriptLangUnknown; + static ErrorId ScriptLangVerUnknown; + static ErrorId ExtWrongProduct; + static ErrorId ExtScriptNotInBuild; + static ErrorId OsExitRealError; + static ErrorId ExtCertAddChangeDesc; + static ErrorId ExtCertDelChangeDesc; + static ErrorId GenericFatal; +}; diff --git a/P4Plugin/Source/r19.1/include/p4/msgserver.h b/P4Plugin/Source/p4api/include/p4/msgserver.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/msgserver.h rename to P4Plugin/Source/p4api/include/p4/msgserver.h diff --git a/P4Plugin/Source/p4api/include/p4/msgserver2.h b/P4Plugin/Source/p4api/include/p4/msgserver2.h new file mode 100644 index 0000000..5e6e716 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/msgserver2.h @@ -0,0 +1,193 @@ +/* + * Copyright 1995, 2019 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + * msgserver2.h - More definitions of errors for server subsystem. + * The MsgServer2 class contains overflow messages from MsgServer. + */ + +class MsgServer2 { + + public: + static ErrorId ExtensionDeletePreview; + static ErrorId ExtensionInstallPreview; + static ErrorId WarnPreviewMode; + static ErrorId UseReopen2; + static ErrorId UseReopen3; + static ErrorId StgKeyMiss; + static ErrorId StgBadCount; + static ErrorId StgOrphan; + static ErrorId UseResolve2; + static ErrorId UseOpened3; + static ErrorId StorageUpgradeInProgress; + static ErrorId StorageEdgeFailure; + static ErrorId UseStreamlog; + static ErrorId SubmitNoBgXferTarget; + static ErrorId SubmitBgXferNoConfig; + static ErrorId SubmitBgNotEdge; + static ErrorId SubmitBgNotConfigured; + static ErrorId UsePullt; + static ErrorId SubmitNoBackgroundThreads; + static ErrorId StorageNoUpgrade; + static ErrorId FailoverForced; + static ErrorId FailoverWriteServerID; + static ErrorId FailoverServerIDBad; + static ErrorId FailoverMasterTooOld; + static ErrorId FailoverCfgCommit; + static ErrorId FailoverUnCfgCommit; + static ErrorId FailoverDetails; + static ErrorId FailoverNeedYOK; + static ErrorId ServerIDReused; + static ErrorId StorageRestoreDigest; + static ErrorId xuUpstream; + static ErrorId xuAtStart; + static ErrorId xuUpstream2; + static ErrorId xuAtStart2; + static ErrorId JournalRequired; + static ErrorId ShelvedStreamDeleted; + static ErrorId NoShelvedStreamDelete; + static ErrorId DescribeShelvedStream; + static ErrorId ShelveCompleteStream; + static ErrorId ShelveCompleteBoth; + static ErrorId ShelveDeleteJustFiles; + static ErrorId StorageWaitComplete; + static ErrorId ExtensionNameCfgUniq; + static ErrorId UpgradeWarning; + static ErrorId BadUpLbr; + static ErrorId MissingLbr; + static ErrorId NoStreamFieldsResolve; + static ErrorId UseDiffA; + static ErrorId UseDiff2A; + static ErrorId NoStreamDefaultShelve; + static ErrorId NoStreamShelve; + static ErrorId ShelveStreamBegin; + static ErrorId StreamShelfOccupied; + static ErrorId StreamShelfReadOnly; + static ErrorId ServiceNotSupported; + static ErrorId NoRplMissingMandatory; + static ErrorId UnexpectedRotJnlChange; + static ErrorId RunExtErrorWarning; + static ErrorId RunExtErrorFailed; + static ErrorId RunExtErrorFatal; + static ErrorId StorageCleanupWarn; + static ErrorId VerifyDataProblem; + static ErrorId VerifyData; + static ErrorId ExtensionPostInstallMsg; + static ErrorId UseStreamSpec; + static ErrorId UseLbrScan; + static ErrorId LbrScanBusy; + static ErrorId LbrScanBadDepot; + static ErrorId LbrScanPathInUse; + static ErrorId LbrScanUnderPath; + static ErrorId LbrScanNotFound; + static ErrorId LbrScanBadPath; + static ErrorId StorageZeroRefClean; + static ErrorId StorageZeroCount; + static ErrorId StorageDupZero; + static ErrorId ExtensionRunFunction; + static ErrorId StringTooLarge; + static ErrorId ExtensionNonUTF8Data; + static ErrorId StorageShareRep; + static ErrorId StorageSingle; + static ErrorId StorageSymlink; + static ErrorId ExtMissingCfg; + static ErrorId ExtMissingCfgEvent; + static ErrorId MissingMovedFilesHeader; + static ErrorId MissingMovedFile; + static ErrorId UpdatedLbrType; + static ErrorId InvalidExtName; + static ErrorId DigestFail; + static ErrorId EndOfStorePhase1; + static ErrorId DigestFail2; + static ErrorId NoFilesInSvrRtForVal; + static ErrorId UseHeartbeat; + static ErrorId UseHeartbeatWait; + static ErrorId UseHeartbeatInterval; + static ErrorId UseHeartbeatCount; + static ErrorId HeartbeatNoTarget; + static ErrorId HeartbeatExiting; + static ErrorId HeartbeatAccessFailed; + static ErrorId HeartbeatMaxWait; + static ErrorId HeartbeatTargetTooOld; + static ErrorId SkippedKeyed; + static ErrorId DuplicateCertificate; + static ErrorId ExtensionCertInstallSuccess; + static ErrorId ExtensionCertInstallPreview; + static ErrorId ExtensionCertDelSuccess; + static ErrorId ExtensionCertDelPreview; + static ErrorId ExtensionCertMissing; + static ErrorId ExtensionNotSigned; + static ErrorId ExtensionSignUntrusted; + static ErrorId ClientTooOldToPackage; + static ErrorId StreamSpecIntegPend; + static ErrorId StreamSpecInteg; + static ErrorId BadExternalAddr; + static ErrorId ShelvePromotedStream; + static ErrorId ShelvePromotedBoth; + static ErrorId StreamSpecPermsDisabled; + static ErrorId UseDbSchema; + static ErrorId UseStreamSpecParentView; + static ErrorId StgOrphanIndex; + static ErrorId StgIndexMismatch; + static ErrorId StgOrphanStart; + static ErrorId StgOrphanPause; + static ErrorId StgOrphanRestart; + static ErrorId StgOrphanCancelled; + static ErrorId StgOrphanWait; + static ErrorId StgScanHeader; + static ErrorId StgNoScans; + static ErrorId UpgradeInfo; + static ErrorId UpgradeComplete; + static ErrorId UpgradeNeeded; + static ErrorId UpgradeRplUnknown; + static ErrorId UseUpgrades; + static ErrorId BadPRoot; + static ErrorId FailedToUpdUnExpKtextDigest; + static ErrorId StreamHasParentView; + static ErrorId StreamParentViewChanged; + static ErrorId StreamPVSpecOpen; + static ErrorId UpdateDigestReport; + static ErrorId UpdateDigestProgress; + static ErrorId StreamPVVirtualOnlyInh; + static ErrorId SSInhPVIntegNotDone; + static ErrorId StreamPVTaskOnlyInh; + static ErrorId SSIntegNotCurStream; + static ErrorId ExtCfgMissing; + static ErrorId NoUnshelveVirtIntoNoInh; + static ErrorId NoUnshelveNoInhIntoVirt; + static ErrorId ReplicaSharedConfig; + static ErrorId RtMonitorDisabled; + static ErrorId UseMonitorRT; + static ErrorId SwitchStreamUnrelated; + static ErrorId PurgeReportArchive; + static ErrorId ReplicaLag; + static ErrorId InfoProxyServerID; + static ErrorId MoveReaddIntegConflictResolveWarn; + static ErrorId ShelveArchiveInUse; + static ErrorId ShelveDupDiff; + static ErrorId ShelveNotPromoted; + static ErrorId VerifyRepairKtext; + static ErrorId VerifyRepairNone; + static ErrorId VerifyRepairConflict; + static ErrorId VerifyRepairSnapped; + static ErrorId VerifyRepairCopied; + static ErrorId UseVerifyR; + static ErrorId InfoCommitServer; + static ErrorId InfoEdgeServer; + static ErrorId MovePairSplit; + static ErrorId UseTopology; + static ErrorId TopologyOnCurrentSvr; + static ErrorId FileNoMatchStgDigest; + static ErrorId FileNoMatchStgSize; + static ErrorId UseStreams2; + static ErrorId UnknownContext; + static ErrorId RplTooBig; + static ErrorId IntegTaskNoDirect; + static ErrorId LbrDeletionFailed; + static ErrorId InfoProxyCacheRoot; + static ErrorId InfoProxyRoot; + static ErrorId UpgradeFeatureUnknown; +}; diff --git a/P4Plugin/Source/p4api/include/p4/msgspec.h b/P4Plugin/Source/p4api/include/p4/msgspec.h new file mode 100644 index 0000000..88cf114 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/msgspec.h @@ -0,0 +1,39 @@ +/* + * Copyright 1995, 2000 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + * msgspec.h - definitions of errors for spec subsystem. + */ + +class MsgSpec { + + public: + + static ErrorId SpecBranch; + static ErrorId SpecClient; + static ErrorId SpecLabel; + static ErrorId SpecLdap; + static ErrorId SpecLicense; + static ErrorId SpecChange; + static ErrorId SpecDepot; + static ErrorId SpecGroup; + static ErrorId SpecProtect; + static ErrorId SpecRemote; + static ErrorId SpecRepo; + static ErrorId SpecServer; + static ErrorId SpecStream; + static ErrorId SpecTrigger; + static ErrorId SpecTypeMap; + static ErrorId SpecUser; + static ErrorId SpecJob; + static ErrorId SpecEditSpec; + static ErrorId SpecExtension; + static ErrorId SpecExtensionIns; + + // Retired ErrorIds. We need to keep these so that clients + // built with newer apis can commnunicate with older servers + // still sending these. +}; diff --git a/P4Plugin/Source/r19.1/include/p4/msgsupp.h b/P4Plugin/Source/p4api/include/p4/msgsupp.h similarity index 90% rename from P4Plugin/Source/r19.1/include/p4/msgsupp.h rename to P4Plugin/Source/p4api/include/p4/msgsupp.h index e1e6613..af96242 100644 --- a/P4Plugin/Source/r19.1/include/p4/msgsupp.h +++ b/P4Plugin/Source/p4api/include/p4/msgsupp.h @@ -323,6 +323,7 @@ class MsgSupp { static ErrorId OptionTrigger; static ErrorId OptionIgnoreHave; static ErrorId OptionGraphOnly; + static ErrorId OptionNoGraph; static ErrorId OptionMinSize; static ErrorId OptionMaxSize; static ErrorId OptionNameOnly; @@ -346,6 +347,7 @@ class MsgSupp { static ErrorId OptionGraph; static ErrorId OptionOneParent; static ErrorId OptionOneline; + static ErrorId OptionNoAbbrev; static ErrorId OptionMerges; static ErrorId OptionForceFailover; static ErrorId OptionIgnoreMaster; @@ -360,6 +362,10 @@ class MsgSupp { static ErrorId OptionParentNumber; static ErrorId OptionPkgExtension; static ErrorId OptionPath; + static ErrorId OptionSign; + static ErrorId OptionCert; + static ErrorId OptionComment; + static ErrorId OptionAllowUnsigned; static ErrorId OptionNoSync; static ErrorId OptionNoScript; static ErrorId OptionScriptLang; @@ -367,6 +373,22 @@ class MsgSupp { static ErrorId OptionChangeStart; static ErrorId OptionIntoOnly; static ErrorId OptionScriptAPIVersion; + static ErrorId OptionRunExtensionCmd; + static ErrorId OptionShowMemInfo; + static ErrorId OptionRepair; + static ErrorId OptionDeleteItem; + static ErrorId OptionTarget; + static ErrorId OptionInterval; + static ErrorId OptionWait; + static ErrorId OptionMissingInterval; + static ErrorId OptionMissingWait; + static ErrorId OptionMissingCount; + static ErrorId OptionSSInherit; + static ErrorId OptionSSNoInherit; + static ErrorId OptionSSSourceComments; + static ErrorId OptionSSParentView; + static ErrorId OptionLocalLicense; + static ErrorId OptionAutoReload; static ErrorId TooManyLockTrys; @@ -382,6 +404,20 @@ class MsgSupp { static ErrorId ManifestParseError; static ErrorId InvalidIntegerRange; static ErrorId FatalLockError; + static ErrorId MissingKeyCert; + static ErrorId InternalSSLerror; + static ErrorId InvalidFormatSigFile; + static ErrorId ExtSignatureFailure; + static ErrorId ExtensionPackingSuccess; + static ErrorId OptionOnly; + static ErrorId OptionShowRealtime; + static ErrorId RenameTempFailed; + static ErrorId RenameMkdirFailed; + static ErrorId RenameRmdirFailed; + static ErrorId RenameDirSearchFailed; + static ErrorId RenameDirNotEmpty; + static ErrorId OptionCleanPurge; + static ErrorId OptionViewMatch; // Retired ErrorIds. We need to keep these so that clients // built with newer apis can commnunicate with older servers diff --git a/P4Plugin/Source/r19.1/include/p4/netbuffer.h b/P4Plugin/Source/p4api/include/p4/netbuffer.h similarity index 96% rename from P4Plugin/Source/r19.1/include/p4/netbuffer.h rename to P4Plugin/Source/p4api/include/p4/netbuffer.h index 1f7f460..372ee4d 100644 --- a/P4Plugin/Source/r19.1/include/p4/netbuffer.h +++ b/P4Plugin/Source/p4api/include/p4/netbuffer.h @@ -74,6 +74,7 @@ */ typedef struct z_stream_s z_stream; +class NetSslCredentials; class NetBuffer : public NetTransport { @@ -95,6 +96,8 @@ class NetBuffer : public NetTransport { { return transport->IsSockIPv6(); } void ClientMismatch( Error *e ) { if( transport ) transport->ClientMismatch(e); }; + void SetMaxWait( const int maxWait ) + { if( transport ) transport->SetMaxWait( maxWait ); }; void DoHandshake( Error *e ) { if( transport ) transport->DoHandshake(e); }; @@ -123,6 +126,8 @@ class NetBuffer : public NetTransport { { transport->GetEncryptionType( value ); } void GetPeerFingerprint(StrBuf &value) { transport->GetPeerFingerprint( value ); } + NetSslCredentials *GetPeerCredentials() + { return transport->GetPeerCredentials(); } // NetBuffer specials // These babies take both send and receive Errors, so diff --git a/P4Plugin/Source/r19.1/include/p4/netconnect.h b/P4Plugin/Source/p4api/include/p4/netconnect.h similarity index 90% rename from P4Plugin/Source/r19.1/include/p4/netconnect.h rename to P4Plugin/Source/p4api/include/p4/netconnect.h index 20c0b6d..38770f6 100644 --- a/P4Plugin/Source/r19.1/include/p4/netconnect.h +++ b/P4Plugin/Source/p4api/include/p4/netconnect.h @@ -50,6 +50,7 @@ class KeepAlive; class NetTransport; class RpcZksClient; // NetEndPoint's friend +class NetSslCredentials; enum PeekResults { @@ -86,10 +87,13 @@ class NetEndPoint { return *GetHost(); } - virtual void GetMyFingerprint(StrBuf &value) + virtual void GetMyFingerprint(StrBuf &value) { value.Clear(); } + + virtual void SetCipherList( const StrPtr *value ) {} + virtual void SetCipherSuites( const StrPtr *value ) {} virtual bool IsAccepted() { return isAccepted; @@ -102,8 +106,9 @@ class NetEndPoint { virtual NetTransport * Connect( Error *e ) = 0; virtual NetTransport * Accept( KeepAlive *, Error *e ) = 0; - + virtual int IsSingle() = 0; + virtual int IsSSL() { return 0; }; NetPortParser & GetPortParser() { return ppaddr; } @@ -119,6 +124,7 @@ class NetTransport : public KeepAlive { public: virtual ~NetTransport(); virtual void ClientMismatch( Error *e ); + virtual void SetMaxWait( const int maxWait ) {} virtual void DoHandshake( Error * /* e */) {} // default: do nothing virtual bool HasAddress() = 0; @@ -140,15 +146,20 @@ class NetTransport : public KeepAlive { virtual void SetBreak( KeepAlive *breakCallback ) = 0; virtual int GetSendBuffering() = 0; virtual int GetRecvBuffering() = 0; - virtual void GetEncryptionType(StrBuf &value) - { + virtual void GetEncryptionType(StrBuf &value) + { value.Clear(); } - virtual void GetPeerFingerprint(StrBuf &value) - { + virtual void GetPeerFingerprint(StrBuf &value) + { value.Clear(); } + + virtual NetSslCredentials *GetPeerCredentials() + { + return 0; + } // I&O virtual int SendOrReceive( NetIoPtrs &io, Error *se, Error *re ); diff --git a/P4Plugin/Source/r19.1/include/p4/netportparser.h b/P4Plugin/Source/p4api/include/p4/netportparser.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/netportparser.h rename to P4Plugin/Source/p4api/include/p4/netportparser.h diff --git a/P4Plugin/Source/r19.1/include/p4/ntmangle.h b/P4Plugin/Source/p4api/include/p4/ntmangle.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/ntmangle.h rename to P4Plugin/Source/p4api/include/p4/ntmangle.h diff --git a/P4Plugin/Source/r19.1/include/p4/ntservice.h b/P4Plugin/Source/p4api/include/p4/ntservice.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/ntservice.h rename to P4Plugin/Source/p4api/include/p4/ntservice.h diff --git a/P4Plugin/Source/r19.1/include/p4/options.h b/P4Plugin/Source/p4api/include/p4/options.h similarity index 93% rename from P4Plugin/Source/r19.1/include/p4/options.h rename to P4Plugin/Source/p4api/include/p4/options.h index 6c826dd..b371cb6 100644 --- a/P4Plugin/Source/r19.1/include/p4/options.h +++ b/P4Plugin/Source/p4api/include/p4/options.h @@ -15,6 +15,9 @@ * x? - flag takes an optional argument (--long=arg only) * x+ - flag takes a flag and arg (-xyarg or -xy arg) * x# - flag takes a non-neg numeric arg (-xN or -x N) + * x$ - same as : except it indicates to stop parsing after + * if more arguments follow, only the first + * will be assigned to option, the rest not parsed. */ const int N_OPTS = 256; @@ -302,6 +305,14 @@ class Options FailoverVerification, // failover -v Install , // --install (extension) ChangeStart , // integrated -s change + Target , // heartbeat -t + Interval , // heartbeat -i + Wait , // heartbeat -w + MissingInterval, // heartbeat -m + MissingWait , // heartbeat -r + MissingCount , // heartbeat -c + LocalLicense , // license -u -l + AutoReload , // labels -R // options which have only long-form option names go here: @@ -342,6 +353,7 @@ class Options Trigger , // pull -u --trigger IgnoreHave , // -p --ignore-have GraphOnly , // --graph-only + NoGraph , // --no-graph MinSize , // --min-size MaxSize , // --max-size NameOnly , // --name-only @@ -358,6 +370,7 @@ class Options Index , // --index (filelog) Graph , // --graph (filelog) Oneline , // --oneline (filelog) + NoAbbrev , // --no-abbrev (filelog) OneParent , // --one-parent (filelog) Merges , // --merges (filelog) CreateSampleExtension, // --sample (extension) @@ -374,7 +387,26 @@ class Options ScriptLangVersion, // --script-lang-version IntoOnly , // --into-only (integrated) ScriptAPIVersion, // --script-api-version + RunExtension , // --run (extension) + ShowMemInfo , // --show-mem-info + Repair , // --repair + DeleteItem , // --delete + Sign , // --sign (extension) + Cert , // --cert (ext certificate) + Comment , // --comment comment + AllowUnsigned , // --allow-unsigned + SSInherit , // --inherit + SSNoInherit , // --noinherit + SSSourceComments, // --source-comments + SSParentView, // --parentview SwitchStreamUnrelated , // switch --allow-unrelated + Only , // --only BAD | MISSING + ShowRealtime , // --show-realtime + CleanPurge , // --purged-only + ViewMatch , // --viewmatch +#ifdef _DEBUG + DebugBreak, // --debugbreak +#endif UnusedLastOption } ; diff --git a/P4Plugin/Source/p4api/include/p4/p4libs.h b/P4Plugin/Source/p4api/include/p4/p4libs.h new file mode 100644 index 0000000..44bed11 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/p4libs.h @@ -0,0 +1,71 @@ +/* + * Copyright 1995, 2019 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +/* + Initialize() + + Perform static initialization of libraries required to use the P4 API. + If the host application handles some of them itself (such as if it has + its own copy of one of the libraries) then the initialization can + be skipped by passing a combination of P4LibrariesInits values or-ed + together. + + InitializeThread() + + Should be the first thing called in a thread. + + ShutdownThread() + + Should be the last thing called in a thread. + + Shutdown() + + Clean up static initializations. Must be called with the same flags + as Initialize(). + + DisableZlibOptimization() + + The Zlib bundled with the P4API may use SSE3/SSE42/PCLMULQDQ + instructions. Certain CPUs do not correctly implement these. To + disable their use, call this function. + + DisableFileSysCreateOnIntr() + + The FileSys::Create() function will by default register the new file + with the global Signaler class instance so when the program is + interrupted via ctrl-c, any temp files associated with it can be + cleaned up. Call this function to disable this functionality. + + EnableFileSysCreateOnIntr() + + Opposite of DisableFileSysCreateOnIntr(). +*/ + +enum P4LibrariesInits +{ + P4LIBRARIES_INIT_P4 = 0x01, + P4LIBRARIES_INIT_SQLITE = 0x02, + P4LIBRARIES_INIT_CURL = 0x04, + P4LIBRARIES_INIT_OPENSSL= 0x08, + P4LIBRARIES_INIT_ALL = 0x0F, +}; + +class P4Libraries +{ + public: + + static void Initialize( const int libraries, Error* e ); + static void Shutdown( const int libraries, Error* e ); + static void DisableZlibOptimization(); + static void DisableFileSysCreateOnIntr(); + static void EnableFileSysCreateOnIntr(); + + // Note that these are internal routines for Perforce products + // and are not necessary to call for general P4API use. + static void InitializeThread( const int libraries, Error* e ); + static void ShutdownThread( const int libraries, Error* e ); + +}; diff --git a/P4Plugin/Source/r19.1/include/p4/p4tags.h b/P4Plugin/Source/p4api/include/p4/p4tags.h similarity index 90% rename from P4Plugin/Source/r19.1/include/p4/p4tags.h rename to P4Plugin/Source/p4api/include/p4/p4tags.h index d3e8725..5b860bb 100644 --- a/P4Plugin/Source/r19.1/include/p4/p4tags.h +++ b/P4Plugin/Source/p4api/include/p4/p4tags.h @@ -101,11 +101,14 @@ struct P4Tag { static const char v_autoLogin[]; static const char v_autoTune[]; static const char v_baseName[]; + static const char v_behindBytes[]; + static const char v_behindJnls[]; static const char v_bits[]; static const char v_blob[]; static const char v_blockCount[]; static const char v_branch[]; static const char v_broker[]; + static const char v_bytesBehind[]; static const char v_archiveFile[]; static const char v_caddr[]; static const char v_caseHandling[]; @@ -139,8 +142,15 @@ struct P4Tag { static const char v_committerDate[]; static const char v_compare[]; static const char v_compCksum[]; + static const char v_configurableName[]; + static const char v_configurableValue[]; + static const char v_configurables[]; static const char v_confirm[]; + static const char v_conflict[]; + static const char v_copied[]; + static const char v_cumulative[]; static const char v_counter[]; + static const char v_laddr[]; static const char v_current[]; static const char v_cwd[]; static const char v_daddr[]; @@ -161,9 +171,12 @@ struct P4Tag { static const char v_digestTypeGitBinary[]; static const char v_digestTypeSHA256[]; static const char v_dir[]; + static const char v_disabled[]; static const char v_enableStreams[]; static const char v_enableGraph[]; + static const char v_endFromChange[]; static const char v_endFromRev[]; + static const char v_endToChange[]; static const char v_endToRev[]; static const char v_erev[]; static const char v_expandAndmaps[]; @@ -173,6 +186,7 @@ struct P4Tag { static const char v_extraTagType[]; static const char v_failoverSeen[]; static const char v_fatal[]; + static const char v_field[]; static const char v_fileCount[]; static const char v_fileNum[]; static const char v_fileSize[]; @@ -181,7 +195,12 @@ struct P4Tag { static const char v_fmt[]; static const char v_forceType[]; static const char v_fromFile[]; + static const char v_fromLbrFile[]; + static const char v_fromLbrPath[]; + static const char v_fromLbrRev[]; + static const char v_fromLbrType[]; static const char v_fromRev[]; + static const char v_fromStream[]; static const char v_fseq[]; static const char v_func[]; static const char v_func2[]; @@ -209,6 +228,11 @@ struct P4Tag { static const char v_key[]; static const char v_language[]; static const char v_lbrFile[]; // also remote depot + static const char v_lbrChange[]; + static const char v_lbrPath[]; + static const char v_lbrRelPath[]; + static const char v_lbrRelTo[]; + static const char v_lbrRelToPath[]; static const char v_lbrRev[]; // also remote depot static const char v_lbrType[]; // also remote depot static const char v_lbrRefCount[]; @@ -222,7 +246,9 @@ struct P4Tag { static const char v_line[]; static const char v_locale[]; static const char v_lower[]; + static const char v_lockGlobal[]; static const char v_lockId[]; + static const char v_lockOnCommit[]; static const char v_lockStatus[]; static const char v_mangle[]; static const char v_matchedLine[]; @@ -232,6 +258,7 @@ struct P4Tag { static const char v_maxOpenFiles[]; static const char v_maxResults[]; static const char v_maxScanRows[]; + static const char v_maxValue[]; static const char v_mergeAuto[]; static const char v_mergeConfirm[]; static const char v_mergeDecline[]; @@ -246,6 +273,7 @@ struct P4Tag { static const char v_nocase[]; static const char v_noclobber[]; static const char v_noecho[]; + static const char v_noneFound[]; static const char v_noprompt[]; static const char v_offset[]; static const char v_oid[]; @@ -255,6 +283,8 @@ struct P4Tag { static const char v_otherAction[]; static const char v_otherChange[]; static const char v_otherLock[]; + static const char v_otherLockGlobal[]; + static const char v_otherLockOnCommit[]; static const char v_otherOpen[]; static const char v_ourLock[]; static const char v_packName[]; @@ -270,11 +300,16 @@ struct P4Tag { static const char v_preview[]; static const char v_prog[]; static const char v_progress[]; + static const char v_progressDone[]; + static const char v_progressHandle[]; + static const char v_progressType[]; + static const char v_progressUpdate[]; static const char v_proxy[]; static const char v_proxyAddress[]; static const char v_proxyEncryption[]; static const char v_proxyCertExpires[]; static const char v_proxyRoot[]; + static const char v_proxyCacheRoot[]; static const char v_proxyVersion[]; static const char v_purge[]; static const char v_pusher[]; @@ -297,6 +332,8 @@ struct P4Tag { static const char v_rUserHelp[]; static const char v_rUserPrompt[]; static const char v_rUserResult[]; + static const char v_rMoveReaddIntegConflictIgnored[]; + static const char v_rMoveReaddIntegConflictSkip[]; static const char v_rcvbuf[]; static const char v_reason[]; static const char v_ref[]; @@ -304,6 +341,7 @@ struct P4Tag { static const char v_remoteFunc[]; static const char v_remoteMap[]; static const char v_remoteRange[]; + static const char v_repair[]; static const char v_repo[]; static const char v_repoName[]; static const char v_reresolvable[]; @@ -312,12 +350,17 @@ struct P4Tag { static const char v_resolveType[]; static const char v_rev[]; static const char v_rev2[]; + static const char v_revertmovecheck[]; + static const char v_revertmovedirnotempty[]; + static const char v_revertmovermdir[]; static const char v_rmdir[]; static const char v_rseq[]; static const char v_scanSize[]; static const char v_scope[]; static const char v_secondFactor[]; static const char v_security[]; + static const char v_skipped[]; + static const char v_snapped[]; static const char v_sndbuf[]; static const char v_sendspec[]; static const char v_sequence[]; @@ -344,11 +387,15 @@ struct P4Tag { static const char v_size[]; static const char v_specdef[]; static const char v_specstring[]; + static const char v_speccomment[]; static const char v_specFormatted[]; + static const char v_spectype[]; static const char v_srev[]; static const char v_sso[]; static const char v_ssoAuth[]; + static const char v_startFromChange[]; static const char v_startFromRev[]; + static const char v_startToChange[]; static const char v_startToRev[]; static const char v_stat[]; static const char v_status[]; @@ -363,6 +410,7 @@ struct P4Tag { static const char v_theirTime[]; static const char v_time[]; static const char v_toFile[]; + static const char v_toStream[]; static const char v_token[]; static const char v_token2[]; static const char v_total[]; @@ -381,6 +429,7 @@ struct P4Tag { static const char v_unresolved[]; static const char v_upper[]; static const char v_url[]; + static const char v_upgrade[]; static const char v_user[]; static const char v_userChanged[]; static const char v_userName[]; @@ -395,6 +444,7 @@ struct P4Tag { // server-to-server or server-to-proxy variables // clients should not look at these + static const char v_adjunctMsgs[]; static const char v_allTamperCheck[]; // p4 submit static const char v_altArg[]; // p4 jobspec static const char v_altArg2[]; // p4 change @@ -432,9 +482,11 @@ struct P4Tag { static const char v_integRec2[]; static const char v_ipaddr[]; static const char v_keyVal[]; // p4 index + static const char v_label[]; static const char v_labelEntity[]; static const char v_leaveUnchanged[]; // submit static const char v_lockAll[]; // admin + static const char v_lockRec[]; static const char v_message[]; // p4 diff static const char v_message2[]; // p4 release static const char v_movedFile[]; @@ -444,6 +496,7 @@ struct P4Tag { static const char v_peer[]; static const char v_peerAddress[]; static const char v_propigate[]; // proxy chaining test + static const char v_remoteFetch[]; // no on-demand fetch bg submit static const char v_reopen[]; // submit static const char v_replace[]; // shelve static const char v_revertUnchanged[]; // submit @@ -457,6 +510,7 @@ struct P4Tag { static const char v_setViews[]; // set client views even if empty static const char v_shelved[]; // shelve (2009.2) static const char v_shelveFile[]; + static const char v_shelvedStream[]; // stream is shelved static const char v_state[]; static const char v_stream[]; // stream name static const char v_stream2[]; // other stream name diff --git a/P4Plugin/Source/r19.1/include/p4/pathsys.h b/P4Plugin/Source/p4api/include/p4/pathsys.h similarity index 98% rename from P4Plugin/Source/r19.1/include/p4/pathsys.h rename to P4Plugin/Source/p4api/include/p4/pathsys.h index 8871a1e..da5cce9 100644 --- a/P4Plugin/Source/r19.1/include/p4/pathsys.h +++ b/P4Plugin/Source/p4api/include/p4/pathsys.h @@ -36,7 +36,7 @@ * GetOS() - returns a string for the OS name */ -# ifdef HAS_CPP17 +# ifdef HAS_CPP11 # include @@ -79,7 +79,7 @@ class PathSys : public StrBuf { static PathSys *Create(); static PathSys *Create( const StrPtr &os, Error *e ); -# ifdef HAS_CPP17 +# ifdef HAS_CPP11 static PathSysUPtr CreateUPtr(); static PathSysUPtr CreateUPtr( const StrPtr &os, Error *e ); # endif diff --git a/P4Plugin/Source/r19.1/include/p4/runcmd.h b/P4Plugin/Source/p4api/include/p4/runcmd.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/runcmd.h rename to P4Plugin/Source/p4api/include/p4/runcmd.h diff --git a/P4Plugin/Source/p4api/include/p4/sanitizers.h b/P4Plugin/Source/p4api/include/p4/sanitizers.h new file mode 100644 index 0000000..5e3a378 --- /dev/null +++ b/P4Plugin/Source/p4api/include/p4/sanitizers.h @@ -0,0 +1,31 @@ +/* + * Copyright 1995, 2019 Perforce Software. All rights reserved. + * + * This file is part of Perforce - the FAST SCM System. + */ + +# ifndef P4SANITIZERS_H +# define P4SANITIZERS_H + +// NO-OP definitions +# define NO_SANITIZE_ADDRESS_UNDEFINED +# define NO_SANITIZE_ADDRESS +# define NO_SANITIZE_UNDEFINED + +# ifdef __has_feature +// There's no feature test for UBSAN, so assume that if we've got one, +// we've got the other. +# if __has_feature(address_sanitizer) +# undef NO_SANITIZE_ADDRESS_UNDEFINED +# undef NO_SANITIZE_ADDRESS +# undef NO_SANITIZE_UNDEFINED +// Note that it's possible to specify specific parts of the sanitizers to disable, +// so if a function is only offending a particular check, we can disable them +// more selectively if necessary. +# define NO_SANITIZE_ADDRESS_UNDEFINED __attribute__((no_sanitize("address","undefined"))) +# define NO_SANITIZE_ADDRESS __attribute__((no_sanitize("address"))) +# define NO_SANITIZE_UNDEFINED __attribute__((no_sanitize("undefined"))) +# endif +# endif + +# endif // P4SANITIZERS_H diff --git a/P4Plugin/Source/r19.1/include/p4/serverhelperapi.h b/P4Plugin/Source/p4api/include/p4/serverhelperapi.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/serverhelperapi.h rename to P4Plugin/Source/p4api/include/p4/serverhelperapi.h diff --git a/P4Plugin/Source/r19.1/include/p4/sha1.h b/P4Plugin/Source/p4api/include/p4/sha1.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/sha1.h rename to P4Plugin/Source/p4api/include/p4/sha1.h diff --git a/P4Plugin/Source/r19.1/include/p4/sha256.h b/P4Plugin/Source/p4api/include/p4/sha256.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/sha256.h rename to P4Plugin/Source/p4api/include/p4/sha256.h diff --git a/P4Plugin/Source/r19.1/include/p4/signaler.h b/P4Plugin/Source/p4api/include/p4/signaler.h similarity index 95% rename from P4Plugin/Source/r19.1/include/p4/signaler.h rename to P4Plugin/Source/p4api/include/p4/signaler.h index 7cfc77d..b0b03e2 100644 --- a/P4Plugin/Source/r19.1/include/p4/signaler.h +++ b/P4Plugin/Source/p4api/include/p4/signaler.h @@ -21,14 +21,14 @@ * Requires cooperation from the TempFile objects to delete files. */ +# ifdef OS_NT +typedef void *HANDLE; +# else // OS_NT # ifdef HAS_CPP11 # include # include -# else -# if OS_NT -typedef void *HANDLE; -# endif // OS_NT # endif // HAS_CPP11 +# endif // OS_NT struct SignalMan; @@ -39,6 +39,7 @@ class Signaler { public: Signaler(); ~Signaler(); + void Init(); void Block(); void Catch(); @@ -62,15 +63,15 @@ class Signaler { // the built-in thread support on all platforms. If not, we fall // back to only having synchronization on Windows. +# ifdef OS_NT + HANDLE hmutex; +# else // OS_NT # ifdef HAS_CPP11 std::mutex* mutex; std::mutex& GetMutex(); -# else -# if OS_NT - HANDLE hmutex; -# endif // OS_NT # endif // HAS_CPP11 +# endif // OS_NT } ; diff --git a/P4Plugin/Source/r19.1/include/p4/spec.h b/P4Plugin/Source/p4api/include/p4/spec.h similarity index 97% rename from P4Plugin/Source/r19.1/include/p4/spec.h rename to P4Plugin/Source/p4api/include/p4/spec.h index 8c035bf..444913c 100644 --- a/P4Plugin/Source/r19.1/include/p4/spec.h +++ b/P4Plugin/Source/p4api/include/p4/spec.h @@ -184,18 +184,22 @@ class Spec { // Manipulating the Spec itself -- building and examining it SpecElem * Add( const StrPtr &tag ); + SpecElem * Add( const SpecElem *se, int atIndex, Error *e ); SpecElem * Get( int i ); SpecElem * Find( const StrPtr &tag, Error *e = 0 ); - SpecElem * Find( int code, Error *e = 0 ); + SpecElem * Find( int code, Error *e=0, const StrPtr *fixedTag=0 ); int Count(); void Decode( StrPtr *encoded, Error *e ); void Encode( StrBuf *encoded ); + void ExtractFieldMapToDict( StrDict *map, Error *e, int skipAuto=0); + void EncodeFieldMapToString( StrBuf *s, Error *e ); const StrPtr * GetComment() { return &comment; } void SetComment( const StrPtr &c ) { comment = c; } SpecElem * Add( char *t ) { return Add( StrRef( t ) ); } + void Dump( const char *msg ); private: @@ -281,6 +285,7 @@ class SpecElem { SpecType type; // how it is formatted StrBuf tag; // name of the field + StrBuf fixed; // fixed name for a default field StrBuf presets; // (pre)set codes StrBuf values; // what values can be had int code; // what it's use it diff --git a/P4Plugin/Source/r19.1/include/p4/stdhdrs.h b/P4Plugin/Source/p4api/include/p4/stdhdrs.h similarity index 91% rename from P4Plugin/Source/r19.1/include/p4/stdhdrs.h rename to P4Plugin/Source/p4api/include/p4/stdhdrs.h index 2295402..53d50d8 100644 --- a/P4Plugin/Source/r19.1/include/p4/stdhdrs.h +++ b/P4Plugin/Source/p4api/include/p4/stdhdrs.h @@ -57,6 +57,7 @@ * NEED_GETUID - getuid(),setuid() etc. * NEED_IOCTL - ioctl() call and flags for UNIX * NEED_MKDIR - mkdir() + * NEED_MIMALLOC - mimalloc initialization * NEED_MMAP - mmap() * NEED_OPENDIR - opendir(), etc * NEED_POPEN - popen(), pclose() @@ -119,7 +120,7 @@ # endif # if defined( NEED_GETUID ) -# if defined ( OS_MACOSX ) || defined ( OS_DARWIN ) || defined ( unix ) +# if defined ( OS_MACOSX ) || defined ( OS_DARWIN ) || defined ( __unix__ ) # define HAVE_GETUID # endif # endif @@ -157,15 +158,15 @@ extern int errno; // so that _WIN32_WINNT will flavor definitions. # ifdef OS_NT # define WIN32_LEAN_AND_MEAN -// current default is WinXP; IPv6 code must set these macros to WinVista +// current default is Win7; IPv6 code needs these macros >= WinVista // before including this file (see net/netportipv6.h for details) # if !defined(NTDDI_VERSION) || (NTDDI_VERSION < 0x0501000) # undef NTDDI_VERSION -# define NTDDI_VERSION 0x0501000 +# define NTDDI_VERSION 0x06010000 # endif // NTDDI_VERSION -# if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0501) +# if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0601) # undef _WIN32_WINNT -# define _WIN32_WINNT 0x0501 +# define _WIN32_WINNT 0x0601 # endif // _WIN32_WINNT # if !defined(WINVER) || (WINVER < _WIN32_WINNT) # undef WINVER @@ -186,7 +187,7 @@ extern int errno; # ifdef OS_NT # define HAVE_SRWLOCK # ifdef NEED_SRWLOCK -# if (_MSC_VER >= 1800) +# if (_MSC_VER >= 1800) && (!defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0600)) # undef _WIN32_WINNT # define _WIN32_WINNT 0x0600 # endif // _MSC_VER @@ -207,18 +208,33 @@ extern int errno; # endif // NEED_DBGBREAK # endif // OS_NT -// Smart Heap instrumentation. +# include "malloc_override.h" + # ifdef MEM_DEBUG -# define NEED_SMARTHEAP +# ifdef USE_MIMALLOC +# define NEED_MIMALLOC +# endif +# ifdef USE_SMARTHEAP +# define NEED_SMARTHEAP +# endif # endif + +// Mimalloc instrumentation. +# ifdef NEED_MIMALLOC +# if defined( USE_MIMALLOC ) +# define HAVE_MIMALLOC +# endif // USE_MIMALLOC +# endif // NEED_MIMALLOC + +// Smart Heap instrumentation. # ifdef NEED_SMARTHEAP -# if defined( USE_SMARTHEAP ) -# ifdef OS_NT -# include -# endif // OS_NT -# include -# define HAVE_SMARTHEAP -# endif // USE_SMARTHEAP +# if defined( USE_SMARTHEAP ) +# ifdef OS_NT +# include +# endif // OS_NT +# include +# define HAVE_SMARTHEAP +# endif // USE_SMARTHEAP # endif // NEED_SMARTHEAP # ifdef NEED_FLOCK @@ -488,7 +504,7 @@ extern "C" int socketpair(int, int, int, int*); # endif # ifdef NEED_SYSLOG -# if defined( unix ) +# if defined( __unix__ ) # define HAVE_SYSLOG # include # elif defined( OS_NT ) @@ -753,6 +769,11 @@ typedef unsigned int p4size_t; # define vsnprintf _vsnprintf # endif +# if defined(_MSC_VER) && _MSC_VER < 1900 || \ + !defined(_MSC_VER) && defined(_MSC_FULL_VER) +# define strtoll _strtoi64 +# endif + // C++11 or higher # if __cplusplus >= 201103L # ifndef HAS_CPP11 @@ -760,19 +781,38 @@ typedef unsigned int p4size_t; # endif # endif +// C++14 or higher +# if __cplusplus >= 201402L +# define HAS_CPP14 +# endif + // C++17 or higher # if __cplusplus >= 201703L # define HAS_CPP17 # endif +# if defined(_MSC_VER) && _MSC_VER < 1900 +# define HAS_BROKEN_CPP11 +# endif + # ifdef HAS_CPP11 # define HAS_PARALLEL_SYNC_THREADS # endif -# if defined(HAS_CPP17) && defined(USE_EXTENSIONS) && USE_EXTENSIONS == 1 +# if defined(HAS_CPP14) && defined(USE_EXTENSIONS) && USE_EXTENSIONS == 1 # define HAS_EXTENSIONS # endif +# include "sanitizers.h" + +# ifdef __GNUC__ +# define GCC_VERSION (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) +// E.g. GCC > 3.2.0 +// #if GCC_VERSION > 30200 +# endif + # ifdef OS_NT # if defined( NEED_WIN32FIO ) @@ -790,6 +830,9 @@ typedef unsigned int p4size_t; # endif // OS_NTX86 # ifndef OS_MINGW +# ifndef NOMINMAX +# define NOMINMAX +# endif // !NOMINMAX # include # include # else @@ -839,4 +882,9 @@ typedef int FD_PTR; # endif // !OS_NT +# if !defined( HAS_CPP11 ) && !defined( LLONG_MIN ) +# define LLONG_MIN (-9223372036854775807LL - 1) +# define LLONG_MAX 9223372036854775807LL +# endif + # endif // P4STDHDRS_H diff --git a/P4Plugin/Source/r19.1/include/p4/strarray.h b/P4Plugin/Source/p4api/include/p4/strarray.h similarity index 96% rename from P4Plugin/Source/r19.1/include/p4/strarray.h rename to P4Plugin/Source/p4api/include/p4/strarray.h index 88e7971..35aaecc 100644 --- a/P4Plugin/Source/r19.1/include/p4/strarray.h +++ b/P4Plugin/Source/p4api/include/p4/strarray.h @@ -33,6 +33,7 @@ class StrArray { void Remove( int i ); int Search( const StrBuf *key ); const StrBuf * Find( const StrBuf *key ); + void Copy( const StrArray *other ); private: diff --git a/P4Plugin/Source/r19.1/include/p4/strbuf.h b/P4Plugin/Source/p4api/include/p4/strbuf.h similarity index 98% rename from P4Plugin/Source/r19.1/include/p4/strbuf.h rename to P4Plugin/Source/p4api/include/p4/strbuf.h index 259df08..177c8b0 100644 --- a/P4Plugin/Source/r19.1/include/p4/strbuf.h +++ b/P4Plugin/Source/p4api/include/p4/strbuf.h @@ -43,6 +43,7 @@ * StrPtr::GetEnd() - return pointer to character past end * StrPtr::Atoi() - convert to integer and return * StrPtr::Atoi64() - convert to P4INT64 and return + * StrPtr::Atoi64( char*, P4INT64* ) - Atoi64() with error checking * StrPtr::Itoa() - format an int given the end of a buffer * StrPtr::Itoa64() - format a P4INT64 given the end of a buffer * StrPtr::SetLength() - set only length @@ -132,6 +133,11 @@ class StrPtr { P4INT64 Atoi64() const { return Atoi64( buffer ); } + static bool Atoi64( const char *p, P4INT64 *result ); + + bool Atoi64( P4INT64 *result ) const + { return Atoi64( buffer, result ); } + void SetLength() { length = (p4size_t)strlen( buffer ); } diff --git a/P4Plugin/Source/r19.1/include/p4/strdict.h b/P4Plugin/Source/p4api/include/p4/strdict.h similarity index 92% rename from P4Plugin/Source/r19.1/include/p4/strdict.h rename to P4Plugin/Source/p4api/include/p4/strdict.h index f9be767..fbf7ef7 100644 --- a/P4Plugin/Source/r19.1/include/p4/strdict.h +++ b/P4Plugin/Source/p4api/include/p4/strdict.h @@ -82,8 +82,10 @@ class StrDict { void RemoveVar( const char *var ); void RemoveVar( const StrPtr &var ) { VRemoveVar( var ); } - void Clear() - { VClear(); } + void Clear() // useful for clearing underlying storage, + { VClear(); } // e.g. StrBuf::Clear() + void Reset() // useful for freeing underlying storage, + { VReset(); } // e.g. StrBuf::Reset() int Save( FILE * out ); int Load( FILE * out ); @@ -98,5 +100,6 @@ class StrDict { virtual int VGetVarX( int x, StrRef &var, StrRef &val ); virtual void VSetError( const StrPtr &var, Error *e ); virtual void VClear(); + virtual void VReset(); } ; diff --git a/P4Plugin/Source/r19.1/include/p4/strops.h b/P4Plugin/Source/p4api/include/p4/strops.h similarity index 96% rename from P4Plugin/Source/r19.1/include/p4/strops.h rename to P4Plugin/Source/p4api/include/p4/strops.h index 8e98874..da51ead 100644 --- a/P4Plugin/Source/r19.1/include/p4/strops.h +++ b/P4Plugin/Source/p4api/include/p4/strops.h @@ -16,6 +16,7 @@ * StrOps::Sub() - replace one character with another * StrOps::Expand() - expand a string doing %var% substitutions * StrOps::Expand2() - expand a string doing [%var%|opt] substitutions + * StrOps::AddIndex() - add index to %var% parameters (%var% to %vari%) * StrOps::Indent() - fill by indenting contents of another buffer * StrOps::Replace() - replace all occurences of a string * StrOps::Lines() - break buffer into \r\n or \n separated lines @@ -31,6 +32,7 @@ * StrOps::ScrunchArgs() - try to display argv in a limited output buffer. * StrOps::CommonPath() - construct common filepath across multiple calls. * StrOps::StripNewline() - strip \r\n from end of buffer + * StrOps::CheckStr() - check string conforms to a specified ruleset. * * StrOps::CharCnt() - Count characters in text using the server's charset * StrOps::CharCopy() - copy counting characters (not bytes) @@ -70,6 +72,7 @@ class StrOps { static void Expand( StrBuf &o, const StrPtr &s, StrDict &d, StrDict *u = 0 ); static void Expand2( StrBuf &o, const StrPtr &s, StrDict &d ); + static void AddIndex( StrBuf &o, const StrPtr &s, const int i ); static void RmUniquote( StrBuf &o, const StrPtr &s ); static void Indent( StrBuf &o, const StrPtr &s ); static void Replace( StrBuf &o, const StrPtr &i, @@ -130,6 +133,7 @@ class StrOps { static void LFtoCRLF( const StrBuf *in, StrBuf *out ); static int StreamNameInPath( const char *df, int depth, StrBuf &n ); + static void CheckStr( const StrPtr *in, int flags, Error *e ); // i18n diff --git a/P4Plugin/Source/r19.1/include/p4/strtable.h b/P4Plugin/Source/p4api/include/p4/strtable.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/strtable.h rename to P4Plugin/Source/p4api/include/p4/strtable.h diff --git a/P4Plugin/Source/r19.1/include/p4/strxml.h b/P4Plugin/Source/p4api/include/p4/strxml.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/strxml.h rename to P4Plugin/Source/p4api/include/p4/strxml.h diff --git a/P4Plugin/Source/r19.1/include/p4/threading.h b/P4Plugin/Source/p4api/include/p4/threading.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/threading.h rename to P4Plugin/Source/p4api/include/p4/threading.h diff --git a/P4Plugin/Source/r19.1/include/p4/ticket.h b/P4Plugin/Source/p4api/include/p4/ticket.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/ticket.h rename to P4Plugin/Source/p4api/include/p4/ticket.h diff --git a/P4Plugin/Source/r19.1/include/p4/validate.h b/P4Plugin/Source/p4api/include/p4/validate.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/validate.h rename to P4Plugin/Source/p4api/include/p4/validate.h diff --git a/P4Plugin/Source/r19.1/include/p4/vararray.h b/P4Plugin/Source/p4api/include/p4/vararray.h similarity index 97% rename from P4Plugin/Source/r19.1/include/p4/vararray.h rename to P4Plugin/Source/p4api/include/p4/vararray.h index 729d39c..8e9318e 100644 --- a/P4Plugin/Source/r19.1/include/p4/vararray.h +++ b/P4Plugin/Source/p4api/include/p4/vararray.h @@ -45,6 +45,7 @@ class VarArray { VarArray( int max ); ~VarArray(); + bool Reserve(); void Clear() { numElems = 0; } int Count() const { return numElems; } void ** ElemTab() { return elems; } @@ -73,7 +74,7 @@ class VarArray { private: friend class VVarArray; - void ** New(); + void ** New( const bool justAlloc = false ); int maxElems; int numElems; diff --git a/P4Plugin/Source/r19.1/include/p4/web822.h b/P4Plugin/Source/p4api/include/p4/web822.h similarity index 100% rename from P4Plugin/Source/r19.1/include/p4/web822.h rename to P4Plugin/Source/p4api/include/p4/web822.h diff --git a/P4Plugin/Source/p4api/lib/linux64/libclient.a b/P4Plugin/Source/p4api/lib/linux64/libclient.a new file mode 100644 index 0000000..1a545e4 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/libclient.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2de482e97fda66ebcbe5b97da0988b6b1d6a81a3a3da938d1c20a7afad419817 +size 3543570 diff --git a/P4Plugin/Source/p4api/lib/linux64/libp4api.a b/P4Plugin/Source/p4api/lib/linux64/libp4api.a new file mode 100644 index 0000000..b4e1341 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/libp4api.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f5f4676df934b41a1f17ccc42908bc72ee79290c15a61142f80b3ee2bc93fdf +size 14969848 diff --git a/P4Plugin/Source/p4api/lib/linux64/libp4script.a b/P4Plugin/Source/p4api/lib/linux64/libp4script.a new file mode 100644 index 0000000..02e29b7 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/libp4script.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f17f737ae2c186914a483ca7e4d5677b208625a00086fe7efd8d66b4947c6f38 +size 263788 diff --git a/P4Plugin/Source/p4api/lib/linux64/libp4script_c.a b/P4Plugin/Source/p4api/lib/linux64/libp4script_c.a new file mode 100644 index 0000000..4004b55 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/libp4script_c.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ac3b093a98009c666ecd0299716233257a1d3a639c188d61f06eb9f97999519 +size 30436 diff --git a/P4Plugin/Source/p4api/lib/linux64/libp4script_curl.a b/P4Plugin/Source/p4api/lib/linux64/libp4script_curl.a new file mode 100644 index 0000000..009cfd2 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/libp4script_curl.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4133234e2ca3eb8d25f2ae9e9365bc280c097f549c661e2c5d7068a0aa72f524 +size 1370 diff --git a/P4Plugin/Source/p4api/lib/linux64/libp4script_sqlite.a b/P4Plugin/Source/p4api/lib/linux64/libp4script_sqlite.a new file mode 100644 index 0000000..35ffe9a --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/libp4script_sqlite.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6bb798288dbf880cca8f7cae38c3c1174e8102cbb58de1fdd7583eeb83a5eeb +size 1372 diff --git a/P4Plugin/Source/p4api/lib/linux64/librpc.a b/P4Plugin/Source/p4api/lib/linux64/librpc.a new file mode 100644 index 0000000..136cc90 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/librpc.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fbd28cf1e53d5c0acc5adbf91071f19095ab8fd0e6cd4022253a45c54b81104 +size 2529426 diff --git a/P4Plugin/Source/p4api/lib/linux64/libsupp.a b/P4Plugin/Source/p4api/lib/linux64/libsupp.a new file mode 100644 index 0000000..6328899 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/linux64/libsupp.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04899cfe35c81923064a9cb7fd40a7779cae996f1d0e137686a2796f8964d831 +size 8600562 diff --git a/P4Plugin/Source/p4api/lib/osx64/libclient.a b/P4Plugin/Source/p4api/lib/osx64/libclient.a new file mode 100644 index 0000000..5bb12ba --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/libclient.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28f6b58ce1ec66086ab1dad248a55194eb3155d792f4a5f15ebb99bbe38eda1a +size 3292400 diff --git a/P4Plugin/Source/p4api/lib/osx64/libp4api.a b/P4Plugin/Source/p4api/lib/osx64/libp4api.a new file mode 100644 index 0000000..96cc735 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/libp4api.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b2aa94d1a0681ffdc17c3687ea91aa286d0de9f63e7f5a59595dd9bed5f6b3a +size 13269080 diff --git a/P4Plugin/Source/p4api/lib/osx64/libp4script.a b/P4Plugin/Source/p4api/lib/osx64/libp4script.a new file mode 100644 index 0000000..25d7225 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/libp4script.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:577e0e3b2c29fcedf096e583d11f613665deeae265079cf29a689378fe3dd498 +size 149640 diff --git a/P4Plugin/Source/p4api/lib/osx64/libp4script_c.a b/P4Plugin/Source/p4api/lib/osx64/libp4script_c.a new file mode 100644 index 0000000..d6a1520 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/libp4script_c.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fde0ccc46fb84498a3959d7d7cfea7f6c9b38dd90e73804c735eb528129b215 +size 15048 diff --git a/P4Plugin/Source/p4api/lib/osx64/libp4script_curl.a b/P4Plugin/Source/p4api/lib/osx64/libp4script_curl.a new file mode 100644 index 0000000..2487f8c --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/libp4script_curl.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7e0e6f906f9d788910bfb9602b740dd28155b3e5e4df95d5e0b6c156506bde3 +size 1712 diff --git a/P4Plugin/Source/p4api/lib/osx64/libp4script_sqlite.a b/P4Plugin/Source/p4api/lib/osx64/libp4script_sqlite.a new file mode 100644 index 0000000..d5d9b17 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/libp4script_sqlite.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c52a7e2770042b8dcd1aac2575e8b05f0c8d3964eff5d0e3ffcc7e33340774f1 +size 1720 diff --git a/P4Plugin/Source/p4api/lib/osx64/librpc.a b/P4Plugin/Source/p4api/lib/osx64/librpc.a new file mode 100644 index 0000000..259e34f --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/librpc.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15f113fce46f55c82d3ab46a8d4f5237f1423d3b50ec48078785be862383c902 +size 2020624 diff --git a/P4Plugin/Source/p4api/lib/osx64/libsupp.a b/P4Plugin/Source/p4api/lib/osx64/libsupp.a new file mode 100644 index 0000000..23d50ed --- /dev/null +++ b/P4Plugin/Source/p4api/lib/osx64/libsupp.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:726fba8a8d6ca510a2059a29dc2b57d291ba06df8df3a35bdc23399a18e88fe3 +size 7788520 diff --git a/P4Plugin/Source/p4api/lib/win32/libclient.lib b/P4Plugin/Source/p4api/lib/win32/libclient.lib new file mode 100644 index 0000000..391fe54 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/libclient.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84defef0b56cbd3e3b14dafc6e3b72fb189b016665da2fe424d376aa9ddf8996 +size 3684624 diff --git a/P4Plugin/Source/p4api/lib/win32/libp4api.lib b/P4Plugin/Source/p4api/lib/win32/libp4api.lib new file mode 100644 index 0000000..c6548e4 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/libp4api.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aa63ac06ca393a82e17672242fe0a211d74bdb44e45990abd4a8da1a4c5db93 +size 18525078 diff --git a/P4Plugin/Source/p4api/lib/win32/libp4script.lib b/P4Plugin/Source/p4api/lib/win32/libp4script.lib new file mode 100644 index 0000000..d507a81 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/libp4script.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0022d7d492f252fd8301ac7d15d8e3fc8e264a016b6625c82a43e994e510e46c +size 439530 diff --git a/P4Plugin/Source/p4api/lib/win32/libp4script_c.lib b/P4Plugin/Source/p4api/lib/win32/libp4script_c.lib new file mode 100644 index 0000000..211c79e --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/libp4script_c.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41cebc15db7c1124cb2cf860b38861b15d41cc8ca500caaeaeb76690fde5b886 +size 55516 diff --git a/P4Plugin/Source/p4api/lib/win32/libp4script_curl.lib b/P4Plugin/Source/p4api/lib/win32/libp4script_curl.lib new file mode 100644 index 0000000..72978b3 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/libp4script_curl.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfc537c8c420ba30ad6345f66da5869f26d332569a60352071b10efed6f4c88f +size 1882 diff --git a/P4Plugin/Source/p4api/lib/win32/libp4script_sqlite.lib b/P4Plugin/Source/p4api/lib/win32/libp4script_sqlite.lib new file mode 100644 index 0000000..cefebc3 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/libp4script_sqlite.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:263c8f8b88d881df40cc30924f14c1ea653d3f2203c0a19dadbe9b22e15ed503 +size 1892 diff --git a/P4Plugin/Source/p4api/lib/win32/librpc.lib b/P4Plugin/Source/p4api/lib/win32/librpc.lib new file mode 100644 index 0000000..09f4202 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/librpc.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f5322a7df54cf2f85826ef0edd7b91a0754f4f4a1dea71358ae89dac8d90a4b +size 2803896 diff --git a/P4Plugin/Source/p4api/lib/win32/libsupp.lib b/P4Plugin/Source/p4api/lib/win32/libsupp.lib new file mode 100644 index 0000000..781973a --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32/libsupp.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:397b660d65ac4640c165fe492c599e75b7a4b358557a1bc02dc0dc7064b6f778 +size 11576292 diff --git a/P4Plugin/Source/p4api/lib/win32debug/libclient.lib b/P4Plugin/Source/p4api/lib/win32debug/libclient.lib new file mode 100644 index 0000000..ff6bb1a --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/libclient.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ada8fcaf2b2fbf8a7fa73a281049285b7a9f4266f0de7cd3e3459d3721dbe8ba +size 3685274 diff --git a/P4Plugin/Source/p4api/lib/win32debug/libp4api.lib b/P4Plugin/Source/p4api/lib/win32debug/libp4api.lib new file mode 100644 index 0000000..a5ff063 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/libp4api.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53029e50d3e177cfbaa4663e063254261159f073dc47a8fb94d2f2932df52dbb +size 18539224 diff --git a/P4Plugin/Source/p4api/lib/win32debug/libp4script.lib b/P4Plugin/Source/p4api/lib/win32debug/libp4script.lib new file mode 100644 index 0000000..2c1752a --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/libp4script.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4557959b67ecbf187bbd1ec0709f30514d4be189a89da01fd9e819557222779c +size 447214 diff --git a/P4Plugin/Source/p4api/lib/win32debug/libp4script_c.lib b/P4Plugin/Source/p4api/lib/win32debug/libp4script_c.lib new file mode 100644 index 0000000..d87bde1 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/libp4script_c.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27df49d7ea605d31c1a810407225abc2e98b33aa308eb8daf99ca6c41d141b70 +size 55604 diff --git a/P4Plugin/Source/p4api/lib/win32debug/libp4script_curl.lib b/P4Plugin/Source/p4api/lib/win32debug/libp4script_curl.lib new file mode 100644 index 0000000..be3a5d2 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/libp4script_curl.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c693841c193dbdfe6bccd186788865f6aacdf518d69a8cc71da558c804787b98 +size 1902 diff --git a/P4Plugin/Source/p4api/lib/win32debug/libp4script_sqlite.lib b/P4Plugin/Source/p4api/lib/win32debug/libp4script_sqlite.lib new file mode 100644 index 0000000..cdbea09 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/libp4script_sqlite.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d43f2d8ec8622db8eaac55bdae93602dd0aadcec0240abae60087bb1cdd1aefb +size 1912 diff --git a/P4Plugin/Source/p4api/lib/win32debug/librpc.lib b/P4Plugin/Source/p4api/lib/win32debug/librpc.lib new file mode 100644 index 0000000..72ffc52 --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/librpc.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e81e3595afa9057f883db181aad702c7484e7ca728d997fff238f0e88aa7399b +size 2805976 diff --git a/P4Plugin/Source/p4api/lib/win32debug/libsupp.lib b/P4Plugin/Source/p4api/lib/win32debug/libsupp.lib new file mode 100644 index 0000000..0123feb --- /dev/null +++ b/P4Plugin/Source/p4api/lib/win32debug/libsupp.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18f19788bf642e3192afe52968cd3a6c0bacd32f35fda6e756cbe12e95221c1d +size 11579896 diff --git a/P4Plugin/Source/r19.1/lib/linux32/libclient.a b/P4Plugin/Source/r19.1/lib/linux32/libclient.a deleted file mode 100644 index e2bca20..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/libclient.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux32/libp4script.a b/P4Plugin/Source/r19.1/lib/linux32/libp4script.a deleted file mode 100644 index 925bd6f..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/libp4script.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux32/libp4script_c.a b/P4Plugin/Source/r19.1/lib/linux32/libp4script_c.a deleted file mode 100644 index f18beca..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/libp4script_c.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux32/libp4script_curl.a b/P4Plugin/Source/r19.1/lib/linux32/libp4script_curl.a deleted file mode 100644 index a625617..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/libp4script_curl.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux32/libp4script_sqlite.a b/P4Plugin/Source/r19.1/lib/linux32/libp4script_sqlite.a deleted file mode 100644 index 4d29584..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/libp4script_sqlite.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux32/libp4sslstub.a b/P4Plugin/Source/r19.1/lib/linux32/libp4sslstub.a deleted file mode 100644 index fdc54c5..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/libp4sslstub.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux32/librpc.a b/P4Plugin/Source/r19.1/lib/linux32/librpc.a deleted file mode 100644 index 789ff76..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/librpc.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux32/libsupp.a b/P4Plugin/Source/r19.1/lib/linux32/libsupp.a deleted file mode 100644 index 7870dc0..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux32/libsupp.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libclient.a b/P4Plugin/Source/r19.1/lib/linux64/libclient.a deleted file mode 100644 index b58cc1a..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libclient.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libcrypto.a b/P4Plugin/Source/r19.1/lib/linux64/libcrypto.a deleted file mode 100644 index 939a12d..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libcrypto.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libp4script.a b/P4Plugin/Source/r19.1/lib/linux64/libp4script.a deleted file mode 100644 index 57e50ff..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libp4script.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libp4script_c.a b/P4Plugin/Source/r19.1/lib/linux64/libp4script_c.a deleted file mode 100644 index e4774be..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libp4script_c.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libp4script_curl.a b/P4Plugin/Source/r19.1/lib/linux64/libp4script_curl.a deleted file mode 100644 index d2bf84c..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libp4script_curl.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libp4script_sqlite.a b/P4Plugin/Source/r19.1/lib/linux64/libp4script_sqlite.a deleted file mode 100644 index 9fcca47..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libp4script_sqlite.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/librpc.a b/P4Plugin/Source/r19.1/lib/linux64/librpc.a deleted file mode 100644 index 6eb59ae..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/librpc.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libssl.a b/P4Plugin/Source/r19.1/lib/linux64/libssl.a deleted file mode 100644 index 790a9f6..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libssl.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/linux64/libsupp.a b/P4Plugin/Source/r19.1/lib/linux64/libsupp.a deleted file mode 100644 index 53041d8..0000000 Binary files a/P4Plugin/Source/r19.1/lib/linux64/libsupp.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/libclient.a b/P4Plugin/Source/r19.1/lib/osx32/libclient.a deleted file mode 100644 index 9d80dc7..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/libclient.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/libp4script.a b/P4Plugin/Source/r19.1/lib/osx32/libp4script.a deleted file mode 100644 index c6e8bc3..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/libp4script.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/libp4script_c.a b/P4Plugin/Source/r19.1/lib/osx32/libp4script_c.a deleted file mode 100644 index 8472c8f..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/libp4script_c.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/libp4script_curl.a b/P4Plugin/Source/r19.1/lib/osx32/libp4script_curl.a deleted file mode 100644 index 4a44ad6..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/libp4script_curl.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/libp4script_sqlite.a b/P4Plugin/Source/r19.1/lib/osx32/libp4script_sqlite.a deleted file mode 100644 index b025a5c..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/libp4script_sqlite.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/libp4sslstub.a b/P4Plugin/Source/r19.1/lib/osx32/libp4sslstub.a deleted file mode 100644 index b82ab6e..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/libp4sslstub.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/librpc.a b/P4Plugin/Source/r19.1/lib/osx32/librpc.a deleted file mode 100644 index adc8707..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/librpc.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx32/libsupp.a b/P4Plugin/Source/r19.1/lib/osx32/libsupp.a deleted file mode 100644 index 46f9434..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx32/libsupp.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libclient.a b/P4Plugin/Source/r19.1/lib/osx64/libclient.a deleted file mode 100644 index 4be47c1..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libclient.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libcrypto.a b/P4Plugin/Source/r19.1/lib/osx64/libcrypto.a deleted file mode 100644 index 4fa92af..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libcrypto.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libp4script.a b/P4Plugin/Source/r19.1/lib/osx64/libp4script.a deleted file mode 100644 index d896389..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libp4script.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libp4script_c.a b/P4Plugin/Source/r19.1/lib/osx64/libp4script_c.a deleted file mode 100644 index 8914795..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libp4script_c.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libp4script_curl.a b/P4Plugin/Source/r19.1/lib/osx64/libp4script_curl.a deleted file mode 100644 index 0691739..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libp4script_curl.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libp4script_sqlite.a b/P4Plugin/Source/r19.1/lib/osx64/libp4script_sqlite.a deleted file mode 100644 index b2c36c4..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libp4script_sqlite.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/librpc.a b/P4Plugin/Source/r19.1/lib/osx64/librpc.a deleted file mode 100644 index a777784..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/librpc.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libssl.a b/P4Plugin/Source/r19.1/lib/osx64/libssl.a deleted file mode 100644 index 26f5e0c..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libssl.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/osx64/libsupp.a b/P4Plugin/Source/r19.1/lib/osx64/libsupp.a deleted file mode 100644 index 1d4cbbf..0000000 Binary files a/P4Plugin/Source/r19.1/lib/osx64/libsupp.a and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/libclient.lib b/P4Plugin/Source/r19.1/lib/win32/libclient.lib deleted file mode 100644 index 339b99e..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/libclient.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/libeay32.lib b/P4Plugin/Source/r19.1/lib/win32/libeay32.lib deleted file mode 100644 index e431013..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/libeay32.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/libp4script.lib b/P4Plugin/Source/r19.1/lib/win32/libp4script.lib deleted file mode 100644 index c952c8a..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/libp4script.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/libp4script_c.lib b/P4Plugin/Source/r19.1/lib/win32/libp4script_c.lib deleted file mode 100644 index 4ac64d6..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/libp4script_c.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/libp4script_curl.lib b/P4Plugin/Source/r19.1/lib/win32/libp4script_curl.lib deleted file mode 100644 index 2e88702..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/libp4script_curl.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/libp4script_sqlite.lib b/P4Plugin/Source/r19.1/lib/win32/libp4script_sqlite.lib deleted file mode 100644 index 5be5fe6..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/libp4script_sqlite.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/librpc.lib b/P4Plugin/Source/r19.1/lib/win32/librpc.lib deleted file mode 100644 index b3630e3..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/librpc.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/libsupp.lib b/P4Plugin/Source/r19.1/lib/win32/libsupp.lib deleted file mode 100644 index 3cc105b..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/libsupp.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32/ssleay32.lib b/P4Plugin/Source/r19.1/lib/win32/ssleay32.lib deleted file mode 100644 index d78beda..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32/ssleay32.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/libclient.lib b/P4Plugin/Source/r19.1/lib/win32debug/libclient.lib deleted file mode 100644 index 0beed99..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/libclient.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/libeay32.lib b/P4Plugin/Source/r19.1/lib/win32debug/libeay32.lib deleted file mode 100644 index e431013..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/libeay32.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/libp4script.lib b/P4Plugin/Source/r19.1/lib/win32debug/libp4script.lib deleted file mode 100644 index 71b3bf3..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/libp4script.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/libp4script_c.lib b/P4Plugin/Source/r19.1/lib/win32debug/libp4script_c.lib deleted file mode 100644 index e2dd470..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/libp4script_c.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/libp4script_curl.lib b/P4Plugin/Source/r19.1/lib/win32debug/libp4script_curl.lib deleted file mode 100644 index 4dcd2f3..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/libp4script_curl.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/libp4script_sqlite.lib b/P4Plugin/Source/r19.1/lib/win32debug/libp4script_sqlite.lib deleted file mode 100644 index 6eea33b..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/libp4script_sqlite.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/librpc.lib b/P4Plugin/Source/r19.1/lib/win32debug/librpc.lib deleted file mode 100644 index f084306..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/librpc.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/libsupp.lib b/P4Plugin/Source/r19.1/lib/win32debug/libsupp.lib deleted file mode 100644 index 12d3599..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/libsupp.lib and /dev/null differ diff --git a/P4Plugin/Source/r19.1/lib/win32debug/ssleay32.lib b/P4Plugin/Source/r19.1/lib/win32debug/ssleay32.lib deleted file mode 100644 index d78beda..0000000 Binary files a/P4Plugin/Source/r19.1/lib/win32debug/ssleay32.lib and /dev/null differ diff --git a/PerforceBinaries/OSX/p4 b/PerforceBinaries/OSX/p4 new file mode 100644 index 0000000..0101201 --- /dev/null +++ b/PerforceBinaries/OSX/p4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3ce186e969fa6ba3492046939a18f729cfd19f228fe79fd31413575d4ecaa20 +size 10136576 diff --git a/PerforceBinaries/OSX/p4d b/PerforceBinaries/OSX/p4d new file mode 100644 index 0000000..c0ad874 --- /dev/null +++ b/PerforceBinaries/OSX/p4d @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cc31ec639bfe2889e948eefdde6292fa1ad6589297b832187517570e0d90bf3 +size 16625856 diff --git a/PerforceBinaries/Win_x64/p4.exe b/PerforceBinaries/Win_x64/p4.exe new file mode 100644 index 0000000..175eef2 --- /dev/null +++ b/PerforceBinaries/Win_x64/p4.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daf7ecd942a98fca907e7a62d83b04467446a55fc79b18707fd7b4de85d25a07 +size 9064848 diff --git a/PerforceBinaries/Win_x64/p4d.exe b/PerforceBinaries/Win_x64/p4d.exe new file mode 100644 index 0000000..abe423f --- /dev/null +++ b/PerforceBinaries/Win_x64/p4d.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c657ea46b14559a8f80d2b90bc029d5faa7ec52c366629d7bce40ff4d773d591 +size 14452112 diff --git a/PerforceBinaries/linux64/p4 b/PerforceBinaries/linux64/p4 new file mode 100644 index 0000000..382fc0d --- /dev/null +++ b/PerforceBinaries/linux64/p4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7831f142de71f0a4b976e16c25c486db44b35dc99bd2f0dfd391e3e27e8f5565 +size 10172296 diff --git a/PerforceBinaries/linux64/p4d b/PerforceBinaries/linux64/p4d new file mode 100644 index 0000000..e04c6b6 --- /dev/null +++ b/PerforceBinaries/linux64/p4d @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4029b4246a43ea1397282be3a78ee7eb228db27ddbaba7748196964d06dcbb4d +size 17046504 diff --git a/README.md b/README.md index ffd26ad..3c3cb63 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ You need Unity 4.2+ to use the integrated version control plugins. To build: ```bash -perl ./build.pl +perl ./build.pl ``` To test: @@ -45,26 +45,30 @@ To test: perl ./build.pl -test ``` -You need to clone `PerforceBinaries` from mercurial to get the binaries you will run the tests on. You can execute this command from NativeVersionControlPlugins root: -```bash -hg clone --config extensions.largefiles= http://hg-mirror-slo.hq.unity3d.com/unity-extra/perforce PerforceBinaries -``` +### Perforce + +The Perforce plugin source code is located under `P4Plugin/Source`. It references the Perforce APIs, +located under `P4Plugin/Source/p4api`. -Steps for setting up Mercurial can be found here: [Setting Up Mercurial](https://confluence.unity3d.com/display/DEV/Setting+Up+Mercurial) +We are targeting the 21.2 release of Perforce API includes and libraries, that were downloaded from +the [Perforce downloads page](http://filehost.perforce.com/perforce/r21.2/). -###  Perforce +The `PerforceBinaries` where downloaded the same locations to run the integrations tests on. -The Perforce plugin source code is located under `/P4Plugin/Source`. It references the Perforce APIs, located under -`/P4Plugin/Source/r19.1`. As its name states, we're targeting the 19.1 release of Perforce. +```bash +mkdir -p 'PerforceBinaries\Win_x64' +curl -ssL -o 'PerforceBinaries\Win_x64\p4.exe' 'https://filehost.perforce.com/perforce/r21.2/bin.ntx64/p4.exe' +curl -ssL -o 'PerforceBinaries\Win_x64\p4d.exe' 'https://filehost.perforce.com/perforce/r21.2/bin.ntx64/p4d.exe' +``` -Perforce API includes and libraries were downloaded from the -[Perforce downloads page](http://filehost.perforce.com/perforce/r19.1/). +#### Windows -####  Windows +Windows static libraries are located under `P4Plugin/Source/p4api/lib/win32` and `win32debug`. -Windows binaries are located under `/P4Plugin/Source/r17.2/lib/win32` and `/P4Plugin/Source/r17.2/lib/win32debug`. +Both directories contain libraries for Win32 - x86 only, not x64. +They require Visual Studio v10.0 (2010). -Both directories contain libraries for Win32 - x86 only. They require Visual Studio v10.0 (2010). +OpenSSL 1.0.1 static libraries are located under `P4Plugin/Source/openssl/lib/win32`. ## License and terms diff --git a/Test/Perforce/PerforceTest.pm b/Test/Perforce/PerforceTest.pm index 4a94d27..094fae1 100644 --- a/Test/Perforce/PerforceTest.pm +++ b/Test/Perforce/PerforceTest.pm @@ -12,10 +12,11 @@ BEGIN { sub PerforceIntegrationTests { - $dir = $_[0]; - $p4port = $_[1]; - $option = $_[2]; - $filter = $_[3]; + $suite = $_[0]; + $dir = $_[1]; + $p4port = $_[2]; + $option = $_[3]; + $filter = $_[4]; $mfa = index($dir, "MultiFactorAuthentication") > -1; $devnull = "> /dev/null 2>&1"; @@ -25,11 +26,11 @@ sub PerforceIntegrationTests if ($filter ne "" && index($filter, $dir) == -1) { - print "Not Running Perforce Integration Tests in dir:'",$dir,"' p4port:'",$p4port,"' (Not included in filter).\n"; - return 0; + print "\n[$suite] '",$dir,"' Perforce Integration Tests Ignored (p4port:'",$p4port,"') (Not included in filter).\n"; + return 0; } - print "Running Perforce Integration Tests in dir:'",$dir,"' p4port:'",$p4port,"'\n"; + print "\n\n[$suite] '",$dir,"' Perforce Integration Tests Running (p4port:'",$p4port,"')\n"; rmtree("Test/tmp"); mkdir "Test/tmp"; @@ -44,7 +45,7 @@ sub PerforceIntegrationTests $ENV{'P4CHARSET'} = 'utf8'; $ENV{'VCS_P4PASSWD'} = 'Secret'; $ENV{'P4EXECABS'} = getcwd() . "/" . $ENV{'P4EXEC'}; - + if ($ENV{'TARGET'} eq "win32") { $ENV{'VCS_P4ROOT'} =~ s/\//\\/g; @@ -73,7 +74,7 @@ sub PerforceIntegrationTests # print "Press ENTER to continue..."; # ; - $exitCode = RunTests($dir, $option, $filter); + $exitCode = RunTests($suite, $dir, $option, $filter); # print "Press ENTER to continue..."; # ; @@ -85,14 +86,18 @@ sub PerforceIntegrationTests sub RunTests() { - $dir = $_[0]; - $option = $_[1]; - $filter = $_[2]; + $suite = $_[0]; + $dir = $_[1]; + $option = $_[2]; + $filter = $_[3]; @files = ; - $total = 0; + $total = @files; + $count = 0; $success = 0; + $failed = 0; + $ignored = 0; $pluginexec = abs_path($ENV{'P4PLUGIN'}); $testserver = abs_path($ENV{'TESTSERVER'}); @@ -106,13 +111,15 @@ sub RunTests() $cwd = getcwd(); foreach $i (@files) { - if ($filter ne "" + $count++; + if ($filter ne "" && index($i, $filter) == -1) { - print "Not running Perforce Integration Tests in file:'",$i,"' p4port:'",$p4port,"'\n"; + $ignored++; + print "\n[$suite][$count/$total] '",$i,"' Ignored (p4port:'",$p4port,"')\n"; next; } - print "Running Perforce Integration Tests in file:'",$i,"' p4port:'",$p4port,"'\n"; + print "\n[$suite][$count/$total] '",$i,"' Running (p4port:'",$p4port,"')\n"; chdir $cwd; rmtree( $clientroot, {keep_root => 1} ); print "Changing working directory to: '", $clientroot,"'\n"; @@ -129,21 +136,29 @@ sub RunTests() } elsif ($? == -1) { - print "Error running test '$i' : $!\n"; + print "\n[$suite][$count/$total] '",$i,"' Error running test: $!\n\n"; chdir $cwd; return 1; } else { - print "Test failed -> stopping all tests\n"; - chdir $cwd; - return 1; + print "\n[$suite][$count/$total] '",$i,"' Failed (p4port:'",$p4port,"')\n\n"; + $failed++; } - $total++; RemoveExclusiveFile(); } - print "Done: $success of $total tests passed.\n"; chdir $cwd; + if ($ignored > 0) + { + print "[$suite] $ignored of $total tests ignored.\n"; + } + if ($failed > 0) + { + print "[$suite] Failed: $failed of $total tests failed.\n"; + print "[$suite] $success of $total tests passed.\n"; + return $failed; + } + print "[$suite] Success: $success of $total tests passed.\n"; return 0; } @@ -160,7 +175,7 @@ sub AddExclusiveFile open(FH, '>', 'Assets/exclusivefile.txt') or die $!; print(FH 'File with exclusive open file type modifier.'); close(FH) or die $1; - + RunCommand('add -t text+l Assets/exclusivefile.txt'); RunCommand('submit -d "Add Assets/exclusivefile.txt." Assets/exclusivefile.txt'); } @@ -173,7 +188,7 @@ sub RemoveExclusiveFile sub SetupServer { - $root = $ENV{'VCS_P4ROOT'}; + $root = $ENV{'VCS_P4ROOT'}; my $p4port = $ENV{'VCS_P4PORT'}; print "Setting server in '$root' listening on port '$p4port'\n"; rmtree($root); @@ -190,6 +205,7 @@ sub SetupServer } my $p4d = $ENV{'P4DEXEC'}; + print "Starting server '$p4d'\n"; system("$p4d -xi -r \"$root\""); my $pidfile = getcwd() . "/server.pid"; my $pid = SpawnSubProcess($p4d, " -r \"$root\" -p $p4port --pid-file=$pidfile"); @@ -288,9 +304,9 @@ Update: 2022/07/20 11:40:48 Access: 2022/07/20 11:40:48 -FullName: Multi Factor Authentication +FullName: Multi Factor Authentication -Password: ****** +Password: ****** AuthMethod: perforce+2fa EOF @@ -313,9 +329,9 @@ sub SetupMFATriggers $TRIGGERS =< +#define getcwd _getcwd // MSVC warning C4996: 'getcwd': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getcwd. +#define unlink _unlink // MSVC warning C4996: 'unlink': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _unlink. #endif void printStatus(bool ok); diff --git a/Test/VCSTest.pm b/Test/VCSTest.pm index dd4e3d7..7a33ee8 100644 --- a/Test/VCSTest.pm +++ b/Test/VCSTest.pm @@ -3,11 +3,8 @@ use PerforceTest; sub IntegrationTest { - $exitCode = PerforceIntegrationTests(@_); - if ($exitCode != 0) - { - exit $exitCode; - } + $failed = PerforceIntegrationTests(@_); + return $failed; } 1; diff --git a/build.pl b/build.pl index fb1540f..6f79b41 100755 --- a/build.pl +++ b/build.pl @@ -25,30 +25,30 @@ rmtree("Release"); rmtree("Build"); find(\&wanted, "./"); - sub wanted + sub wanted { - my($filename, $dirs, $suffix) = fileparse($File::Find::name, qr/\.[^.]*/); + my($filename, $dirs, $suffix) = fileparse($File::Find::name, qr/\.[^.]*/); if (($suffix eq ".o") or ($suffix eq ".obj")) { - print "delete $File::Find::name","\n"; - unlink($_); + print "delete $File::Find::name","\n"; + unlink($_); } - } - unlink("PerforcePlugin"); + } + unlink("PerforcePlugin"); exit 0; } if (not $target) { - if ($^O eq "darwin") + if ($^O eq "darwin") { - $target = "mac"; + $target = "mac"; } - elsif ($^O eq "MSWin32") + elsif ($^O eq "MSWin32") { $target = "win32"; } - elsif ($^O eq "linux") + elsif ($^O eq "linux") { $target = "linux64"; } @@ -60,7 +60,7 @@ { unless ($test) { - BuildMac(); + BuildMac(); } else { @@ -71,24 +71,13 @@ { unless ($test) { - BuildWin32(); + BuildWin32(); } else { TestWin32(); } } -elsif ($target eq "linux32") -{ - unless ($test) - { - BuildLinux ($target); - } - else - { - TestLinux ($target); - } -} elsif ($target eq "linux64") { unless ($test) @@ -100,32 +89,44 @@ TestLinux ($target); } } -else +else { - die ("Unknown platform"); + die ("Unknown platform"); } sub TestPerforce() { - IntegrationTest("Plugin", "localhost:1667", $testoption, $filter); - IntegrationTest("Plugin", "ssl:localhost:1667", $testoption, $filter); - IntegrationTest("Perforce/Common", "localhost:1667", $testoption, $filter); - IntegrationTest("Perforce/Common", "ssl:localhost:1667", $testoption, $filter); - IntegrationTest("Perforce/BaseIPv4", "tcp4:localhost:1667", $testoption, $filter); - IntegrationTest("Perforce/SecureBaseIPv4", "ssl4:localhost:1667", $testoption, $filter); - IntegrationTest("Perforce/SquareBracketIPv4", "tcp4:[localhost]:1667", $testoption, $filter); + my $failed = 0; + $failed += IntegrationTest("1-7", "Plugin", "localhost:1667", $testoption, $filter); + $failed += IntegrationTest("2-7", "Plugin", "ssl:localhost:1667", $testoption, $filter); + $failed += IntegrationTest("3-7", "Perforce/Common", "localhost:1667", $testoption, $filter); + $failed += IntegrationTest("4-7", "Perforce/Common", "ssl:localhost:1667", $testoption, $filter); + $failed += IntegrationTest("5-7", "Perforce/BaseIPv4", "tcp4:localhost:1667", $testoption, $filter); + $failed += IntegrationTest("6-7", "Perforce/SecureBaseIPv4", "ssl4:localhost:1667", $testoption, $filter); + $failed += IntegrationTest("7-7", "Perforce/SquareBracketIPv4", "tcp4:[localhost]:1667", $testoption, $filter); + # Only works locally, not in CI + # $failed += IntegrationTest("8-7", "Perforce/MultiFactorAuthentication", "localhost:1667", $testoption, $filter); # Only works if DNS routes via IPv6 - # IntegrationTest("Perforce/BaseIPv6", "tcp6:[localhost]:1667", $testoption, $filter); + # $failed += IntegrationTest("9-7", "Perforce/BaseIPv6", "tcp6:[localhost]:1667", $testoption, $filter); # Does not work in new version of Perforce server - # IntegrationTest("Perforce/SquareBracketIPv6", "tcp6:[::1]:1667", $testoption, $filter); - # IntegrationTest("Perforce/SecureSquareBracketIPv6", "ssl6:[::1]:1667", $testoption, $filter); - IntegrationTest("Perforce/MultiFactorAuthentication", "localhost:1667", $testoption, $filter); + # $failed += IntegrationTest("10-7", "Perforce/SquareBracketIPv6", "tcp6:[::1]:1667", $testoption, $filter); + # $failed += IntegrationTest("11-7", "Perforce/SecureSquareBracketIPv6", "ssl6:[::1]:1667", $testoption, $filter); + + if ($failed > 0) + { + print "\nFAILURE $failed Perforce Integrations Test(s) failed!\n\n"; + exit 1; + } + else + { + print "\nSUCCESS: All Perforce Integrations Tests passed\n\n"; + } } sub BuildMac { rmtree("Build"); - system("make" , "-f", "Makefile.osx", "all") && die ("Failed to build version control plugins"); + system("make" , "-f", "Makefile.osx", "all") && die ("Failed to build PerforcePlugin for macOS"); } sub TestMac @@ -143,9 +144,9 @@ sub TestMac sub BuildWin32 { - rmtree("Build"); - system("msbuilder.cmd", "VersionControl.sln", "P4Plugin", "Win32") && die ("Failed to build PerforcePlugin.exe"); - system("msbuilder.cmd", "VersionControl.sln", "TestServer", "Win32") && die ("Failed to build TestServer.exe"); + rmtree("Build"); + system("msbuilder.cmd", "VersionControl.sln", "P4Plugin", "Win32") && die ("Failed to build PerforcePlugin.exe"); + system("msbuilder.cmd", "VersionControl.sln", "TestServer", "Win32") && die ("Failed to build TestServer.exe"); } sub TestWin32 @@ -160,31 +161,12 @@ sub TestWin32 sub BuildLinux ($) { - my $platform = shift; - - my $cflags = '-O3 -fPIC -fexceptions -fvisibility=hidden -DLINUX'; - my $cxxflags = "$cflags -Wno-ctor-dtor-private"; - my $ldflags = ''; - - if ($platform eq 'linux32') { - $cflags = "$cflags -m32"; - $cxxflags = "$cxxflags -m32"; - $ldflags = '-m32'; - } - - $ENV{'CFLAGS'} = $cflags; - $ENV{'CXXFLAGS'} = $cxxflags; - $ENV{'LDFLAGS'} = $ldflags; - $ENV{'PLATFORM'} = $platform; - system ('make', '-f', 'Makefile.gnu', 'clean'); - system ('make', '-f', 'Makefile.gnu') && die ("Failed to build $platform"); + system ('make', '-f', 'Makefile.gnu') && die ("Failed to build PerforcePlugin for linux64"); } sub TestLinux ($) { - my $platform = shift; - $ENV{'P4DEXEC'} = "PerforceBinaries/linux64/p4d"; $ENV{'P4EXEC'} = "PerforceBinaries/linux64/p4"; $ENV{'P4PLUGIN'} = "Build/linux64/PerforcePlugin"; @@ -194,4 +176,4 @@ ($) chmod 0755, glob("Build/linux64/*"); TestPerforce(); -} \ No newline at end of file +} diff --git a/download_perforce_binaries.ps1 b/download_perforce_binaries.ps1 new file mode 100644 index 0000000..f0890b6 --- /dev/null +++ b/download_perforce_binaries.ps1 @@ -0,0 +1,10 @@ +Set-PSDebug -Trace 1 + +curl -fssL -o 'PerforceBinaries/linux64/p4' 'https://filehost.perforce.com/perforce/r21.2/bin.linux26x86_64/p4' +curl -fssL -o 'PerforceBinaries/linux64/p4d' 'https://filehost.perforce.com/perforce/r21.2/bin.linux26x86_64/p4d' +curl -fssL -o 'PerforceBinaries/OSX/p4' 'https://filehost.perforce.com/perforce/r21.2/bin.macosx1015x86_64/p4' +curl -fssL -o 'PerforceBinaries/OSX/p4d' 'https://filehost.perforce.com/perforce/r21.2/bin.macosx1015x86_64/p4d' +curl -fssL -o 'PerforceBinaries\Win_x64\p4.exe' 'https://filehost.perforce.com/perforce/r21.2/bin.ntx64/p4.exe' +curl -fssL -o 'PerforceBinaries\Win_x64\p4d.exe' 'https://filehost.perforce.com/perforce/r21.2/bin.ntx64/p4d.exe' + +Set-PSDebug -Trace 0