git-p4: Fix import of changesets with file deletions

Commit 3a70cdfa42 made readP4Files abort quickly
when the changeset only contains files that are marked for deletion with an empty return
value, which caused the commit to not do anything.

This commit changes readP4Files to distinguish between files that need to be passed to p4
print and files that have no content ("deleted") and merge them in the returned
list.

Signed-off-by: Simon Hausmann <simon@lst.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Simon Hausmann 2008-03-03 11:55:48 +01:00 committed by Junio C Hamano
parent a798b2c0f6
commit 30b5940bcd

View File

@ -850,29 +850,32 @@ class P4Sync(Command):
## Should move this out, doesn't use SELF.
def readP4Files(self, files):
filesForCommit = []
filesToRead = []
for f in files:
includeFile = True
for val in self.clientSpecDirs:
if f['path'].startswith(val[0]):
if val[1] > 0:
f['include'] = True
else:
f['include'] = False
if val[1] <= 0:
includeFile = False
break
files = [f for f in files
if f['action'] != 'delete' and
(f.has_key('include') == False or f['include'] == True)]
if includeFile:
filesForCommit.append(f)
if f['action'] != 'delete':
filesToRead.append(f)
if not files:
return []
filedata = []
if len(filesToRead) > 0:
filedata = p4CmdList('-x - print',
stdin='\n'.join(['%s#%s' % (f['path'], f['rev'])
for f in filesToRead]),
stdin_mode='w+')
filedata = p4CmdList('-x - print',
stdin='\n'.join(['%s#%s' % (f['path'], f['rev'])
for f in files]),
stdin_mode='w+')
if "p4ExitCode" in filedata[0]:
die("Problems executing p4. Error: [%d]."
% (filedata[0]['p4ExitCode']));
if "p4ExitCode" in filedata[0]:
die("Problems executing p4. Error: [%d]."
% (filedata[0]['p4ExitCode']));
j = 0;
contents = {}
@ -896,10 +899,12 @@ class P4Sync(Command):
contents[stat['depotFile']] = text
for f in files:
assert not f.has_key('data')
f['data'] = contents[f['path']]
return files
for f in filesForCommit:
path = f['path']
if contents.has_key(path):
f['data'] = contents[path]
return filesForCommit
def commit(self, details, files, branch, branchPrefixes, parent = ""):
epoch = details["time"]