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 2007-05-23 18:49:35 -03:00
parent f2eda79f69
commit d2c6dd30ef
1 changed files with 21 additions and 35 deletions

View File

@ -580,7 +580,8 @@ class P4Sync(Command):
optparse.make_option("--silent", dest="silent", action="store_true"), optparse.make_option("--silent", dest="silent", action="store_true"),
optparse.make_option("--detect-labels", dest="detectLabels", 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("--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("--max-changes", dest="maxChanges"),
optparse.make_option("--keep-path", dest="keepRepoPath", action='store_true') optparse.make_option("--keep-path", dest="keepRepoPath", action='store_true')
] ]
@ -680,41 +681,22 @@ class P4Sync(Command):
if not specs: if not specs:
return return


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


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


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


start = idx for f in files:

assert not f.has_key('data')
end = -1 f['data'] = contents[f['path']]
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)


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


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


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