Уявіть собі, виявляється така дисципліна програмної інженерії як археологія існує досить давно, і в 2001 спеціально по ній навіть проводили конференцію.
Ну і я, собі теж, маючи необхідність прикрутив до Vim таку лопату, яка дозволяє копати в Mercurial:
104 function! Blame(…)
105 " gets zero, one or two params
106 " first param – revision to annotate (if false – don’t pass)
107 " second param – pattern to search
108 let revision = (a:0 >= 1) && a:1 ? ‘ -r ‘ . a:1 : ”
109 let pattern = (a:0 >= 2) && a:2 ? ‘| grep ‘. a:2 : ”
110
111 let command = ":!hg blame -nvud % ". revision . "| cat -n ". pattern ." | less"
112 execute command
113 endfunction
Лопата жахлива бо я на VimScript ніфіга не вмію писати. І взагалі не люблю мови в яких оператор конкатенації рядків – це крапочка.
Але вона працює, і дозволяє вияснити хто, коли і під яким приводом (зазвичай посилання в Jira) написав код на який я дивлюсь. Найчастіше якщо трапляється якийсь великий WTF то виявляється що це написав мій CEO ще в 2008, не пояснюючи мотивів, бо тоді й не було кому пояснювати. Ну, і його питати немає сенсу, не тому що субординація, чи він зайнятий, а тому, що це було дуже давно, і звісно він не пам’ятає.
Але загалом все нормально. Тільки от з’являється проблемка. Коли я хочу збільшити пов’язаність якогось модуля, доводиться робити переміщення методів. Коли я хочу щоб метод похудав на 100-200 рядочків, доводиться робити витягнення метода. Обидва рефакторинги переміщують рядки коду, і для Mercurial змінюють його власника, бо він бачить лише що я видалив одні рядки, і вставив якісь інші. Те що вони однакові він не бачить.
Git вирішує цю проблему за допомогою евристики по метриках подібності. Що правда трохи страшнувато звучить, бо я не знаю чи можна буде передбачити результат його роботи.
Зібравши один модуль я навіть вгорі копірайти написав, аби в разі чого люди знали що за поясненнями можна іти не тільки до мене.
І от маю дилему – привласнювати код якось невиховано, але якщо наступна моя задача знову полягатиме в перечитуванні 300-рядкового методу, то я сильно пожалію що залишив код в такому стані.
Тепер питання: а вам доводилось займатись археологією? Що за проект? Як враження?
Filed under: Кодерство Tagged: hg, розробка, Vim