[p4] Baseless merging - the answer to a migration to Perforce question?

Gabor Maghera gmaghera at gmail.com
Fri Mar 14 12:15:44 PDT 2008


What you are proposing should work, Rick, given you're willing to accept the
cost, as it will be laborious.  As far as the changelist grouping goes, I am
not sure cvs2p4 will do that for you (based on changelists having identical
commit logs).  You may have to do that yourself, perhaps through scripting.

As for the second option I proposed, here is a visual representation:

trunk-A (trunk imported from SCCS)
--------------------------------
                                \
                                 -(branch spawned from trunk with no changes
on it - initially)

                               ^
                               .  (merge)
                               .
                               .
--------------------------------
trunk-B (branch imported from SCCS)

Hope this helps,
Gabor




On Fri, Mar 14, 2008 at 8:09 AM, Rick Macdonald <rickmacd at shaw.ca> wrote:

> Gabor Maghera wrote:
> > There may be a way to do it without having to rely on baseless merging
> > for going forward once migration to p4 is completed.  Import the trunk
> > only via cvs2p4.  Once you get it into Perforce, spawn a branch from
> > it.  Check the entire branch out for edit, delete all of its files
> > from your workspace (to handle deletes performed on the branch).
> > Perform a p4 add on any files which were added to the SCCS branch.
> > Submit.  This will give you the ancestral relationship between the
> > branch and its donor at the cost of losing SCCS revision history on
> > your branch.
>
> It occurs to me that we could do the above, but instead of one
> checkout/submit, we could repeat it for every revision of every file. I
> think I could extract the changelist grouping from a dry run of cvs2p4
> and do this with the same sets of files. The results would be exactly
> what we want, but the dates would be wrong. Brutal and slow, but an idea
> to consider. I think we could do this on the output of cvs2p4, and then
> merge the entire result with our production server (using RevML of
> perfmerge).
>
> This should work, right?
>
> > You could probably get similar results without revision history loss
> > but it gets a bit more complicated.  Import the trunk only via cvs2p4,
> > and branch right away.  Import the branch with cvs2p4 but not as a
> > branch, rather a trunk for a new module (you can do this with
> > cvs2p4).  Now, perform a baseless merge from this place into the
> > branch you created after the first import.  The revision history on
> > the p4 branch will include full revision history, but the branch point
> > will be off, and the revision history from SCCS will show as having
> > taken place on the trunk of the module which resulted from the second
> > cvs2p4 import.
> >
> > If you were to go with the latter option, you'll probably have to use
> > perfmerge++ to merge the results of the two runs of cvs2p4.  I don't
> > think it's possible to do the import in one step, because of the
> > desired change from branch to trunk and massaging it into a new
> > module, when converting the SCCS branch.
>
> I don't understand this one yet. Have to think about it some more.
>
> Thanks,
> Rick
>
> >
> > Cheers,
> > Gabor
> >
> > On Thu, Mar 13, 2008 at 4:00 PM, Rick Macdonald <rickmacd at shaw.ca
> > <mailto:rickmacd at shaw.ca>> wrote:
> >
> >     This question is about creating a branch relationship during or
> >     after an
> >     SCCS to P4 migration.
> >
> >     We've had Perforce for at least 10 years, and we'll be adding a
> >     pile of
> >     SCCS code to it due to a company merger.
> >
> >     The code in SCCS is simply one long trunk (only 2-digit revision
> >     numbers; little or no 4 digit branch revisions such as 1.2.1.4
> >     <http://1.2.1.4>), but a
> >     couple of years ago they made a copy (not an SCCS branch) of all the
> >     SCCS files. Each of these codelines has since evolved with their own
> >     development. Some changes have been done manually to both codelines.
> >     SCCS itself knows nothing about the copy branch, but the SCCS
> history
> >     and revision numbers of everything up to the copy point would be
> >     identical. The SCCS revision numbers in the two copies are clearly
> >     separate. The copy had its revision numbers all bumped up to 4500.1,
> >     whereas the original trunk is not higher than 4200.x.
> >
> >     My question is, how to get the branch relationship into Perforce? If
> I
> >     call the original SCCS trunk "main" and the copy "dev", we need it
> to
> >     end up like this:
> >
> >     main _______________________________________
> >
> >      \________________  dev
> >
> >     Going forward, we'd want to be able to integrate back and forth
> >     between
> >     main and dev, eventually retiring dev with one last integration to
> >     main.
> >
> >     I'm wondering if there is some trick to be done to the SCCS files,
> or
> >     the rcs/cvs conversion of them. Or, perhaps something can be done
> >     during
> >     cvs2p4. I'm thinking not, but I don't know rcs/cvs.
> >
> >     In my subject, I made a guess of letting baseless merging handle it
> >     after the two codelines are simply migrated independently to
> Perforce.
> >     In 10 years, I've never dealt with baseless merging, so I can't
> quite
> >     get my head around it. We don't need Perforce to  duplicate the
> exact
> >     integration history between the two codelines over the last two
> >     years. I
> >     think we can get by with using Jobs to annotate certain changelists
> >     where bugs were fixed or new development added to either codeline.
> But
> >     as I mentioned, going forward, we'd like Perforce to be helpful with
> >     integrating between main and dev (probably in both directions)
> >     just like
> >     one would expect with a normal parent-child relationship created in
> >     Perforce by branching.
> >
> >     Actually, integrating between the two codelines in Perforce implies
> >     cherry-picking new changes to come (because we aren't ready to
> resolve
> >     all the changes yet). I can't imagine what the first integration
> >     between
> >     the two would look like. It would be a cherry-picked changelist
> >     from the
> >     head of one codeline to the other, but what would resolve make of
> >     that?
> >
> >     Otherwise, what other ideas should I be looking at?
> >
> >     Rick
> >
> >
> >
> >     _______________________________________________
> >     perforce-user mailing list  -  perforce-user at perforce.com
> >     <mailto:perforce-user at perforce.com>
> >     http://maillist.perforce.com/mailman/listinfo/perforce-user
> >
> >
>
>



More information about the perforce-user mailing list