perforce / p4transfer

[Community Supported] Utility for transferring a subset of files (with complete history of all changelists) from one Helix Core repository to another, only requiring read access to the source repository.
BSD 2-Clause "Simplified" License
43 stars 19 forks source link

Failure on submit validate when destination is graph depot #15

Open groboclown opened 2 years ago

groboclown commented 2 years ago

A key error can happen if a change has no revisions:

Traceback (most recent call last):
  File "/home/user/p4transfer/P4Transfer.py", line 2579, in replicate
    num_changes = self.replicate_changes()
  File "/home/user/p4transfer/P4Transfer.py", line 2396, in replicate_changes
    targetChange = self.target.replicateChange(fileRevs, specialMoveRevs, srcFileLogs, change, self.source.p4.port)
  File "/home/user/p4transfer/P4Transfer.py", line 1574, in replicateChange
    self.validateSubmittedChange(newChangeId, fileRevs)
  File "/home/user/p4transfer/P4Transfer.py", line 1624, in validateSubmittedChange
    for (n, rev) in enumerate(change['rev']):
KeyError: 'rev'

I added a bit of debugging around this for the corresponding change object (returned from self.p4cmd('describe', '-s', newChangeId)[0]). The dictionary looks like:

{
    'change': '1234',
    'user': 'someuser',
    'client': 'migration-target',
    'time': '1594805092',
    'desc': '(the changelist description)',
    'status': 'submitted',
    'changeType': 'public',
    'path': ''
}

The destination depot is a graph depot, which makes the change description different.

groboclown commented 2 years ago

There seem to be many issues if the target depot is a graph depot. I'm enumerating those now and will put together a comprehensive set of updates for it.