项目作者: dapi

项目描述 :
Language agnostic single file package manager
高级语言: Go
项目地址: git://github.com/dapi/goga.git
创建时间: 2019-11-21T18:05:10Z
项目社区:https://github.com/dapi/goga

开源协议:Apache License 2.0

下载


goga logo

goga

Языконезависимый менеджер однофайловых пакетов (версионированный copy-paste)

Build Status

Зачем?

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

  1. Уходит время на создание и поддержку - необходимо создать тестовую инфраструктуру, описать спецификации, фактически придется создать ещё один проект
  2. Придется отдельно вносить изменения в самом пакете, обновлять пакет в основном приложении и заново заниматься его интеграционным тестированием, а если пойдет что-то не так, обрытно переключаться в проект пакета, вносить там изменения в тесты и код, публиковать и тп.
  3. Часто бывает, что проще слегка модифицировать код под новый проект, чем создавать универсальное решение подходящее всем проектам.

При этом хочется видеть историю изменений, централизованно хранить и делиться такими участками кода. Для таких случаев подходит goga.

goga это не замена gem, bundle, npm, yarn и тп, а дополнение. Он живет рядом и хорошо делает свою маленькую работу.

goga-модуль это обычный исходник на любом языке программирования, в который первой строкой автоматически добавлен goga-комментарий с адресом источника.

Что на борту?

  • Подключение однофайловых пакетов одной командой.
  • Использует Ваш git и gists для хранения пакетов.
  • Публикация пакета в общий репозиторий одной командой.
  • Живет в системе контроля версий вашего приложения совместно с основным пакетным менеджером.
  • Не зависит от языка программированя.
  • Легко вность изменения в исходный код пакетов.
  • Мультиплатформенное решение, написано на golang

Установка

  1. Установите golang в вашу ОС по инструкции

  2. Установите goga

go get github.com/dapi/goga

Использование

Список всех команд:

goga

goga add URL [PATH]

Скачивает по ссылке файл, кладет по указанному пути и добавляет первой строкой комментарий с ссылкой на источник.

Например:

goga add https://github.com/dapi/elements/blob/master/spinner.js ./app/javascripts/

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

goga status [DIR]

Сканирует указанную или текущую директорию на goga-модули (файлы с магическим комментарием) и сравнивает их с источником, сообщает если нашел изменения. Например:

  1. > go run ./goga.go status
  2. Scanning directory: /home/danil/code/goga_samples/
  3. Found /home/danil/code/goga_samples/spinner.js checking - 4 diffs found

goga push FILE

Заливает измененния в удаленный источник указанный в магическом комментарии. Например:

goga push ./app/javascripts/spinner.js

goga diff FILE

Показывает разницу между локальным файлом и его источником. Например:

goga diff

goga syntax

Выводит список поддерживаемых расширений и видов комментариев. Например:

  1. > go run syntax
  2. List of available file extensions and its comments syntax:
  3. .py # goga URI
  4. .pl # goga URI
  5. .sh # goga URI
  6. .haml // goga URI
  7. .c // goga URI
  8. .cs // goga URI
  9. .go // goga URI
  10. .php // goga URI
  11. .sql -- goga URI
  12. .xml <!-- goga URI -->
  13. .html <!-- goga URI -->
  14. .swift -- goga URI
  15. .js // goga URI
  16. .java // goga URI
  17. .slim // goga URI
  18. .rb # goga URI

Магический комментарий

При скачивании модуля через goga он автоматически добавляет первой строкой магичекий комментарий со ссылкой на источник, например:

  1. // goga https://github.com/dapi/elements/blob/master/spinner.js

Планы

  • Поддержка доступа к git-репозиторию по логин/пароль (сейчас только ssh-ключи)
  • Поддержка gist
  • Поддержка автоматического определения gitlab/bitbucket-репозиториев.
  • Улучшить вывод diff
  • shell-автокомплит

Поддерживаемые источники модулей

Языковая поддержка

На данный момент поддерживюатся исходники следующих языков программирования
(определяется через расширение файла) - https://github.com/dapi/goga/blob/master/cmd/syntax.go#L31

Если Вам нужна поддержка других языкой - создайте issue или пришлите PR