Re: git-p4: exception when cloning a perforce repository
- From
- Damien Gérard <damien@iwi.me>
- Date
- Jan 15, 2014, 08:56 UTC
- Message-ID
- <843E4B24-5EDD-4451-8849-425160576A99@iwi.me>
- In-Reply-To
- <20140114232432.GA31465@padd.com>
On 15 Jan 2014, at 00:24, Pete Wyckoff <pw@padd.com> wrote:
Show 30 quoted lines
> pw@padd.com wrote on Mon, 13 Jan 2014 19:18 -0500:
>> damien@iwi.me wrote on Mon, 13 Jan 2014 14:37 +0100:
>>> I am trying to clone a perforce repository via git and I am having the following backtrace :
>>>
>>> {14:20}~/projects/####:master ✗ ➭ git p4 clone //depot/@all .
>>> Importing revision …
>>> [...]
>>> Importing revision 59702 (45%)Traceback (most recent call last):
>> [..]
>>> File "/opt/git/libexec/git-core/git-p4", line 2078, in streamOneP4File
>>> if data[-1] == '\n':
>>> IndexError: string index out of range
>>>
>>> git —version: git version 1.8.5.2.309.ga25014b [last commit from master from github.com/git/git]
>>> os : ubuntu 13.10
>>
>> This code:
>>
>> if type_base == "symlink":
>> git_mode = "120000"
>> # p4 print on a symlink sometimes contains "target\n";
>> # if it does, remove the newline
>> data = ''.join(contents)
>> ==> if data[-1] == '\n':
>> contents = [data[:-1]]
>> else:
>> contents = [data]
>>
>> means that data is an empty string. Implies you've got a
>> symlink pointing to nothing. Is that even possible?It does not seem so but I am so sure.
Show 32 quoted lines
>> It could be this is a regression introduced at 1292df1 (git-p4: >> Fix occasional truncation of symlink contents., 2013-08-08). The >> old way of doing data[:-1] unconditionally would have worked but >> was broken for other reasons. >> >> Could you investigate the symlink a bit? We're looking for >> one in change 59702 that points to nowhere. Maybe do: >> >> $ p4 describe -s 59702 >> >> and see if you can figure out which of those could be a symlink, then >> inspect it: >> >> $ p4 fstat //depot/symlink@59702 >> (probably shows it is "headRev 1") >> >> $ p4 print -q //depot/symlink#1 >> >> $ p4 print -q //depot/symlink#1 | od -c >> >> Thanks for checking this depot info first. > > I've tried to hack a test that produces a null symlink, > and having done so, find an error later on trying to > generate a symlink that points to "". So the "easy" > fix of checking for an empty string is unlikely to work > for your repo. > > Curious as to how you managed to generate such a thing. > If you find the file, and can get at the p4 depot, the > full ,v file would be interesting too. >
Indeed, those files are symlinks actually. But it sems they are all valid.
Here is what I can get :
Change 59702 by ##############@VS9 on 2009/03/24 15:53:39
OpenSSL 0.9.8j
Affected files ...
... //depot/openssl/0.9.8j/openssl/include/openssl/aes.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/asn1.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/asn1_mac.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/asn1t.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/bio.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/blowfish.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/buffer.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/cast.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/comp.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/conf.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/conf_api.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/crypto.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/des.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/des_old.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/dh.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/dsa.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/dso.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/dtls1.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/e_os2.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ebcdic.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ec.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ecdh.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ecdsa.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/engine.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/err.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/evp.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/fips.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/fips_rand.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/hmac.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/idea.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/krb5_asn.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/kssl.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/lhash.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/md2.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/md4.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/md5.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/obj_mac.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/objects.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ocsp.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/opensslconf.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/opensslv.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ossl_typ.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/pem.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/pem2.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/pkcs12.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/pkcs7.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/pq_compat.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/pqueue.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/rand.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/rc2.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/rc4.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ripemd.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/rsa.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/safestack.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/sha.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ssl.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ssl2.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ssl23.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ssl3.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/stack.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/store.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/symhacks.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/tls1.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/tmdiff.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/txt_db.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ui.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/ui_compat.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/x509.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/x509_vfy.h#2 edit ... //depot/openssl/0.9.8j/openssl/include/openssl/x509v3.h#2 edit
Just in case :
$ p4 describe -s 59700 59700 - no such changelist.
p4 fstat //depot/openssl/0.9.8j/openssl/include/openssl/bn.h@59702 ... depotFile //depot/openssl/0.9.8j/openssl/include/openssl/bn.h ... headAction edit ... headType symlink ... headTime 1237906419 ... headRev 2 ... headChange 59702 ... headModTime 1231329423
p4 print -q //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#2 | od -c 0000000
p4 print //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#1 //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#1 - add change 59574 (text)
p4 print //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#2 //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#2 - edit change 59702 (symlink)