use p4CmdList() to get file contents in Python dicts. This is more robust.
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>maint
parent
f2eda79f69
commit
d2c6dd30ef
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue