Started repro.sh v1.2.0 at Wed Jun 17 14:46:21 EDT 2026. ReproDir=/tmp/repro ============================================================================== Scenario 1: Smart Sync Demo Preliminary info: Show versions of p4/p4d on the PATH: Executing command: p4 -V Perforce - The Fast Software Configuration Management System. Copyright 1995-2026 Perforce Software. All rights reserved. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) Version of OpenSSL Libraries: OpenSSL 3.5.7 9 Jun 2026 See 'p4 help [ -l ] legal' for additional license information on these licenses and others. Extensions/scripting support built-in. Parallel sync threading built-in. Rev. P4/MACOSX12ARM64/2026.1/2972966 (2026/06/10). Executing command: p4d -V Perforce - The Fast Software Configuration Management System. Copyright 1995-2026 Perforce Software. All rights reserved. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) Version of OpenSSL Libraries: OpenSSL 3.5.7 9 Jun 2026 This product includes software developed by the OpenLDAP Foundation (http://www.openldap.org/) This product includes software developed by Computing Services at Carnegie Mellon University: Cyrus SASL (http://www.cmu.edu/computing/) Version of OpenLDAP Libraries: 2.5.20 Version of Cyrus SASL Libraries: 2.1.28 See 'p4 help [ -l ] legal' for additional license information on these licenses and others. Using no memory manager. Rev. P4D/MACOSX12ARM64/2026.1/2972966 (2026/06/10). License: none Preliminary setup: Spin up local repo. Executing command: mkdir /tmp/repro mkdir: /tmp/repro: File exists Operating in: /tmp/repro Executing command: p4 init -C0 -n Server ttyler-dvcs-1781721981 saved. Add some files. Executing command: p4 status One.h - reconcile to add //stream/main/One.h#1 Reconcile and submit. //stream/main/One.h#1 - opened for add Submitting change 1. Locking 1 files ... add //stream/main/One.h#1 Change 1 submitted. Executing: p4 stream -t release -P //stream/main -o //stream/release > /var/folders/gn/hg3ywxfs0fz_m67x3n5_yp480000gq/T/tmp.mMMhhpBk9K Executing: p4 stream -i < /var/folders/gn/hg3ywxfs0fz_m67x3n5_yp480000gq/T/tmp.mMMhhpBk9K Stream //stream/release saved. Executing: p4 stream -t mainline -o //stream/main_compiled > /var/folders/gn/hg3ywxfs0fz_m67x3n5_yp480000gq/T/tmp.mMMhhpBk9K Executing: p4 stream -i < /var/folders/gn/hg3ywxfs0fz_m67x3n5_yp480000gq/T/tmp.mMMhhpBk9K Stream //stream/main_compiled saved. Pouplate the new release stream. Executing command: p4 populate -r -S //stream/release 1 files branched (change 4). List streams. Executing command: p4 switch -l main * main_compiled release Switch the stream this workspace is associated with to //stream/release. Executing command: p4 client -s -S //stream/release Client ttyler-dvcs-1781721981 switched. This is to illustrate that 'p4 client -s -S' didn't update the 'have' list automatically - it still references //stream/main. Executing command: p4 have //stream/main/One.h#1 - /tmp/repro/One.h This is the smart sync. The magic is indicated by the word 'replacing' meaning no files contents are udpated, so it's fast. Executing command: p4 sync //stream/release/One.h#1 - replacing /tmp/repro/One.h After the smart sync, the 'have' list was updated (even though the content wasn't because it didn't need to be). Executing command: p4 have //stream/release/One.h#1 - /tmp/repro/One.h Just clean up the files. Executing command: p4 sync @0 //stream/release/One.h#1 - deleted as /tmp/repro/One.h The smarts don't apply to a sync if we don't already have the files. So we don't see 'replacing', instead we see 'updating'. Executing command: p4 sync //stream/release/One.h#1 - added as /tmp/repro/One.h Clean up the files to prep for the next part of the demo. Executing command: p4 sync @0 //stream/release/One.h#1 - deleted as /tmp/repro/One.h Switch the stream this workspace is associated with to //stream/main_compiled. Executing command: p4 client -s -S //stream/main_compiled Client ttyler-dvcs-1781721981 switched. Add a diffferent One.h file with no historical connection (i.e. no integration history connection) to the other One.h, but same name, contents, and same location relative to the workspace root. Also add an extra file One.compiled. Executing command: p4 status One.compiled - reconcile to add //stream/main_compiled/One.compiled#1 One.h - reconcile to add //stream/main_compiled/One.h#1 Reconcile and submit. //stream/main_compiled/One.compiled#1 - opened for add //stream/main_compiled/One.h#1 - opened for add Submitting change 5. Locking 2 files ... add //stream/main_compiled/One.compiled#1 add //stream/main_compiled/One.h#1 Change 5 submitted. Show history for //stream/main/One.h Executing command: p4 filelog -i //stream/main/One.h //stream/main/One.h ... #1 change 1 add on 2026/06/17 by ttyler@ttyler-dvcs-1781721981 (text) 'Added One.h.' ... ... branch into //stream/release/One.h#1 Show history for //stream/main_compiled/One.h (unrelated to the one in main). Executing command: p4 filelog -i //stream/main_compiled/One.h //stream/main_compiled/One.h ... #1 change 5 add on 2026/06/17 by ttyler@ttyler-dvcs-1781721981 (text) 'Added One.h.' Switch the stream this workspace is associated with to //stream/main. Executing command: p4 client -s -S //stream/main Client ttyler-dvcs-1781721981 switched. This is to illustrate that 'p4 client -s -S' didn't update the 'have' list automatically - it still references //stream/release. Executing command: p4 have //stream/main_compiled/One.compiled#1 - /tmp/repro/One.compiled //stream/main_compiled/One.h#1 - /tmp/repro/One.h This is the smart sync. The magic is indicated by the word 'replacing' meaning no files contents are udpated, so it's fast. Executing command: p4 sync //stream/main_compiled/One.compiled#1 - deleted as /tmp/repro/One.compiled //stream/main/One.h#1 - replacing /tmp/repro/One.h CONCLUSION: If the above line says 'replacing', SmartSync is in effect. (Should be true for P4D 2011.2+). So it actually doesn't depend on integration history, it only depends on files having the same name and location relative to the workspace root, and same MD5 checksum on the server. ============================================================================== Test completed with no errors. Results are valid.