SORU
22 Mart 2010, PAZARTESİ


Nasıl Subversion listesini almak için commit yazar adları?

Etkili bir yöntem için eşsiz bir listesi belirli bir kaynak yolu bir bütün olarak, ya da SVN deposuna yazarlar için taahhüt almak için arıyorum. Ben fırsatım olmadı bul bir SVN komut için özel olarak, bu (bekleme) ama ben umut olabilir bir iyi bir yol olan ne denedim şimdiye kadar Terminal (OS X):

svn log --quiet | grep "^r" | awk '{print $3}'

svn log --quiet --xml | grep author | sed -E "s:</?author>::g"

Bu da beni her satıra bir tane yazar ismi verir, ama her ikisi de ekstra bilgi adil bir miktar filtreleyerek gerektirir. Onlar da aynı yazarın adı çoğaltır kolu yok, birkaç yazar tarafından işleyen bir çok fazlalık ton tel üzerinden akan var. Daha sık değil, sadece benzersiz bir yazar adlarını görmek istiyorum. (Bu aslındaolabilirbu vesileyle her yazar için geçerli tamamlama anlaması için kullanışlı olabilir, ama bu durumda bile, eğer toplanan veriler yerine gönderilen genelinde olsaydı daha iyi olurdu.)

Ben genellikle çalışma ile yalnızca istemci erişim, svnadmin komutlar daha az yararlı, ama gerekirse, olabilir sorma fırsatım özel bir iyilik depo yönetim eğer kesinlikle gerekli ya da çok daha verimli. Birlikte çalıştığım depoları işleyen binlerce ve birçok aktif kullanıcılar onlarca var, ve kimseye rahatsızlık vermek istemiyorum.

CEVAP
22 Mart 2010, PAZARTESİ


Çiftleri elemek için, çıktı alıp üzerinden boru: sort | uniq. Böylece:

svn log --quiet | grep "^r" | awk '{print $3}' | sort | uniq

Ben bu dediğini yapmanın yolu ise sürpriz kalibresinde değil. Unıx araçları genellikle kullanıcı diğer araçlar ile süslü işleme ve analiz yapmak için bekliyoruz.

P. S. aklıma geldi, grep birleştirme ve awk...

svn log --quiet | awk '/^r/ {print $3}' | sort | uniq

P. P. S. Başına Kevin Reid...

svn log --quiet | awk '/^r/ {print $3}' | sort -u

P3.S. Kan başına, alan ayırıcı olarak boşluk yerine dikey çubuklar kullanarak, düzgün boşluk içeren adları işlemek için (ayrıca Python örnekleri güncellendi)...

svn log --quiet | awk -F ' \\\\|' '/^r/ {print $2}' | sort -u

Daha verimli bir Perl oyunu yapabilirsin. Perl o kadar iyi tanımıyorum, Python bunu yapıyoruz diye:

#!/usr/bin/env python
import sys
authors = set()
for line in sys.stdin:
    if line[0] == 'r':
        authors.add(line.split('|')[1].strip())
for author in sorted(authors):
    print(author)

Ya da, eğer sayıları istiyorsan:

#!/usr/bin/env python
from __future__ import print_function # Python 2.6/2.7
import sys
authors = {}
for line in sys.stdin:
    if line[0] != 'r':
        continue
    author = line.split('|')[1].strip()
    authors.setdefault(author, 0)
    authors[author]  = 1
for author in sorted(authors):
    print(author, authors[author])

Sonra kaçarsın:

svn log --quiet | ./authorfilter.py

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damian Winter

    Damian Winte

    27 ŞUBAT 2007
  • talkandroid

    talkandroid

    27 Mayıs 2010
  • trickycharms

    trickycharms

    6 Aralık 2013