git p4 clone fails when p4 sizes does not return 'fileSize' key. There are few cases when p4 sizes returens 0 size and with marshaled output, it doesn’t return the fileSize attribute.
Here is the demonstration and potential fix
$ cd /tmp/git/
$ git remote -v
origin https://github.com/git/git.git (fetch)
origin https://github.com/git/git.git (push)
$ git branch -v
* master fe0a9eaf3 Merge branch 'svn/authors-prog-2' of git://bogomips.org/git-svn
Problem:
$ /tmp/git/git-p4.py clone //depot/<path>/@all . –verbose
.
.
.
Traceback (most recent call last):
File "/tmp/git/git-p4.py", line 3840, in <module>
main()
File "/tmp/git/git-p4.py", line 3834, in main
if not cmd.run(args):
File "/tmp/git/git-p4.py", line 3706, in run
if not P4Sync.run(self, depotPaths):
File "/tmp/git/git-p4.py", line 3568, in run
self.importChanges(changes)
File "/tmp/git/git-p4.py", line 3240, in importChanges
self.initialParent)
File "/tmp/git/git-p4.py", line 2858, in commit
self.streamP4Files(files)
File "/tmp/git/git-p4.py", line 2750, in streamP4Files
cb=streamP4FilesCbSelf)
File "/tmp/git/git-p4.py", line 552, in p4CmdList
cb(entry)
File "/tmp/git/git-p4.py", line 2744, in streamP4FilesCbSelf
self.streamP4FilesCb(entry)
File "/tmp/git/git-p4.py", line 2692, in streamP4FilesCb
self.streamOneP4File(self.stream_file, self.stream_contents)
File "/tmp/git/git-p4.py", line 2569, in streamOneP4File
size = int(self.stream_file['fileSize'])
KeyError: 'fileSize'
Signature of the sizes output resulting in this problem:
$ p4 -p <port> sizes //foo.c
//foo.c#5 <n/a> bytes
$ p4 -p <port> -G sizes //foo.c
{scodesstats depotFiles4//fooc.c50Signature for a file without problem:
$ p4 -p <port> sizes //bar.c
//bar.c#5 1105 bytes
$ p4 -p <port> -G sizes //bar.c
{scodesstats depotFiles;//bar.csrevs5fileSizes11050Patch:
$ git diff
diff --git a/git-p4.py b/git-p4.py index 7bb9cadc6..f908e805e 100755 --- a/git-p4.py +++ b/git-p4.py @@ -2565,7 +2565,7 @@ class P4Sync(Command, P4UserMap): def streamOneP4File(self, file, contents): relPath = self.stripRepoPath(file['depotFile'], self.branchPrefixes) relPath = self.encodeWithUTF8(relPath) - if verbose: + if verbose and 'fileSize' in self.stream_file: size = int(self.stream_file['fileSize']) sys.stdout.write('\r%s --> %s (%i MB)\n' % (file['depotFile'], relPath, size/1024/1024)) sys.stdout.flush() Thanks & Regards Thandesha