[p4] Difference in integration behavior in 2006.2
Leonard, William C
bill.leonard at intergraph.com
Mon Mar 5 13:00:28 PST 2007
We recently upgraded our server from 2005.2 to 2006.2, and now we're
seeing some unexpected behavior in integrations. We periodically run a
report to determine if there are any changes in one codeline that need
to be propagated to other codelines. We have a fairly static
propagation path, so it's fairly easy (though not computationally cheap)
to run the report. We're now getting reports that changes need to be
propagated from a long time ago, which previous reports (on the old
server version) did not mention. That in itself wouldn't be bad, if the
old version were simply missing a valid case. But we're seeing a lot of
cases that look incorrect under the new server.
I'll give a concrete example to illustrate. Changelist 69970 created
revision 7 of the file
//depot/GTechnology/Development/Dev9.3.2EPack1/Software/Implementation/S
electSetPipe/src/selectsetpipe.cpp
by an integration from another codeline. It is a "bookkeeping" change,
in that no actual change to the file resulted; it just records the fact
that a change in another codeline could safely be ignored when
propagating it to this codeline. Revision 7 was never explicitly
integrated to any other codeline.
Next, changelist 70972 created revision 8 of that file with several
changes in it. CL 70972 was integrated to
//depot/GTechnology/Development/Main/Software/Implementation/SelectSetPi
pe/src/selectsetpipe.cpp#65
in CL 71026 as a "copy from". Consequently, revision 7 is implicitly
included in that integration, although the integration history for the
target file lists only revision 8 as the source. (This seems like
incorrect bookkeeping to me. If a change is integrated by accepting the
source, shouldn't that implicitly include any previous revisions not
already integrated?)
The revision 8 change was further propagated to
//depot/GTechnology/Development/Dev9.4.0/Software/Implementation/SelectS
etPipe/src/selectsetpipe.cpp#4
in CL 71132 by doing a merge. That change was then propagated back to
//depot/GTechnology/Development/Main/Software/Implementation/SelectSetPi
pe/src/selectsetpipe.cpp#66
in CL 75272 as a "copy from". All of the above was done with the
Perforce 2005.2 server.
Meanwhile, we've changed the order in which we propagate changes. Files
in the //depot/GTechnology/Development/Dev9.3.2EPack1 codeline are
propagated directly to the //depot/GTechnology/Development/Dev9.4.0
codeline, and then to //depot/GTechnology/Development/Main. The report
we run checks to make sure there are no changes in
//depot/GTechnology/Development/Dev9.3.2EPack1 that need to be promoted
to //depot/GTechnology/Development/Dev9.4.0. It now says that revision
7 has not been integrated in that codeline. When I do the integration,
it says there are 0 changes between source and base, and 70 changes
between target and base. That's all believable, but why is it now
reporting this?
Technically, I guess you could say the integration history does not
indicate that revision 7 has ever been integrated. However, the "copy
from" done in CL 71026 did implicitly include that revision; shouldn't
Perforce recognize that?
What changed in the integration algorithm that caused 2005.2 to think
this change *had* been integrated, but 2006.2 doesn't?
Thanks!
William Leonard
Executive Manager
Security, Government & Infrastructure (SG&I) Division
Intergraph Corporation
P.O. Box 6695, Huntsville, AL 35824-0695 USA
P 1.256.730.8167 F 1.256.730.1717
bill.leonard at intergraph.com, www.intergraph.com
More information about the perforce-user
mailing list