repro.log #3

  • //
  • guest/
  • tom_tyler/
  • repro/
  • SmartSyncDemo/
  • repro.log
  • View
  • Commits
  • Open Download .zip Download (6 KB)
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.
# Change User Description Committed
#3 32764 C. Thomas Tyler Updated to run with r26.1, and expanded to prove smart sync isn't related to integ history.
#2 32763 C. Thomas Tyler Enhanced output.
#1 32762 C. Thomas Tyler Added sample SmartSync repro script.