La détermination de la dernière liste de modifications synchronisé pour en Perforce
Une question que de temps en temps se pose est de savoir quelle est la meilleure façon de déterminer les modifications que vous avez synchronisé pour en Perforce. Cela est souvent nécessaire pour des choses comme l'injection de la liste de modifications numéro de révision info par la construction automatique du système.
p4 changes | head -1
semble plus facile que la plupart de ces solutions.
Vous devez vous connecter pour publier un commentaire.
Je recommande le contraire pour la construction automatique des systèmes: vous devez d'abord obtenir la dernière liste de modifications à partir du serveur à l'aide de:
puis de synchroniser de la variation et de l'enregistrer dans la révision info. La raison est la suivante. Bien que Perforce recommande ce qui suit pour déterminer la liste de modifications pour qui l'espace de travail est synchronisé:
ils notent quelques pièges:
et il ya un supplément de gotcha qu'ils ne mentionnent pas:
Si vous devez synchroniser premier et enregistrement plus tard, Perforce recommande d'exécuter la commande suivante pour déterminer si vous avez été mordu par le dessus de pièges; elle devrait indiquer que rien n'a été synchronisé ou supprimé:
#have
au lieu de@clientname
, ce qui vous évite d'avoir à chercher votre client nom d'espace de travail.Juste pour répondre à moi-même en accord avec Jeff suggestion de l'utilisation de Stackoverflow comme un endroit pour garder les techniques des extraits....
À partir de la ligne de commande utilisation:
Et il suffit de les remplacer par le nom de votre client spec. Cela permettra de produire une sortie de la forme:
Qui est facilement analysée pour en extraire la liste nombre de.
Vous pouvez essayer de trouver le maximum le nombre de changement dans la sortie de la "p4 fichiers de la commande". Le répertoire de travail ne doit pas contenir de post-synchronisation s'engage, si. C'est juste un peu mieux que
que ce dernier semble s'exécuter sur le serveur et peut échouer sur une grande source d'arbres en raison de la "MaxResults" les limites.
où p4lastchange.py est basé sur le code de la À l'aide de P4G.py à Partir de la Ligne de Commande présentation par J. T. Goldstone, Kodak Réseau d'Information/Ofoto, le 15 avril 2005.
Vous pouvez également utiliser la cstat commande:
p4 aider cstat
p4 changes -m1 @clientname
qui est le "recommandé" façon de faire pour mon client prend environ 10 minutesc'est ce que j'utilise:
pour le même client prend 2,1 secondes
p4 changes -m1 @clientname
courir à l'infini...p4 cstat ...#have | grep change | awk '$3 > x { x = $3 };END { print x }'
fonctionne vraiment! Merci!Si vous utilisez P4V vous pouvez le faire graphiquement:
Pour une grave construire (celui qui est en cours de préparation pour les tests), spécifier explicitement le label désiré ou modifications en nombre, de synchronisation de l'étiquette, et de l'intégrer dans construire des artefacts.
Si une liste de modifications (ou l'étiquette) n'est pas donné, utilisez
p4 counter change
pour obtenir le courant modifier le nombre, et de les enregistrer. Mais vous avez encore besoin de tout synchroniser à l'aide que le nombre de changement.Je ne pense pas que vous pouvez obtenir exactement ce que vous voulez, parce qu'en général, la totalité d'un espace de travail n'est pas synchronisé à une liste numéro. On peut explicitement la synchronisation des fichiers sur d'anciennes révisions, et puis une seule liste nombre est dénuée de sens. C'est pourquoi une nouvelle
sync
est nécessaire pour s'assurer qu'une seule liste nombre représente exactement la version du code.Concernant les commentaires: Oui, ma réponse est prévu pour l'utilisation de la configuration des gestionnaires de la préparation d'un build pour le donner à l'assurance de la qualité. Nos développeurs n'ont pas l'habitude de synchronisation dans le cadre d'une construction; ils faire un build avant de soumettre afin qu'ils puissent s'assurer que leurs modifications de ne pas briser la construction ou de tests. Dans ce contexte, nous n'avons pas pris la peine d'intégrer un référentiel label.
Avec votre approche, vous êtes en faisant l'hypothèse que l'ensemble de votre espace de travail a été synchronisé à la tête au moment de votre dernière liste de modifications de la soumission, et que les modifications inclus tous vos fichiers ouverts. C'est trop facile de se tromper dans ces hypothèses, difficile à détecter, et horriblement coûteux en termes de temps perdu. D'autre part, la résolution du problème est facile, sans les inconvénients. Et parce qu'une liste de modifications nombre peut être spécifié explicitement, il n'a pas d'importance ce que la révision dont vous avez besoin ou comment rapidement le code de base est en train de changer.
Pour l'ensemble du dépôt (non seulement votre espace de travail/client)
fait le travail, juste raconter la dernière liste de modifications.
Le meilleur que j'ai trouvé pour l'instant est de faire synchroniser votre liste de modifications à tout ce que vous voulez construire et puis les changements d'utilisation -m1 //...#obtenir la liste de modifications (révision).
p4 de synchronisation @CHANGELIST_NUM
p4 changements -m1 //...#et | awk '{print $2}'
Vous donne la liste nombre que vous pouvez l'utiliser partout où vous voulez. Je suis actuellement à la recherche d'un moyen plus simple que de p4 changements -m1 //...#ont.
Je ne suis pas sûr si vous avez la réponse dont vous avez besoin, mais j'ai eu un problème similaire. L'objectif était d'écrire dans notre enregistreur de la version spécifique du projet. Le problème était que, alors que nous faisons notre propre makefile, l'ensemble du système est contrôlé par notre gestion de la configuration. Cela signifie que toutes les solutions qui disent "sync à quelque chose de faire quelque chose" n'est pas vraiment le travail, et je n'ai pas envie de changer manuellement la version à chaque fois que nous nous engageons (source d'erreurs).
La solution (qui est en fait allusion dans la réponse ci-dessus) est-ce:
dans notre makefile, je ne p4 changements -m1 "./...#avoir"
Le résultat de ce Changement est change_number sur date par l'utilisateur@client 'msg'
Il suffit de créer le message dans une chaîne de caractères qui est imprimé par l'enregistreur de données (le nombre de changement est l'élément important, mais l'autre est aussi utile pour décider rapidement si une certaine version contient les modifications que vous savez que vous avez fait vous-même sans aller forcément à vérifier).
Espérons que cette aide.