Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
894
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как я могу построить график строк истории кода для git РЕПО?
В принципе, я хочу получить номер lines-of-code в репозитории после каждого коммита.
Единственный (действительно дерьмовый) способ, который я нашел, - это использовать git filter-branch для запуска wc -l * , а сценарий, который запускает git reset --hard на каждом коммите, затем запускает wc -l
Чтобы было немного понятнее, когда инструмент запускается, он выводит строки кода самого первого коммита, затем второго и так далее. Это то, что я хочу, чтобы инструмент вывел (в качестве примера):
me@something:~/$ gitsloc --branch master
10
48
153
450
1734
1542
Я поиграл с библиотекой ruby 'git', но ближе всего я нашел метод .lines() на diff, который, похоже, должен давать добавленные строки (но не дает: он возвращает 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
Вы можете получить как добавленные, так и удаленные строки с журналом git, например:
git log --shortstat --reverse --pretty=oneline
Исходя из этого, вы можете написать сценарий, аналогичный тому, который вы сделали, используя эту информацию. В python году:
#!/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 имеет нелинейную историю. У вас могут возникнуть трудности с определением разумной последовательности коммитов.
Сказав это, кажется, что вы можете хранить журнал идентификаторов фиксации и соответствующие строки кода в этом фиксаторе. В крюке после фиксации, начиная с версии HEAD, работайте в обратном направлении (ветвление до нескольких родителей, если это необходимо), пока все пути не достигнут фиксации, которую вы уже видели раньше. Это должно дать вам общее количество строк кода для каждого идентификатора фиксации.
Это хоть как-то помогает? У меня такое чувство, что я что-то неправильно понял в вашем вопросе.