2010-04-27 2 views
0

J'essaie d'utiliser git-p4 pour cloner un dépôt perforce. Je continue de rencontrer un problème dans le script git-p4, où git-p4 essaie d'accéder à une clé dict qui n'est pas définie et lance une trace.La synchronisation git-p4 ne fonctionne pas - trace de pile mystérieuse

[~/p4/[email protected]] (master) $ 
git p4 sync --verbose --use-client-spec //depot/prod/ 
Reading pipe: git config git-p4.user 
Reading pipe: git config git-p4.password 
Reading pipe: git config git-p4.port 
Reading pipe: git config git-p4.host 
Reading pipe: git config git-p4.client 
p4 -u mkramer -c mkramer -G client -o 
Opening pipe: p4 -u mkramer -c mkramer -G client -o 
None 
Doing initial import of //depot/prod/ from revision #head into refs/remotes/p4/master 
p4 -u mkramer -c mkramer -G files //depot/prod/...#head 
Opening pipe: p4 -u mkramer -c mkramer -G files //depot/prod/...#head 
commit into refs/remotes/p4/master 
p4 -u mkramer -c mkramer -G -x - print 
Opening pipe: p4 -u mkramer -c mkramer -G -x - print 
p4 -u mkramer -c mkramer -G users 
Opening pipe: p4 -u mkramer -c mkramer -G users 
Traceback (most recent call last): 
    File "/home/mkramer/git/bin/git-p4", line 1922, in <module> 
    main() 
    File "/home/mkramer/git/bin/git-p4", line 1917, in main 
    if not cmd.run(args): 
    File "/home/mkramer/git/bin/git-p4", line 1651, in run 
    self.importHeadRevision(revision) 
    File "/home/mkramer/git/bin/git-p4", line 1461, in importHeadRevision 
    self.commit(details, self.extractFilesFromCommit(details), self.branch, self.depotPaths) 
    File "/home/mkramer/git/bin/git-p4", line 1063, in commit 
    data = file['data'] 
KeyError: 'data' 

Je suis entré dans le script et imprimé le fichier dict juste à ce moment-là et a obtenu quelques détails que je vais réviser l'anonymat pour plus de clarté &. La dict défectueuse ressemblait à ceci:

{'action': 'move/delete', 'path': '//depot/prod/foo/bar', 'rev': '3', 'type': 'xtext'} 

Mon client p4 ressemble à ceci:

Client: mkramer 
Update: 2010/04/27 14:46:10 
Access: 2010/04/27 14:51:29 

Owner: mkramer 
Description: 
     Created by mkramer. 
Root: z:\p4 
AltRoots: 
     z:\p4 
     /home/mkramer/p4 
Options:  noallwrite noclobber nocompress unlocked nomodtime normdir 
SubmitOptions: submitunchanged 
LineEnd:  share 
View: 

     //depot/prod/... //mkramer/prod/... 
     -//depot/.../foo/... //mkramer/.../foo/... 

Comme vous pouvez le voir, le dict défectueux est un fichier qui n'existe pas à mon avis client. Je crois que c'est la source du problème. Cependant, je cours clairement la commande avec --use-client-spec. J'ai aussi essayé git config git-p4.useclientspec true La sortie verbeuse fait ressembler à ça tire mon avis sur

Opening pipe: p4 -u mkramer -c mkramer -G client -o. 

Si je cours p4 -u mkramer -c mkramer client -o je vois la vue correcte.

Si je cours p4 -u mkramer -c mkramer files //depot/prod/...#head, je vois des fichiers qui ne sont pas à mon avis.

Versions de mon logiciel:

[~/p4/[email protected]] (master) $ p4 -V 
Perforce - The Fast Software Configuration Management System. 
Copyright 1995-2009 Perforce Software. All rights reserved. 
Rev. P4/LINUX26X86_64/2009.1/205670 (2009/06/29). 
[~/p4/[email protected]] (master) $ git --version 
git version 1.7.0.5 
[~/p4/[email protected]] (master) $ python -V 
Python 2.6.5 
+0

Mise à jour avec plus d'informations – masonk

Répondre

3

Nous venons de nous-mêmes couru dans. P4 semble avoir ajouté quelques nouvelles commandes l'année dernière que git-p4 ne supporte pas complètement; en particulier "déplacer/supprimer" et "déplacer/ajouter".

Pour contourner le problème, nous avons changé la ligne:

if file["action"] in ("delete", "purge"): 

à:

if file["action"] in ("delete", "purge", "move/delete"): 

Jusqu'à présent, ce travaille pour nous, mais je ne vais pas affirmer que ce nécessairement une solution robuste.

+0

Vous êtes l'homme! J'avais abandonné ça. Je vous remercie! – masonk

Questions connexes