Skip to content

Commit

Permalink
use p4CmdList() to get file contents in Python dicts. This is more ro…
Browse files Browse the repository at this point in the history
…bust.

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
  • Loading branch information
Han-Wen Nienhuys committed May 31, 2007
1 parent f2eda79 commit d2c6dd3
Showing 1 changed file with 21 additions and 35 deletions.
56 changes: 21 additions & 35 deletions contrib/fast-import/git-p4
Original file line number Diff line number Diff line change
Expand Up @@ -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')
]
Expand Down Expand Up @@ -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"]
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d2c6dd3

Please sign in to comment.