2010-10-21 6 views
1

ATM je le fais de cette façon qui est loin lente et incorrecte:Mercurial: Comment trouver le créateur d'un fichier?

for i in `find -type f`; do 
    echo $i`LANG=C hg log -v $i | grep user | tail -1 | awk '{print " "; print $2}'`; 
done 

Quand quelqu'un a déplacé un fichier à un nouveau nom, oui, il est le créateur de ce nouveau fichier, mais pas du code qu'il déplacé. Je pourrais extraire le numéro de révision de la première validation et vérifier en quelque sorte si ce fichier a été renommé .. (semble très complexe)

Je veux juste le savoir, pour une raison :), puisque nous n'avons pas de propriétaire de code dans notre projet, peu importe quand même ... :)

+0

a été le renommage/déplacement enregistré par Mercurial comme un renommer/copier/déplacer ou comme l'ajout d'un nouveau fichier? –

+0

Je ne peux pas assurer et espère que chaque développeur utilisera "hg mv" – math

Répondre

3

Si vous utilisez une nouvelle version de ish hg, vous pouvez utiliser revsets pour faire de ce super-facile:

hg log -r 'adds(\"path/to/file\")' 

(vous pourriez avoir à changer l'échappement de cela, selon votre shell

La fonction adds trouve les changesets où le fichier donné a été ajouté. Il y a un tas d'autres fonctions; Voir revsets ou hg help revsets pour plus d'informations.

+0

Excelent !, Je viens de créer un backport mercurial pour ça: D, super. – math

+0

Mais si je le vois correctement, même quand hv mv a été utilisé, le suivi se termine lorsque le fichier a été renommé :(Malheureusement, je n'ai pas trouvé de meilleure fonction, ajoute, mais la ligne de commande est beaucoup plus facile que la mienne. – math

0

Vous pouvez faire les choses un peu plus efficace en changeant votre commande hg log à:

hg log -r : -l 1 $i --template "{files} {author} {rev}\n" 

le -r : inverse l'ordre de la sortie du journal et la -l 1 montre juste la première entrée dans le journal; ensemble, ils montrent la première révision de n'importe quel nom de fichier dans $i. Le commutateur --template personnalise la sortie, dans ce cas, je montre le nom du fichier, l'auteur et la révision où le fichier a été introduit. Voir hg help templating pour plus d'informations.

Une autre optimisation consisterait à utiliser la sortie de hg manifest acheminée via xargs; find -type f renverra tous les fichiers, donc si vous avez des fichiers objets ou d'autres fichiers non traités dans le répertoire de travail, vous exécuterez hg log sur eux inutilement. Malheureusement, cela ne vous aidera pas à trouver où les gens ont copié des fichiers sans en parler à Mercurial.

+0

L'ajout de '-f' fera que Mercurial suivra l'historique à travers les renames. –

0

Si vous avez seulement besoin d'informations sur l'auteur que vous pouvez faire

hg log -r 'first(file("path/to/file"))' --template '{author}\n' 

comme je l'ai été suggéré par krigstask dans #mercurial

9 secondes plus rapide aussi :)

Questions connexes