2010-12-10 21 views
10

Comment puis-je voir tous svn logs que j'ai faits à une date spécifique?Obtenir svn log pour l'activité d'un utilisateur à une date spécifique

J'ai cherché sur le Web pour cela, mais je n'ai pas été en mesure de trouver une solution.

+0

Si vous êtes sous Windows, TortoiseSVN vous permet de filtrer la sortie du journal par (entre autres) le nom d'utilisateur.Si vous êtes sous Unix, je ne doute pas qu'il existe un moyen de préparer un script qui exécute 'svn log -rNNNNN' pour chaque numéro de révision dans' svn log -revision {startdate}: {enddate} | grep ajitam', bien que je sois trop faible dans les scripts shell pour le faire. – sbi

Répondre

19

Pour afficher les entrées pour le nom d'utilisateur le 10:

svn log -r '{2010-12-10}:{2010-12-11}'|sed -n '1p; 2,/^-/d; /username/,/^-/p' 

La commande SVN obtient commits dans cette plage de dates

Répartition de la commande sed:

  • -n - Ne pas imprimer automatiquement.
  • 1p - Imprime la première ligne (l'en-tête ---).
  • 2,/^-/d; - Supprimer tout de la seconde à la fermeture --- en-tête. Ceci supprime la première entrée, laquelle IIRC est la plus récente à partir de minuit au début de la journée (c'est-à-dire qu'elle n'est pas réellement dans la plage, et peut être longue dans le passé).
  • /username/,/^-/p - Imprimer tout à partir de ce nom d'utilisateur (une expression régulière correspondant à l'utilisateur qui vous intéresse) à la clôture --- tête (ce qui agit à plusieurs reprises)
+1

@pyfunc cela fonctionne pour moi. Le problème avec 'grep' est que vous obtenez seulement la première ligne de chaque journal – ajitam

+1

Qui a voté contre? Ça marche. Je le sais parce que je l'ai testé (avant de poster) et ajitam. Il peut nécessiter GNU sed. –

+0

@ajitam: C'est bon. Ma compréhension est basée sur ce que vous fournissez. Je suis sûr que vous ne vouliez pas de solution de coupe-biscuit. Puisque vous n'avez fourni aucun détail. J'ai compris que vous cherchez à trouver des commits à une date précise. C'est ce que j'ai fourni. Il suffit de construire à partir de là. Voir la réponse de AgentConundrum. En fournissant une réponse partielle, j'ai deux votes négatifs. Très drôle. La réponse de Matthew Flaschen n'a même pas fonctionné pour moi. Donc je suppose que le grep et le reste devraient être construits spécifiquement. La réponse d'AgentConundrum est plus générique et conforme à ce que j'avais suggéré. – pyfunc

4

En supposant que vous êtes sur un système Linux, vous pourriez faire quelque chose comme ceci:

svn log -r {YYYY-MM-DD}:{YYYY-MM-DD} | grep username | cut -d " " -f 1 | tail -n +2 | while read revision; do svn log -r $revision; done

ce que cela fait est en cours d'exécution svn log pour obtenir tous les journaux pour un jour donné, puis couper la sortie de sorte qu'il est juste une liste de numéros de révision. [Edit: Ajouté tail -n +2 pour couper la première révision - comme @Matthew mentionne, cette première ligne serait la révision la plus récente avant {that_day}] La boucle while parcourt ensuite chaque ligne de numéros de révision, la passant à svn log.

Aussi, rappelez-vous que {AAAA-MM-JJ} reportez-vous à minuit au début de ce jour-là, donc courir toute la journée, vous devez l'exécuter pour {that_day}:{the_following_day}.

Espérons que ça aide!

(également, désolé pour la confusion plus tôt au sujet --username. Je ne l'ai jamais utilisé auparavant, et parce que mon svn locale n'a qu'un seul utilisateur (moi), il regardé comme cela a fonctionné, quand il était vraiment pas .)

+0

Malheureusement, cela a le même problème de date que la réponse de pyfunc. Il comprend un commit * avant * 'that_day'. En outre, c'est un peu inefficace car chaque appel à svn log nécessite un processus, une connexion réseau et potentiellement une invite de mot de passe. –

+0

@Matthew: Merci d'avoir signalé le problème du "dernier commit avant". J'ai mis à jour ma solution. Vous avez tout à fait raison de dire que cela vous gâcherait sur un réseau ou avec des informations d'identification non mises en cache. – AgentConundrum

+0

@Agent, +1, merci pour la mise à jour. Vous avez raison de dire que malgré les problèmes de performances, il est plus lisible (surtout si l'on ne connaît pas sed). –

0

Si vous êtes sur linux, la meilleure solution pour obtenir ensemble les journaux de ce jour est la suivante:

svn log -r {start date}:{end date} -v | sed -n ‘/username/,/—–$/ p’ 

Si vous veut récupérer les journaux SVN sur la base du nom d'utilisateur et entre la plage de date donnée vous besoin d'utiliser svn log -r {startDate}:{endDate} qui est canalisé avec sed commande pour userna moi.

1
svn log --verbose --search user_name --revision {YYYY-MM-DD}:{YYYY-MM-DD} 

Travaux sur toute plate-forme