python ورقية كيف يمكنني رسم خطوط التاريخ رمز لريبو جيت؟




كيفية رسم طائرة ورقية (4)

قد تحصل على كل من الخطوط المضافة والمزالة مع سجل جيت، مثل:

git log --shortstat --reverse --pretty=oneline

من هذا، يمكنك كتابة نص مماثل لتلك التي قمت باستخدام هذه المعلومات. في الثعبان:

#!/usr/bin/python

"""
Display the per-commit size of the current git branch.
"""

import subprocess
import re
import sys

def main(argv):
  git = subprocess.Popen(["git", "log", "--shortstat", "--reverse",
                        "--pretty=oneline"], stdout=subprocess.PIPE)
  out, err = git.communicate()
  total_files, total_insertions, total_deletions = 0, 0, 0
  for line in out.split('\n'):
    if not line: continue
    if line[0] != ' ': 
      # This is a description line
      hash, desc = line.split(" ", 1)
    else:
      # This is a stat line
      data = re.findall(
        ' (\d+) files changed, (\d+) insertions\(\+\), (\d+) deletions\(-\)', 
        line)
      files, insertions, deletions = ( int(x) for x in data[0] )
      total_files += files
      total_insertions += insertions
      total_deletions += deletions
      print "%s: %d files, %d lines" % (hash, total_files,
                                        total_insertions - total_deletions)


if __name__ == '__main__':
  sys.exit(main(sys.argv))

أساسا أريد الحصول على عدد من خطوط من التعليمات البرمجية في مستودع بعد كل ارتكاب.

الطرق الوحيدة (حقا كربي) لقد وجدت هو استخدام git filter-branch لتشغيل wc -l * ، والنصي الذي يعمل git reset --hard على كل ارتكاب، ثم يعمل wc -l

لجعله أكثر وضوحا قليلا، عندما يتم تشغيل الأداة، فإنه سيتم إخراج خطوط التعليمات البرمجية من أول الالتزام الأول، ثم الثاني وهلم جرا. هذا هو ما أريد الأداة لإخراج (كمثال):

[email protected]:~/$ gitsloc --branch master
10
48
153
450
1734
1542

لقد لعبت في جميع أنحاء مع مكتبة روبي 'جيت'، ولكن الأقرب وجدت وجدت باستخدام طريقة .lines() على فرق، والذي يبدو أنه ينبغي أن تعطي خطوط المضافة (ولكن لا: فإنه يعود 0 عند حذف خطوط على سبيل المثال)

require 'rubygems'
require 'git'

total = 0
g = Git.open(working_dir = '/Users/dbr/Desktop/code_projects/tvdb_api')    

last = nil
g.log.each do |cur|
  diff = g.diff(last, cur)
  total = total + diff.lines
  puts total
  last = cur
end

أول شيء أن يقفز إلى الذهن هو إمكانية التاريخ جيت الخاص بك وجود تاريخ غير الخطية. قد تواجه صعوبة في تحديد تسلسل معقول من الالتزامات.

وقد قلت ذلك، يبدو أنك يمكن أن تبقي على سجل من المعرفات ارتكاب والخطوط المقابلة من التعليمات البرمجية في أن ارتكاب. في هوك بعد ارتكاب، بدءا من مراجعة هيد، والعمل إلى الوراء (المتفرعة لأولياء الأمور متعددة إذا لزم الأمر) حتى تصل جميع المسارات إلى ارتكاب كنت قد رأيت بالفعل من قبل. هذا يجب أن تعطيك إجمالي رموز التعليمات البرمجية لكل معرف ارتكاب.

هل هذا يساعد أي؟ لدي شعور بأنني أساء فهم شيء ما عن سؤالك.


قد تفكر أيضا في جيتستاتس ، الذي يولد هذا الرسم البياني كملف هتمل.






lines-of-code