10
votes

Obtenez le journal SVN pour une activité d'utilisateur à une date précise

Comment puis-je voir tous les journaux SVN que j'ai faits sur une date précise?

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

svn

1 commentaires

Si vous êtes sous Windows, Tortoisesvn vous permet de filtrer sa sortie de journal par nom d'utilisateur (entre autres). Si vous êtes sur UNIX, je n'ai aucun doute qu'il y a un moyen de faire fonctionner un script qui exécute svn journal -rnnnnn pour chaque numéro de révision dans SVN journal -revision {startdate}: { enddate} | grep ajitam , bien que je sois trop faible dans les scripts shell pour le faire.


4 Réponses :


19
votes

Pour afficher les entrées de nom d'utilisateur sur le 10ème:

svn log -r '{2010-12-10}:{2010-12-11}'|sed -n '1p; 2,/^-/d; /username/,/^-/p'
  • -n code> - ne pas imprimer automatiquement. LI>
  • 1p code> - Imprimez la première ligne (l'en-tête). LI>
  • 2, / ^ - / d; code> - retirez tout de la seconde à travers la fermeture de la fermeture. Cela supprime la première entrée, que l'IIRC est la plus récente commit de minuit au début de la journée (c'est-à-dire que cela n'est pas réellement dans la gamme et peut être longtemps dans le passé). Li>
  • / nom_utilisateur /, / ^ - / p code> - Imprimez tout à partir de ce nom d'utilisateur (une regex correspondant à l'utilisateur qui vous intéresse) à la fermeture ----en-tête (cela agit à plusieurs reprises) li> ul> p>

  • 7 commentaires

    @pyfunc ça marche pour moi. Problème avec 'grep' est que vous n'obtenez que la première ligne de chaque journal


    Qui a voté-voté? Ça marche. Je sais parce que je (avant de poster) et que Ajitam l'a testé. Cela peut nécessiter GNU SED.


    @ajitam: ça va. Ma compréhension est basée sur ce que vous fournissez. Je suis sûr que vous ne vouliez pas de solution de coupe de cookie. Depuis que vous n'avez fourni aucun détail. J'ai compris que vous cherchez à trouver des engagements à 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, je reçois deux votes négatifs. Très drôle. La réponse de Matthew Flaschen n'a même pas travaillé pour moi. Je suppose donc que le GREP et le repos devraient être spécialement construits. La réponse de l'agentConundrum est plus générique et de savoir ce que j'avais suggéré.


    @Matthew: FYI, votre solution fonctionne aussi pour moi (bien que le mien soit un peu plus facile à suivre - aucune infraction, bien sûr)


    @py, comment est-ce incorrect sur votre repo? J'utilise SVN 1.6.5 et GNU SED 4.2.1.


    Comme la question ne précise pas si la plate-forme est * Nix ou Windows, il ne s'agit pas d'une réponse correcte pour les utilisateurs Windows.


    Cela ne fait certainement pas «pas une réponse», @ozil. Depuis la question ne spécifie pas Spécifiez une plate-forme, une réponse GNU / UNIX est parfaitement valide et a évidemment été très utile au fil des ans. Si vous souhaitez poster une réponse Windows, n'hésitez pas à le faire.



    4
    votes

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

    svn log -r {AAAA-MM-JJ}: {AAAA-MM-JJ} | Nom d'utilisateur Grep | cut -d "" -f 1 | Tail -N +2 | tout en lisant la révision; SVN journal -r $ révision; fait

    Qu'est-ce que cela fait est d'exécuter le journal SVN pour obtenir tous les journaux pendant une journée donnée, puis couper la sortie de manière à ce qu'elle ne soit qu'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 plus récente révision avant {this_day} ] le tandis que la boucle itère alors sur chaque ligne de numéro de révision, en passant à log svn .

    Aussi, rappelez-vous que {AAAAY-MM-DD} se réfère à minuit au début de cette journée, afin de courir toute la journée, vous devez l'exécuter pour {{{ the_following_day} .

    espère que cela aide!

    (Aussi, désolé pour la confusion plus tôt au sujet -. Nom d'utilisateur Je ne l'ai jamais utilisé auparavant, et parce que mon svn locale n'a qu'un seul utilisateur (moi), il regardé < / em> comme ça a marché, quand il était vraiment pas.)


    5 commentaires

    Malheureusement, cela a le même numéro de date que la réponse de Pyfunc. Il comprend un commit avant que_day . En outre, il est quelque peu inefficace car chaque appel au journal SVN nécessite un processus, une connexion réseau et une invite potentielle.


    @Matthew: Merci d'avoir souligné le problème "Dernier commis avant". J'ai mis à jour ma solution. Vous êtes absolument correct que cela sucerait un réseau ou avec des informations d'identification incached.


    @Agent, +1, merci pour la mise à jour. Vous avez raison que malgré les problèmes de performance, il est plus lisible (surtout si l'on ne vous familiarise pas avec SED).


    @Matthew: Si c'était dans un script quelque part et que vous l'avez documenté, le vôtre est de loin supérieur à ce que la performance compte (par exemple, je ne voudrais pas courir cela contre le repo du projet SVN lui-même). Si c'est juste sur un réseau local et que vous ne tirez pas trop de révisions, le mien est «assez bon pour le travail gouvernemental».


    +1 Pour mentionner le début de la journée «Fonction» dans l'affichage du journal de Subversion.



    0
    votes

    Si vous êtes sur Linux, la meilleure solution pour obtenir des journaux de date entière est la suivante:

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


    0 commentaires

    1
    votes
    svn log --verbose --search user_name --revision {YYYY-MM-DD}:{YYYY-MM-DD}
    Works on any platform

    0 commentaires