Browse Source

use p4CmdList() to get file contents in Python dicts. This is more robust.

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
maint
Han-Wen Nienhuys 18 years ago
parent
commit
d2c6dd30ef
  1. 56
      contrib/fast-import/git-p4

56
contrib/fast-import/git-p4

@ -580,7 +580,8 @@ class P4Sync(Command): @@ -580,7 +580,8 @@ class P4Sync(Command):
optparse.make_option("--silent", dest="silent", action="store_true"),
optparse.make_option("--detect-labels", dest="detectLabels", action="store_true"),
optparse.make_option("--verbose", dest="verbose", action="store_true"),
optparse.make_option("--import-local", dest="importIntoRemotes", action="store_false"),
optparse.make_option("--import-local", dest="importIntoRemotes", action="store_false",
help="Import into refs/heads/ , not refs/remotes"),
optparse.make_option("--max-changes", dest="maxChanges"),
optparse.make_option("--keep-path", dest="keepRepoPath", action='store_true')
]
@ -680,41 +681,22 @@ class P4Sync(Command): @@ -680,41 +681,22 @@ class P4Sync(Command):
if not specs:
return

data = read_pipe('p4 print %s' % ' '.join(['"%s"' % path
for (path, info) in specs]))
filedata = p4CmdList('print %s' % ' '.join(['"%s"' % path
for (path, info) in specs]))

idx = 0
for j in range(0, len(specs)):
(pathrev, info) = specs[j]
j = 0;
contents = {}
while filedata[j:]:
stat = filedata[j]
text = filedata[j+1]
j += 2

assert idx < len(data)
if data[idx:idx + len(pathrev)] != pathrev:
assert False
idx = data.find ('\n', idx)
assert idx > 0
idx += 1
assert stat['code'] == 'stat' and text['code'] == 'text'
contents[stat['depotFile']] = text['data']

start = idx

end = -1
if j < len(specs)-1:
(next_pathrev, next_info) = specs[j+1]
end = data.find(next_pathrev, start)

if end < 0:
print 'j'
print 'PATHREV', pathrev, specs[j]
print 'nextpathrev', next_pathrev, specs[j+1]
print 'start', start, len(data)
print 'end', end

assert end >= 0
else:
end = len(data)

info['data'] = data[start:end]
idx = end
assert idx == len(data)
for f in files:
assert not f.has_key('data')
f['data'] = contents[f['path']]

def commit(self, details, files, branch, branchPrefixes, parent = ""):
epoch = details["time"]
@ -1158,8 +1140,12 @@ class P4Sync(Command): @@ -1158,8 +1140,12 @@ class P4Sync(Command):
% (p, self.revision)
for p in self.depotPaths])):

if not info.has_key("change"):
print info
if info['code'] == 'error':
sys.stderr.write("p4 returned an error: %s\n"
% info['data'])
sys.exit(1)


change = int(info["change"])
if change > newestRevision:
newestRevision = change

Loading…
Cancel
Save