Mercurial - tous les fichiers qui ont changé dans un changeset?

98

Comment pouvez-vous déterminer tous les fichiers qui ont changé dans un ensemble de modifications donné?

Je ne cherche pas un diff dans ce cas, juste une liste d'ajout / suppression / modifications.

hg log -vprX fait une liste de diffs mais je veux juste les fichiers.

Marcus Léon
la source
Possible duplicata de Examining a single changeset in Mercurial
Michał Wróbel

Réponses:

150

Si vous souhaitez lister uniquement les fichiers qui ont été modifiés, vous devez utiliser la "commande d'état". Ce qui suit répertorie les modifications apportées aux fichiers de la révision REV

hg status --change REV
pyfunc
la source
14
+1, mais l'OP veut probablement aussi le drapeau -n/ --no-status.
Niall C.
7
Pour une copie facile:hg status --no-status --change REV
zastrowm
+1 C'est tellement plus facile à taper que hg status --rev REV~1:REVce que j'avais l'habitude de faire.
Patrick Oscity
3
utilisation '.' pour la REV actuelle. signification -hg status --change .
zaxy78
16

Retirez simplement pde votre hg log -vpraffichage la liste des fichiers. -psignifie montrer patch. Vous pouvez également utiliser un modèle pour formater la sortie à votre goût.

Geoffrey Zheng
la source
3
Je pense que vous aurez besoin du modèle suivant: --template 'files: {files} \ n'
Ton Plomp
1
Je crois que les {fichiers} font partie du modèle par défaut du drapeau -v
eskhool
2
hg log -r. --template '{join (files, "\ n")}' pour séparer les fichiers par une nouvelle ligne
Foxichu
1
Le commentaire @Foxichu a fonctionné pour moi, mais était un peu hacky. en fait la réponse supérieure - hg status --change .a mieux fonctionné et a donné un préfixe d'action de fichier (A \ M \ D, etc.) et un meilleur chemin relatif
zaxy78
13

Je sais que la question concerne un seul ensemble de modifications, mais si vous souhaitez modifier tous les fichiers pour une plage de jeux de modifications, vous pouvez le faire

hg status --rev 1 --rev 10 -m
Nick DeVore
la source
2
Terrible mauvais. Les fichiers modifiés dans la plage sont hg log -r BEGIN:END --template "{files}\n"comme @ geoffrey-zheng et @ton l'ont écrit il y
Lazy Badger
Désolé pour ça. Supposons que leur réponse concernait le seul changeset.
Nick DeVore
1
À mon avis, cette réponse n'est pas si terrible. hg status --rev BEGIN --rev ENDest: 1. beaucoup plus facile à retenir que hg log -r BEGIN:END --template "{files}\n"; 2. il imprime les fichiers sur des lignes séparées sans utiliser sed(@Eric Lawler) ou join()(@Foxichu); 3. sans le -mdrapeau, il affiche non seulement les fichiers modifiés, mais également ajoutés et supprimés (la belle coloration standard s'applique ici aussi); 4. il existe -aet des -rindicateurs qui permettent un filtrage différent; 5. si l'on ne veut pas du préfixe de statut, il y a une -noption qui le supprime.
Michał Wróbel
9

Révision validée actuelle

hg status --change .

.est un raccourci pour la version actuelle, tout comme @HEADdans Git

Révision non validée actuelle

hg status

Révision arbitraire validée

hg status --change REV_ID
Gibolt
la source
1
réponse la plus simple et la plus précise!
zaxy78
2

J'ai trouvé cette question sur Google pour un concept similaire. Pour afficher tous les fichiers qui ont été modifiés via une gamme de jeux de modifications, c'est aussi simple que:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"vous montrera une liste de chaque fichier modifié ou ajouté dans chaque changeset, de [start rev] à [end rev], avec les fichiers de chaque changeset sur une nouvelle ligne. Échangez {file_mods}{file_adds}avec {files}pour afficher tous les fichiers modifiés, ajoutés ou supprimés.
  2. sed -e 's/ /\n/g' divisera tous les fichiers pour les afficher sur des lignes séparées et
  3. sort va, euh, trier la liste pour vous afin que nous puissions filtrer la liste avec uniq
  4. uniq filtrera la liste pour supprimer les doublons - les fichiers qui ont changé dans plus d'une révision.
Éric L.
la source
Cette solution rassemble le dernier modifié avec le premier fichier ajouté. En outre, il ne traite pas correctement les espaces dans les noms de fichiers. Une --templatesolution basée sur ces inconvénients pourrait être construite en utilisant join()comme suggéré par @Foxichu.
Michał Wróbel
1

Je sais que cette question est une vieille question et je suis surpris que personne ne se soit contenté de proposer une forme de code modifiée OP. J'ai obtenu une liste de fichiers modifiés / ajoutés / supprimés (non étiquetés qui est quoi) en exécutant simplement hg log -v. Ou ce dont j'avais réellement besoin hg log -v -l5pour voir les fichiers qui ont été modifiés / ajoutés / supprimés dans les 5 derniers commits (y compris ceux que je n'ai pas encore poussés vers le dépôt).

Đorđe Relić
la source
"personne ne vient de proposer le formulaire de code modifié OP" - @Geoffrey Zheng a fait exactement cela ~ 1h après la publication de la question
Michał Wróbel
-2

Si vous êtes comme la plupart des magasins, vous utilisez un système de billetterie pour suivre les changements. Si vous connaissez le numéro de ticket et que vous souhaitez trouver tous les validations associées à ce ticket (en supposant que vous incluiez le numéro de ticket dans le message de validation), vous pouvez utiliser:

hg log -k TICKET_NUMBER

Cela affiche toutes les révisions associées au ticket. Cependant, il ne répertorie pas les fichiers. Vous pouvez utiliser l'une des réponses ci-dessus pour obtenir la liste des fichiers associés aux révisions.

Pour simplifier les choses, en combinant les informations des réponses précédentes, vous pouvez effectuer les opérations suivantes pour rechercher les validations, y compris les fichiers modifiés:

hg log -vk TICKET_NUMBER
iDimensionz
la source
Ceci est lié à la question. L'affiche a demandé comment obtenir des fichiers dans un ensemble de modifications. Les changesets sont souvent liés aux tickets. Ma solution montre comment obtenir des fichiers liés aux ensembles de modifications associés à un ticket.
iDimensionz du