diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d3c91d6 --- /dev/null +++ b/Makefile @@ -0,0 +1,79 @@ +# Majority of this script was borrowed from git-extra: +# https://github.com/tj/git-extras/blob/98d0d8c642ea2643f513bc41fcb9dd3078cf2e59/Makefile +PREFIX ?= /usr/local +BINPREFIX ?= "$(PREFIX)/bin" +MANPREFIX ?= "$(PREFIX)/share/man/man1" +SYSCONFDIR ?= $(PREFIX)/etc +BINS = $(wildcard bin/git-*) +MANS = $(wildcard man/git-*.md) +MAN_HTML = $(MANS:.md=.html) +MAN_PAGES = $(MANS:.md=.1) + +COMMANDS = $(subst bin/, , $(BINS)) + +default: install + +docs: $(MAN_HTML) $(MAN_PAGES) + +install: + @mkdir -p $(DESTDIR)$(MANPREFIX) + @mkdir -p $(DESTDIR)$(BINPREFIX) + @echo "... installing bins to $(DESTDIR)$(BINPREFIX)" + @echo "... installing man pages to $(DESTDIR)$(MANPREFIX)" + $(eval TEMPFILE := $(shell mktemp -q $${TMPDIR:-/tmp}/git-vendor.XXXXXX 2>/dev/null || mktemp -q)) + @# chmod from rw-------(default) to rwxrwxr-x, so that users can exec the scripts + @chmod 775 $(TEMPFILE) + $(eval EXISTED_ALIASES := $(shell \ + git config --get-regexp 'alias.*' | awk '{print "git-" substr($$1, 7)}')) + @$(foreach COMMAND, $(COMMANDS), \ + disable=''; \ + if test ! -z "$(filter $(COMMAND), $(EXISTED_ALIASES))"; then \ + read -p "$(COMMAND) conflicts with an alias, still install it and disable the alias? [y/n]" answer; \ + test "$$answer" = 'n' -o "$$answer" = 'N' && disable="true"; \ + fi; \ + if test -z "$$disable"; then \ + echo "... installing $(COMMAND)"; \ + cat bin/$(COMMAND) > $(TEMPFILE); \ + cp -f $(TEMPFILE) $(DESTDIR)$(BINPREFIX)/$(COMMAND); \ + fi; \ + ) + @if [ -z "$(wildcard man/git-*.1)" ]; then \ + echo "WARNING: man pages not created, use 'make docs' (which requires 'ronn' ruby lib)"; \ + else \ + cp -f man/git-*.1 $(DESTDIR)$(MANPREFIX); \ + echo "cp -f man/git-*.1 $(DESTDIR)$(MANPREFIX)"; \ + fi + @mkdir -p $(DESTDIR)$(SYSCONFDIR)/bash_completion.d + cp -f etc/bash_completion.sh $(DESTDIR)$(SYSCONFDIR)/bash_completion.d/git-vendor + +man/%.html: man/%.md + ronn \ + --manual "Git Vendor" \ + --html \ + --pipe \ + $< > $@ + +man/%.1: man/%.md + ronn -r \ + --manual "Git Vendor" \ + --pipe \ + $< > $@ + +uninstall: + @$(foreach BIN, $(BINS), \ + echo "... uninstalling $(DESTDIR)$(BINPREFIX)/$(notdir $(BIN))"; \ + rm -f $(DESTDIR)$(BINPREFIX)/$(notdir $(BIN)); \ + ) + @$(foreach MAN, $(MAN_PAGES), \ + echo "... uninstalling $(DESTDIR)$(MANPREFIX)/$(notdir $(MAN))"; \ + rm -f $(DESTDIR)$(MANPREFIX)/$(notdir $(MAN)); \ + ) + rm -f $(DESTDIR)$(SYSCONFDIR)/bash_completion.d/git-vendor + +clean: docclean + +docclean: + rm -f man/*.1 + rm -f man/*.html + +.PHONY: default docs clean docclean install uninstall diff --git a/README.md b/README.md index c150803..8a5eb86 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,17 @@ A work in progress git command for managing golang vendor dependencies. * `git vendor update
+ git-vendor - manage vendored dependency subtrees
+
git-vendor add <repository> <ref>
git-vendor list
git-vendor update <dir> <ref>
Manage any repository dependencies under /vendor/<repository> with git-subtree.
git-vendor is unable to list or update any dependencies it has not added, the reason is that git-vendor adds special commit messages so that it can track existing dependencies.
add <repository> <ref>
+ +Add a new vendored dependency
+ +list
+ +List all existing vendored dependencies and their current version
+ +update <dir> <ref>
+ +Update the vendored dependency to a different version
+ +<repository>
+ + The repository url to vendor. e.g. https://github.com/<username>/<repo-name> (supports http://, https:// git:// and git@ protocols).
<ref>
+ + The ref to vendor. e.g. master, v1.0.2, etc
<dir>
+ + The vendor directory for the dependency. e.g. vendor/github.com/<username>/<repo-name>.
Adding a new dependency:
+ +$ git vendor add https://github.com/brettlangdon/forge v0.1.4
+
+
+Updating an existing dependency:
+ +$ git vendor update vendor/github.com/brettlangdon/forge v0.1.7
+
+
+List all existing dependencies:
+ +$ git vendor list
+
+
+Written by Brett Langdon me@brett.is
+ +<https://github.com/brettlangdon/git-vendor/issues>
+ +<https://github.com/brettlangdon/git-vendor>
+ + +