J'ai un bug qui est présent dans un changeset mais pas son parent. Y a-t-il des fonctionnalités dans mercurial où je peux "mettre à jour" en plus petits incréments, pour voir où le problème commence? Par exemple, si le diff est un changement dans les fonctions A, B et C, j'exécuterai la suite de tests après avoir effectué chacun de ces changements, pour essayer de diagnostiquer le problème.Hg: Mise à jour sur un niveau ligne par ligne?
Répondre
Vous pouvez utiliser hg diff -r firstrev -r secondrev
et filtrer la sortie uniquement sur les bits concernant ces fonctions, puis parcourir les correctifs un par un.
Ou vous pouvez utiliser l'extension bisectée, conçue à cet effet - bien qu'elle vous donne toutes les modifications apportées à votre base de code, pas seulement celles concernant une fonction particulière. Vous pouvez améliorer ceci en n'extrayant que les révolutions en changeant votre fonction et en faisant une recherche de bissection de ces révisions seulement.
La réponse est: cela dépend du travail manuel que vous êtes prêt à mettre en
Qu'est-ce que vous pouvez faire est retrousser vos manches et utiliser l'extension du grenier en mode interactif.. Si vous utilisez TortoiseHg, vous l'avez déjà, exécutez simplement hgtk shelve
et il vous permet de déplacer les modifications autour d'un gros différentiel à la fois. (un morceau étant un ensemble de différences de ligne contiguës)
Il existe de nombreux autres outils de correction de diff qui vous donneront une résolution mono-morceau. Faites-moi savoir si vous avez besoin de plus de détails. Et juste pour le plaisir, parlons de la façon dont une solution automatisée comme bisect
n'est pas possible, car il n'est pas toujours logique que la moitié d'un ensemble de modifications doive encore compiler. Pire encore, que se passe-t-il s'ils compilent, mais ont des erreurs de logique? Voici un scénario simple pire des cas ...
void main(){
Foo *x = malloc(128);
frobFoo(&x);
- free(x); //line 4 removed in changeset
}
void frobFoo(Foo ** x){
+ free(*x); //line 8 added in changeset
}
- 1. Mise à jour SQL par ligne
- 2. Mise à jour Ligne
- 3. automatique de mise à niveau en ligne
- 4. Ligne de mise à jour AspxGridview Valeur par défaut
- 5. mise à jour colonne par numéro de ligne
- 6. DataGridView décale la ligne sur la mise à jour
- 7. Mise à niveau: avec le paramètre sur un lien vers une ligne dans Rails 3
- 8. Mise à jour Mercurial HG terminée avec l'état 255
- 9. Comment mettre à jour le style de ligne sur la mise à jour AJAX?
- 10. Mise à jour d'une ligne avec t-sql
- 11. UITableView mise à jour via JSON, animation Insertion de ligne
- 12. Comment puis-je faire référence à la ligne actuellement mise à jour par la mise à jour?
- 13. de mise à jour de la syntaxe de la ligne
- 14. ligne de mise à jour mysql si elle existe
- 15. Sql Server 2005 - Insérer un déclencheur de mise à jour - Mettre à jour, insérer la ligne
- 16. Scinder xmlhttp.responseText ligne par ligne?
- 17. mise à jour des totaux de ligne sur un bon de commande avec jquery
- 18. Mise à jour de HG pour résoudre le problème
- 19. ligne de mise à jour d'erreur dans le tableau postgres
- 20. bat lire un fichier ligne par ligne
- 21. ligne de mise à jour lorsque la ligne correspondante existe dans une autre table
- 22. Mise à jour automatique de la ligne MySQL au changement
- 23. MySql Query Browser Mise à jour du numéro de ligne
- 24. multiples mise à jour de ligne dans nhibenrate
- 25. PSQL mise à jour de ligne en utilisant NEW statment
- 26. ligne mise à jour de problème dans Gridview BOUND combobox
- 27. Le vidage mysql s'arrête lorsqu'une ligne est mise à jour
- 28. mettre à jour une table dans db2 ligne par ligne à partir de .net
- 29. Cadre de mise à niveau/mise à jour d'application mobile
- 30. table design pour soutenir une ligne par jour par employé
Bisect a été abattu en bas que son niveau changeset seulement, mais je vais souligner que beaucoup de petits commits sont préférés à moins, plus engage exactement parce que les choses comme sécable (et fusionne en général) sont plus difficiles avec des changesets plus grands. –