Skip to content

Commit

Permalink
git-p4: add file streaming progress in verbose mode
Browse files Browse the repository at this point in the history
If a file is streamed from P4 to Git then the verbose mode prints
continuously the progress as percentage like this:
//depot/file.bin 20% (10 MB)

Upon completion the progress is overwritten with depot source, local
file and size like this:
//depot/file.bin --> local/file.bin (10 MB)

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Lars Schneider authored and Junio C Hamano committed Oct 3, 2015
1 parent 7960e70 commit d2176a5
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions git-p4.py
Original file line number Diff line number Diff line change
Expand Up @@ -2171,7 +2171,9 @@ def splitFilesIntoBranches(self, commit):
def streamOneP4File(self, file, contents):
relPath = self.stripRepoPath(file['depotFile'], self.branchPrefixes)
if verbose:
sys.stderr.write("%s\n" % relPath)
size = int(self.stream_file['fileSize'])
sys.stdout.write('\r%s --> %s (%i MB)\n' % (file['depotFile'], relPath, size/1024/1024))
sys.stdout.flush()

(type_base, type_mods) = split_p4_type(file["type"])

Expand Down Expand Up @@ -2248,7 +2250,8 @@ def streamOneP4File(self, file, contents):
def streamOneP4Deletion(self, file):
relPath = self.stripRepoPath(file['path'], self.branchPrefixes)
if verbose:
sys.stderr.write("delete %s\n" % relPath)
sys.stdout.write("delete %s\n" % relPath)
sys.stdout.flush()
self.gitStream.write("D %s\n" % relPath)

# handle another chunk of streaming data
Expand Down Expand Up @@ -2288,10 +2291,23 @@ def streamP4FilesCb(self, marshalled):
# 'data' field we need to append to our array
for k in marshalled.keys():
if k == 'data':
if 'streamContentSize' not in self.stream_file:
self.stream_file['streamContentSize'] = 0
self.stream_file['streamContentSize'] += len(marshalled['data'])
self.stream_contents.append(marshalled['data'])
else:
self.stream_file[k] = marshalled[k]

if (verbose and
'streamContentSize' in self.stream_file and
'fileSize' in self.stream_file and
'depotFile' in self.stream_file):
size = int(self.stream_file["fileSize"])
if size > 0:
progress = 100*self.stream_file['streamContentSize']/size
sys.stdout.write('\r%s %d%% (%i MB)' % (self.stream_file['depotFile'], progress, int(size/1024/1024)))
sys.stdout.flush()

self.stream_have_file_info = True

# Stream directly from "p4 files" into "git fast-import"
Expand Down

0 comments on commit d2176a5

Please sign in to comment.