webzer.net

I blog to God but the sky is buggy ...


Git log to spreadsheets

คือเป็นมนุษย์ประเภทที่ชอบลืมว่าตัวเองทำอะไรไปบ้างสำหรับแต่ละโปรเจ็คต์ ถ้าโปรเจ็คต์แบบเหมาจ่ายก็ไม่มีปัญหา แต่สำหรับงานต่อเนื่องที่ต้องคิดค่าแรงตามชั่วโมงเนี่ย เผอิญเป็นฟรีแลนซ์ทำงานอยู่บ้านเลยไม่ค่อยมีใครช่วยจำ ถ้าทำทีละโปรเจ็คต์ก็ยังพอนึกออกบ้าง แต่ถ้าหลายโปรเจ็คต์พร้อมกัน ปวดหัวน่าดู!

โชคดีที่มี git เป็นเพื่อน และโปรเจ็คต์ส่วนใหญ่ที่ทำ ใช้ git เป็น version control ก็เลยพิมพ์ลงใน terminal ตามนี้

git log --author=Sungsit --format='%ai,%cn,%s' >~/invoice-2012-02.csv

โชคร้ายนิดหน่อย บาง commit มี comma (,) อยู่ เวลา import เป็นไฟล์ spreadsheet เลยเพี้ยนเล็กน้อย พอดีใช้ LibreOffice มันให้เลือก separator ได้ เลยเปลี่ยนมาใช้ '|' ขั้นแทน เวลา import จะได้ลงถูก column ด้วยความขี้เกียจอธิบายว่าตัวเองทำอะไรไปบ้าง เวลาจะส่ง invoice เรียกเก็บเงิน ก็คิดค่าแรงสำหรับเดือนกุมภาฯ ตามนี้ (สมองผมจำอะไรย้อนหลังเกิน 2 วันไม่ค่อยได้)

git log --author=Sungsit --no-merges --after='last month' --until={2012-02-29} --reverse --format='%ai | %s' >~/invoice-2012-02.csv

อธิบาย options เพิ่มเติมนิดนึง

  • --author=Sungsit เพื่อกรองเฉพาะ commit ที่เราเขียน (เผอิญผมชื่อ Sungsit ก็เลยใส่แบบนั้น) --no-merges กรอง merge messages ทิ้ง (เผอิญแต่ละโปรเจ็คต์ทำงานกันหลายคนใน branch เดียวกัน git pull จาก code คนอื่น เลยมีข้อความขยะเยอะ)
  • --after='last month' --until={2012-02-29} --reverse เอาเฉพาะ commit ของเดือนที่แล้ว (ก.พ. 2012) และเรียงวันจากก่อนมาหลัง (ปกติ git จะเรียงจากล่าสุดไปหาอดีต)
  • --format='%ai | %s' ระบุ format ที่ต้องการ %ai คือ เวลา %s คือ commit message
  • >~/invoice-2012-02.csv โยนใส่ไฟล์ invoice-2012-02.csv ใน home dir ของเรา

เปิดไฟล์ invoice-2012-02.csv ด้วยโปรแกรม spreadsheet เติมชั่วโมงทำงานสำหรับแต่ละ task เข้าไป เพิ่ม column คูณ rate ของเรา ตกแต่ง header เป็น invoice ส่งเรียกเก็บเงิน!

(ตัวอย่างไฟล์ .csv ที่ import เป็น spreadsheet https://docs.google.com/spreadsh...)