Бывает, хочется подойти к подсказанным git blame-ом коллегам, посмотреть им ласково в глаза и поговорить о наболевшем. В такие моменты отсутствие команды git punish кажется невообразимым.

Сначала я намеревался написать пост в «Я пиарюсь», но очень хотелось рассказать о технических деталях, потому прошу простить ссылку на мой собранный на коленке git-punish.io.

Задача была простая: пока не выветрился азарт написать что-то вызываемое через git punish разбирающее вывод команды git blame и возвращаемое ссылку на страницу в онлайне.

Первым в голову конечно же пришло

git config --global alias.punish "...shell command..."

Но быстро выяснилось, что многого так не сделаешь. На второе решение навел чей-то добрый совет на Coderwall. Подход сразу показался красивым и лишенным ограничений. Оказывается, в любом месте перечисленном в $PATH можна создать исполняемый файл git-%command% который добавит новую команду в git.

Получилось вот так:

#!/bin/bash
git blame --line-porcelain $@ | curl --data-binary @- http://git-punish.io/create


Параметр --line-porcelain включает расширенный вывод для каждой строчки, который удобно разбирать. Добавляем в конец пользовательские параметры $@. Затем POST-им весь вывод на git-punish.io/create.

Разбор вывода малоинтересен, но если очень хочется увидеть то вот. В терминал выводится сгенерированый сервисом короткий URL.

Такие вот дела. Буду рад советам, подсказкам и прочим blame/punish-ам.

UPD

На всякий случай дисклеймер, я понял что он сдесь нужен. Это шуточный сервис.

Комментарии (26)


  1. vedenin1980
    17.09.2015 08:48
    +9

    Эээ, а можно для тех кто в танке рассказать что такое «git punish» и для чего именно она нужна? Git худо бедно знаю, но из поста вообще не понял чего автору не хватало и что получилось у него в результате.


    1. yavorskiy
      17.09.2015 09:14
      -4

      Вот есть пример там же

      # accepts all `git blame` params

      > git clone git@github.com:yavorskiy/comment-parser.git
      > cd comment-parser/
      > git punish -L1,24 index.js

      http://git-punish.io/3EWZW

      Автору всего хватало, но хотелось больше


      1. vedenin1980
        17.09.2015 09:23
        +4

        Эээ, можно не пример, можно просто словами сказать что команда punish должна в итоге сделать и какая от неё будет польза? Я вот например вообще не знаю этой команды (подозреваю это что-то линуксово-сборочное, но я не любитель ручного копания в линуксах).


        1. movl
          17.09.2015 09:35
          +6

          Да это плагин, просто для фана, такой команды по умолчанию нет. Плагин генерирует ссылку на основе параметров, перейдя по которой, можно увидеть кусок кода, шутливый комментарий и картинку. Пример в комментарии выше.


        1. yavorskiy
          17.09.2015 09:43
          +1

          Да, совсем забыл сказать, git punish – это такая шутка.


          1. Alexeyslav
            17.09.2015 09:46
            +5

            Вот с этого и надо было начинать.


  1. SleepwalkerOne
    17.09.2015 08:52

    Забавная штука :)


  1. MaximChistov
    17.09.2015 09:02
    -2

    # you may need `sudo` next 2 commands

    > curl git-punish.io/get -o /usr/local/bin/git-punish
    > chmod +x /usr/local/bin/git-punish


    это ж классическая bad practice


    1. yavorskiy
      17.09.2015 09:21

      Буду рад переиначить все по best practices, подскажите как. На сколько мне известно из bin* путей /usr/local/bin как раз то место, где подобные исполняемые файлы должны лежать. Как избавиться от sudo я, честно скажу, не знаю. На OSX, такой необходимости нету, на линуксе есть.


      1. MaximChistov
        17.09.2015 09:23
        +1

        я о том, что вы предлагаете грузить неподписанный исполняемый скрипт по http


        1. yavorskiy
          17.09.2015 09:38
          +1

          Да, согласен. Не стал покупать SSL cert для шуточного сервиса, который делается за день и живет месяц, но возможно это имеет смысл, спасибо


          1. DjPhoeniX
            17.09.2015 10:24
            +3

            startssl в помощь ;)


            1. yavorskiy
              17.09.2015 12:42

              спасибо, посмотрю


  1. ivanych
    17.09.2015 09:11
    +2

    Что вся эта фигня значит и для чего нужна?


    1. Alexeyslav
      17.09.2015 09:44
      +2

      Походу, это доска позора… команда отправляет код на доску позора и выводит ссылку на результат.


    1. k12th
      17.09.2015 10:15
      +2

      Вместо того, чтобы подзывать коллегу и бить его фейсом об киборд, можно культурно послать ему свое недоумение в виде ссылки.


  1. imater
    17.09.2015 10:29
    +11

    На хабре, очень модно начинать писать о технологиях и всяких модных штуках, подразумевая, что все знают, что такое гиберсворолотор и для чего он нужен, и как долго все ждали появления в нем функции лоботоропии.


  1. UUSER
    17.09.2015 10:36
    +3

    эм… кодревью?


    1. pehat
      17.09.2015 12:30
      +2

      Зачем обучать, когда можно обосрать?


      1. yavorskiy
        17.09.2015 12:41
        +2

        Если видишь палку, то она не обязательно для битья. Когда человек не чувствует где переступает грань между дружественными подколками и гноблением коллег, то любые тулзы бессильны.


        1. pehat
          17.09.2015 13:46
          +2

          Конечно. Особенно когда на палке написано «мерзавец наказать».


  1. tangro
    17.09.2015 10:39
    +2

    Как говориться «за такие шутки в зубах бывают промежутки». Два-три раза коллегу мордой в грязь ткнёшь — и всё, хана и команде и проекту.


    1. yavorskiy
      17.09.2015 12:50
      +1

      опять же, откуда «мордой в грязь»? какие-то школьно-армейские ситуации. Кончено, если в команде достаточно «паханов» и «терпил», то проект развалится быстрее чем они доберутся до код-ревьювинга


      1. tangro
        17.09.2015 16:49

        Ревью кода — это одно, а «доска позора» — совершенно другое.


  1. roman_kashitsyn
    17.09.2015 11:15
    +4

    Зачем это нужно, если есть govnokod.ru


    1. Lure_of_Chaos
      17.09.2015 16:48

      он не в Git'е