Skip to content

Commit

Permalink
git-p4: Fix import of changesets with file deletions
Browse files Browse the repository at this point in the history
Commit 3a70cdf 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>
  • Loading branch information
Simon Hausmann authored and Junio C Hamano committed Mar 4, 2008
1 parent a798b2c commit 30b5940
Showing 1 changed file with 25 additions and 20 deletions.
45 changes: 25 additions & 20 deletions contrib/fast-import/git-p4
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {}
Expand All @@ -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"]
Expand Down

0 comments on commit 30b5940

Please sign in to comment.