On 15 Jan 2014, at 00:24, Pete Wyckoff <pw@xxxxxxxx> wrote: > pw@xxxxxxxx wrote on Mon, 13 Jan 2014 19:18 -0500: >> damien@xxxxxx 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. >> 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) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html