viral_mutant
viral_mutant

Reputation: 1003

Perforce: The submitted file doesn't match workspace version

I am facing a weird behavior in perforce submitted files, after p4 integrate

Scenario

Repo contains C# code and the built DLL. I wished to integrate a changeset from one branch to another so I am following the steps which I had discussed, a while ago

The .cs files doesn't complain. If there is resolve conflict in the DLL, I choose either of Accept Source or Accept Target without much care. Reason being, I always rebuild the DLL before submitting

Issue

The DLL which was built in local workspace and reflected in the changeset is correct. I tested it locally and do p4 submit. But to my amazement, the DLL submitted is not the one which I had built. Instead the one which came from that other branch was submitted

Confusion

I thought that with perforce, when a file is opened in a changeset, always the latest(local) copy will be submitted. That is why I don't pay much attention if there are conflict reported in DLL

Isn't that correct ?

Why would the submitted file be different from my workspace version ?

Upvotes: 2

Views: 624

Answers (1)

Samwise
Samwise

Reputation: 71454

When you "accept source" you're recording that you want the target file to be an exact copy of the source file; consequently, if you submit the file, it's not even transferred from the workspace (in order to save time) -- instead it's just copied server-side. If you tampered with the workspace file, this leads to the situation you describe where the workspace is now inconsistent with the depot, just like if you'd modified a file that wasn't open for edit.

If you submit with the -t flag (for "tamper checking"), it will check for tampered files by comparing what's in your workspace with what should be in your workspace according to the resolve options you picked:

C:\Perforce\test\integ>p4 integ source target
//depot/integ/target#2 - integrate from //depot/integ/source#3

C:\Perforce\test\integ>p4 resolve -at
c:\Perforce\test\integ\target - vs //depot/integ/source#3
//Samwise-dvcs-1509687817/integ/target - copy from //depot/integ/source

C:\Perforce\test\integ>echo tampertampertamper >> target

C:\Perforce\test\integ>p4 submit -t -d "submitting tampered file"
Submitting change 190.
Locking 1 files ...
integrate //depot/integ/target#3
//Samwise-dvcs-1509687817/integ/target tampered with after resolve - edit or revert.
Submit aborted -- fix problems then use 'p4 submit -c 190'.
Some file(s) could not be transferred from client.

If you p4 edit the file, it's changed from a pure copy to an edit, and will be read from the workspace instead of from the source file:

C:\Perforce\test\integ>p4 edit target
//depot/integ/target#2 - reopened for edit

C:\Perforce\test\integ>p4 submit -c 190
Submitting change 190.
edit //depot/integ/target#3
Change 190 submitted.

Upvotes: 1

Related Questions