Я тут захотел узнать, когда я работаю (программирую), а когда нет. Лучший
способ -- посмотреть логи коммитов в git. Написал тупой скрипт для
экспорта лога в формат iCalendar (его понимают iCal, Outlook, Google
Calendar и другие). Решил поделиться, вдруг кому-то понадобится.
Вот пример работы (в iCal), лог Memoires за июль:
http://i36.tinypic.com/hrztop.png
(не подумайте, что я халявлю -- тут не отображен лог секретного проекта.
В июле я очень много программировал. Зато весь апрель оказался пустым :)
Использовать скрипт надо так: зайти в рабочую папку с
репозиторием git, и набрать, например:
log2calendar.rb > ~/Desktop/myproject.ics
После этого можете открывать myproject.ics в вашей любимой
программке-календаре.
(не забудьте chmod +x log2calendar.rb или запускайте вот так:
ruby log2calendar.rb
Файл, естественно, должен быть в PATH, или указывайте полный путь.)
Скрипт:
============= log2calendar.rb ===========<<<< отрежте меня <=====
#!/usr/bin/env ruby
#
# Git log to iCalendar
#
# Written by Dmitry Chestnykh, 5 Aug 2008
# Public domain
#
# Usage:
#
# cd git-repo
# log2icalendar.rb > outfile.ics
#
require 'date'
puts "BEGIN:VCALENDAR"
puts "VERSION:2.0"
puts "PRODID:-//hacksw/handcal//NONSGML v1.0//EN"
event_started = false
IO.popen("git log","r").each do |line|
if line =~ /Date:/
date_str = line.scan(/Date:(.*)/)[0][0]
date = DateTime.parse(date_str, '%a %-d %b %Y %T %z')
# print event
puts "\nEND:VEVENT" if event_started
event_started = true
puts "BEGIN:VEVENT"
puts "DTSTART:" + date.strftime("%Y%m%dT%H%M%S")
puts "DTEND:" + date.strftime("%Y%m%dT%H%M%S")
print "SUMMARY:"
elsif line =~ /[ ]{4}/ # commit message after 4 spaces
print line.strip.gsub(/([;,\\\\])/, '\\\\\\1')
end
end
puts "\nEND:VEVENT"
puts "END:VCALENDAR"
=================================<<<< откусите меня <<========
(Наверное кто-то уже что-то такое писал... Или может быть там есть что-то
такое встроенное? В любом случае, скрипт тупой, написан за 10 минут (5 из
которых ушли на чтение спецификации формата, остальное время - на
вспоминание ruby и regex), и не использует классную штуку git log
--pretty=format:форматтт. Зато работает :)
- Dmitry Chestnykh