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