2015-09-16 11 views
6

Depodan sonra hangi hesapların depolanmasından sonra herhangi bir hesaplama gerektirmeyen bir ölçüm kullanarak en son etkin olan bazı metrikler almak istiyorum. Bu nedenle, son işlemlerin sayısının en son değiştirildiği. Bir dosyanın yaşını, gitme koşullarına göre getir

Yani sahip Fikir böylece:

file_list = subprocess.Popen(['git', 'ls-files']) 
(files, _) = proc.communicate() 

missing_ages = files 
ages = {f: -1 for f in old_ages} 

commits_proc = subprocess.Popen(['git', 'ref-list', '--all', '--pretty=format:""']) 
(commits, _) = commits_proc.communicate() 
age = 0 

for commit_sha in [s.split(' ')[1] for s in commits] 
    commit_list = subprocess.Popen('some', 'git', 'command') 
    commit_files = commit_list.communicate() 

    for file in commit_files 
     if file in missing_ages 
      ages[file] = age 
      missing_ages.remove(file) 
    age += 1 

İhtiyacım olan işlemek verilen kendi sha dosyaların listesini almak için olmayan bir porselen git komuttur. Bir taahhüt dosyaları değişiklikleri listelemek mümkün, ama kararlı değil

+0

Tüm dosya ağacı başvuruda bulunmuyor mu? Bir dosyanın değiştirilip değiştirilmediğini belirlemek için bitişik varlıklar fark etmeniz gerekir, –

+0

Bu doğrudur, ancak örneğin bir dosyada dosya değişikliklerini listeleyebilen 'git show --stat ' vardır. Kararlı ve ayrıca ayrıştırmak yerine daha fazla bilgi içerir – EdJoJob

+1

'git show' basitçe ebeveyn (ler) ine karşı bir farklılığı (birden fazla ebeveyn ile birleştiğinde kombine fark) yapar. Değişiklikleri tespit etmek için aynı şeyi yapmalısınız (belki sizin için git yapmalısınız, ör., Git diff-tree - ad durumu). – torek

cevap

0

git show --stat <commitish>,

O --porcelain seçeneği ile, stabil olabilir:

Kullanım özel komut satırı tüketimi için tasarlanmış çizgi tabanlı biçim .
Eklenen/kaldırılan/değişmeyen çalışmalar, satırın başına ve satırın sonuna kadar uzanan bir +/-/ karakteriyle başlayan, normal birleşik diff biçiminde yazdırılır.
Girdi içindeki yeni satırlar, kendi başına bir satırda ~ ile temsil edilir.

Yine de bazı ayrıştırma yapmak gerekir.

0

Son çözüm, git diff-tree -z --name-only --no-commit-id -r <sha> kullanmaktı.

Kaynak: soruya şunu eklemek için asker EdJoJob had edited the question sorusu.