Re: git-p4: exception when cloning a perforce repository
flat view
From: Pete Wyckoff <hidden>
Date: 2016-06-15 22:59:40
damien@iwi.me wrote on Thu, 16 Jan 2014 14:46 +0100:
On 16 Jan 2014, at 14:08, Pete Wyckoff [off-list ref] wrote:quoted
damien@iwi.me wrote on Wed, 15 Jan 2014 09:56 +0100:quoted
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)That's interesting. When I do the equivalent "p4 print" commands it shows something like this. arf-git-test$ p4 fstat //depot/bn.h ... depotFile //depot/bn.h ... clientFile /dev/shm/trash directory.t9802-git-p4-filetype/cli/bn.h ... isMapped ... headAction edit ... headType symlink ... headTime 1389876870 ... headRev 2 ... headChange 8 ... headModTime 1389876870 ... haveRev 2 arf-git-test$ p4 print //depot/bn.h#1 //depot/bn.h#1 - add change 7 (text) file-text arf-git-test$ p4 print //depot/bn.h#2 //depot/bn.h#2 - edit change 8 (symlink) /elsewhere/bn.h I don't know how you manage to get a symlink with an empty destination like that. I'll work on a way to hack around this failure. In the mean time, if you're game, it might be fun to see what p4 does with such a repository. You could make a client for just that little subdir, check out at 59702 and see what is there: mkdir testmess cd testmess cat <<EOF | p4 client -i Client: testmess Description: testmess Root: $(pwd) View: //depot/openssl/0.9.8j/openssl/include/openssl/... //testmess/... EOF then take a look at how p4 represents the "empty" symlink in the filesystem: p4 sync @59702 ls -la bn.hI’ve tried exactly your commands, and I’ve got an empty folder.. {14:38}~/p4/testmess ➭ p4 sync @59702 //depot/openssl/0.9.8j/openssl/include/openssl/aes.h#2 - refreshing /home/dgerard/p4/testmess/aes.h //depot/openssl/0.9.8j/openssl/include/openssl/asn1.h#2 - refreshing /home/dgerard/p4/testmess/asn1.h //depot/openssl/0.9.8j/openssl/include/openssl/asn1_mac.h#2 - refreshing /home/dgerard/p4/testmess/asn1_mac.h //depot/openssl/0.9.8j/openssl/include/openssl/asn1t.h#2 - refreshing /home/dgerard/p4/testmess/asn1t.h //depot/openssl/0.9.8j/openssl/include/openssl/bio.h#2 - refreshing /home/dgerard/p4/testmess/bio.h //depot/openssl/0.9.8j/openssl/include/openssl/blowfish.h#2 - refreshing /home/dgerard/p4/testmess/blowfish.h //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#2 - refreshing /home/dgerard/p4/testmess/bn.h //depot/openssl/0.9.8j/openssl/include/openssl/buffer.h#2 - refreshing /home/dgerard/p4/testmess/buffer.h […] {14:39}~/p4/testmess ➭ ls -la total 12 drwxr-xr-x 2 dgerard dgerard 4096 janv. 16 14:37 . drwxr-xr-x 4 dgerard dgerard 4096 janv. 16 14:34 .. -rw-r--r-- 1 dgerard dgerard 93 janv. 16 14:37 .perforce Then I tried to sync the previous changeset, which is ok : {14:44}~/p4/testmess ➭ p4 sync -f @59701 //depot/openssl/0.9.8j/openssl/include/openssl/aes.h#1 - updating /home/dgerard/p4/testmess/aes.h […] {14:44}~/p4/testmess ➭ l total 0 -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 aes.h -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 asn1.h -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 asn1_mac.h -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 asn1t.h -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 bio.h -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 blowfish.h -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 bn.h -r--r--r-- 1 dgerard dgerard 0 janv. 16 14:44 buffer.h […] However, when trying to sync to the appropriate changeset : {14:44}~/p4/testmess ➭ p4 sync -f @59702 //depot/openssl/0.9.8j/openssl/include/openssl/aes.h#2 - updating /home/dgerard/p4/testmess/aes.h rename: /home/dgerard/p4/testmess/aes.h: No such file or directory //depot/openssl/0.9.8j/openssl/include/openssl/asn1.h#2 - updating /home/dgerard/p4/testmess/asn1.h rename: /home/dgerard/p4/testmess/asn1.h: No such file or directory //depot/openssl/0.9.8j/openssl/include/openssl/asn1_mac.h#2 - updating /home/dgerard/p4/testmess/asn1_mac.h rename: /home/dgerard/p4/testmess/asn1_mac.h: No such file or directory //depot/openssl/0.9.8j/openssl/include/openssl/asn1t.h#2 - updating /home/dgerard/p4/testmess/asn1t.h rename: /home/dgerard/p4/testmess/asn1t.h: No such file or directory //depot/openssl/0.9.8j/openssl/include/openssl/bio.h#2 - updating /home/dgerard/p4/testmess/bio.h rename: /home/dgerard/p4/testmess/bio.h: No such file or directory //depot/openssl/0.9.8j/openssl/include/openssl/blowfish.h#2 - updating /home/dgerard/p4/testmess/blowfish.h rename: /home/dgerard/p4/testmess/blowfish.h: No such file or directory //depot/openssl/0.9.8j/openssl/include/openssl/bn.h#2 - updating /home/dgerard/p4/testmess/bn.h rename: /home/dgerard/p4/testmess/bn.h: No such file or directory And the folder remains untouched. Quite strange for me...
Oh cool, that helps a lot. P4 is just broken here, so we can get away with being a bit sloppy in git. I'll try just pretending "empty symlinks" are not in the repo. Hopefully you'll have a future commit in your p4 repo that brings back bn.h properly. Still not sure about how I'll test this. Thanks, -- Pete