diff --git a/bin/git-vendor b/bin/git-vendor index 00df77a..6643061 100755 --- a/bin/git-vendor +++ b/bin/git-vendor @@ -9,9 +9,9 @@ _usage() cat < - git vendor list - git vendor update + git vendor add [--prefix ] [] + git vendor list [] + git vendor update [] EOF } @@ -30,18 +30,25 @@ case "$command" in *) >&2 echo "error: unknown command \"$command\"" && _usage && exit 1 ;; esac -vendor_dirs_from_log() +prefix="vendor" +if [ "$1" == "--prefix" ]; then + prefix="$2" + shift; shift +fi + + +vendor_names_from_log() { - dir= - git log --grep="^git-vendor-dir: vendor/.*\$" \ + name= + git log --grep="^git-vendor-name: .*\$" \ --pretty=format:'START %H%n%s%n%n%b%nEND%n' HEAD | while read a b junk; do case "$a" in START) ;; - git-vendor-dir:) dir="$b" ;; + git-vendor-name:) name="$b" ;; END) - echo "$dir" - dir= + echo "$name" + name= ;; esac done @@ -49,47 +56,59 @@ vendor_dirs_from_log() cmd_add() { - repository="$1" - ref="$2" - if [ $# -ne 2 ]; + name="$1" + repository="$2" + ref="master" + if [ "$3" != "" ]; then + ref="$3" + fi + if [ $# -lt 2 ]; then - die "Incorrect options provided: git vendor add " + die "Incorrect options provided: git vendor add []" fi - dir="vendor/$(echo "$repository" | sed -E 's/^[a-zA-Z]+((:\/\/)|@)//' | sed 's/:/\//' | sed -E 's/\.git$//')" + dir="$prefix/$(echo "$repository" | sed -E 's/^[a-zA-Z]+((:\/\/)|@)//' | sed 's/:/\//' | sed -E 's/\.git$//')" message="\ -Add '$dir/' from '$repository $ref' +Add \"$name\" from \"$repository@$ref\" +git-vendor-name: $name git-vendor-dir: $dir git-vendor-repository: $repository git-vendor-ref: $ref " + set -x git subtree add --prefix "$dir" --message "$message" "$repository" "$ref" --squash } cmd_list() { - vendorDirs=($(vendor_dirs_from_log | sort -u)) - for dir in "${vendorDirs[@]}"; + showOnly="$1" + vendorNames=($(vendor_names_from_log | sort -u)) + for name in "${vendorNames[@]}"; do - git log -1 --grep="^git-vendor-dir: $dir\$" \ + git log -1 --grep="^git-vendor-name: $name\$" \ --pretty=format:'START %H%n%s%n%n%b%nEND%n' HEAD | while read a b junk; do case "$a" in START) commit="$b" ;; + git-vendor-name:) name="$b" ;; git-vendor-dir:) dir="$b" ;; git-vendor-ref:) ref="$b" ;; git-vendor-repository:) repository="$b" ;; END) if [[ ! -z "$repository" ]]; then - echo "$dir" - echo "\tcommit:\t$commit" - echo "\tdir:\t$dir" - echo "\tref:\t$ref" - echo "\trepo:\t$repository" - echo "" + if [[ -z "$showOnly" ]] || [ "$showOnly" == "$name" ]; then + echo "$name@$ref:" + echo "\tname:\t$name" + echo "\tdir:\t$dir" + echo "\trepo:\t$repository" + echo "\tref:\t$ref" + echo "\tcommit:\t$commit" + echo "" + fi fi + name= dir= ref= commit= @@ -103,20 +122,28 @@ cmd_list() cmd_update() { - dir="$1" - ref="$2" - git log --grep="^git-vendor-dir: $dir\$" \ + name="$1" + ref="master" + if [ "$2" != "" ]; then + ref="$2" + fi + if [ $# -lt 1]; then + die "Incorrect options provided: git vendor upate []" + fi + git log -1 --grep="^git-vendor-name: $name\$" \ --pretty=format:'START %H%n%s%n%n%b%nEND%n' HEAD | while read a b junk; do case "$a" in START) ;; + git-vendor-dir:) dir="$b" ;; git-vendor-repository:) repository="$b" ;; END) if [[ ! -z "$repository" ]]; then message="\ -Update '$dir/' from '$repository $ref' +Update \"$name\" from \"$repository@$ref\" +git-vendor-name: $name git-vendor-dir: $dir git-vendor-repository: $repository git-vendor-ref: $ref diff --git a/man/git-vendor.1 b/man/git-vendor.1 index e8936cb..e6fd28b 100644 --- a/man/git-vendor.1 +++ b/man/git-vendor.1 @@ -1,37 +1,40 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "GIT\-VENDOR" "1" "January 2016" "" "" +.TH "GIT\-VENDOR" "1" "January 2016" "" "Git Vendor" . .SH "NAME" \fBgit\-vendor\fR \- manage vendored dependency subtrees . .SH "SYNOPSIS" -\fBgit\-vendor add \fR +\fBgit\-vendor add [\-\-prefix ] []\fR . .P -\fBgit\-vendor list\fR +\fBgit\-vendor list []\fR . .P -\fBgit\-vendor update \fR +\fBgit\-vendor update []\fR . .SH "DESCRIPTION" -Manage any repository dependencies under \fB/vendor/\fR with \fBgit\-subtree\fR\. +Manage any repository dependencies with \fBgit\-subtree\fR\. +. +.P +\fBgit\-vendor\fR follows the same vendoring pattern that is used in the Go community\. Dependencies are stored under \fBvendor/\fR\. For example, the dependency of \fBhttps://github\.com/brettlangdon/forge\.git\fR will be stored under \fBvendor/github\.com/brettlangdon/forge\fR by default\. . .P \fBgit\-vendor\fR is unable to \fBlist\fR or \fBupdate\fR any dependencies it has not added, the reason is that \fBgit\-vendor\fR adds special commit messages so that it can track existing dependencies\. . .SH "COMMANDS" -add +add [\-\-prefix ] [] . .P Add a new vendored dependency . .P -list +list [\fIname\fR] . .P -List all existing vendored dependencies and their current version +List all existing vendored dependencies and their current version\. Limit show dependency to \fB\fR if provided\. . .P update @@ -40,6 +43,18 @@ update Update the vendored dependency to a different version . .SH "OPTIONS" +\-\-prefix +. +.P +Directory to pull dependencies in under (e\.g\. \fBvendor\fR or \fBthird_party\fR, etc)\. [default: \fBvendor\fR] +. +.P + +. +.P +A name to provide the vendored dependency to use when listing/updating\. +. +.P . .P @@ -49,35 +64,55 @@ The repository url to vendor\. e\.g\. \fBhttps://github\.com// . .P -The ref to vendor\. e\.g\. \fBmaster\fR, \fBv1\.0\.2\fR, etc +The ref to vendor\. e\.g\. \fBmaster\fR, \fBv1\.0\.2\fR, etc\. [default: \fBmaster\fR] . -.P - +.SH "EXAMPLES" +Adding a new dependency at a specific git tagged version: +. +.IP "" 4 +. +.nf + +$ git vendor add forge https://github\.com/brettlangdon/forge v0\.1\.4 +. +.fi +. +.IP "" 0 . .P -The vendor directory for the dependency\. e\.g\. \fBvendor/github\.com//\fR\. +Adding a new dependency under a different directory than \fBvendor/\fR: . -.SH "EXAMPLES" -Adding a new dependency: +.IP "" 4 +. +.nf + +$ git vendor add \-\-prefix third_party forge https://github\.com/brettlangdon/forge +. +.fi +. +.IP "" 0 +. +.P +Updating an existing dependency to a specific git tagged version: . .IP "" 4 . .nf -$ git vendor add https://github\.com/brettlangdon/forge v0\.1\.4 +$ git vendor update forge v0\.1\.7 . .fi . .IP "" 0 . .P -Updating an existing dependency: +Updating a dependency to \fBmaster\fR: . .IP "" 4 . .nf -$ git vendor update vendor/github\.com/brettlangdon/forge v0\.1\.7 +$ git vendor update forge . .fi . diff --git a/man/git-vendor.1.html b/man/git-vendor.html similarity index 70% rename from man/git-vendor.1.html rename to man/git-vendor.html index f8a9cdd..0ecd4f0 100644 --- a/man/git-vendor.1.html +++ b/man/git-vendor.html @@ -66,7 +66,7 @@
  1. git-vendor(1)
  2. -
  3. +
  4. Git Vendor
  5. git-vendor(1)
@@ -77,27 +77,29 @@

SYNOPSIS

-

git-vendor add <repository> <ref>

+

git-vendor add [--prefix <dir>] <name> <repository> [<ref>]

-

git-vendor list

+

git-vendor list [<name>]

-

git-vendor update <dir> <ref>

+

git-vendor update <name> [<ref>]

DESCRIPTION

-

Manage any repository dependencies under /vendor/<repository> with git-subtree.

+

Manage any repository dependencies with git-subtree.

+ +

git-vendor follows the same vendoring pattern that is used in the Go community. Dependencies are stored under vendor/<repository_uri>. For example, the dependency of https://github.com/brettlangdon/forge.git will be stored under vendor/github.com/brettlangdon/forge by default.

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.

COMMANDS

-

add <repository> <ref>

+

add [--prefix <dir>] <name> <repository> [<ref>]

Add a new vendored dependency

-

list

+

list [name]

-

List all existing vendored dependencies and their current version

+

List all existing vendored dependencies and their current version. Limit show dependency to <name> if provided.

update <dir> <ref>

@@ -105,28 +107,42 @@

OPTIONS

+

--prefix <dir>

+ +

Directory to pull dependencies in under (e.g. vendor or third_party, etc). [default: vendor]

+ +

<name>

+ +

A name to provide the vendored dependency to use when listing/updating.

+

<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

+

The ref to vendor. e.g. master, v1.0.2, etc. [default: master]

-

<dir>

+

EXAMPLES

-

The vendor directory for the dependency. e.g. vendor/github.com/<username>/<repo-name>.

+

Adding a new dependency at a specific git tagged version:

-

EXAMPLES

+
$ git vendor add forge https://github.com/brettlangdon/forge v0.1.4
+
+ +

Adding a new dependency under a different directory than vendor/:

+ +
$ git vendor add --prefix third_party forge https://github.com/brettlangdon/forge
+
-

Adding a new dependency:

+

Updating an existing dependency to a specific git tagged version:

-
$ git vendor add https://github.com/brettlangdon/forge v0.1.4
+
$ git vendor update forge  v0.1.7
 
-

Updating an existing dependency:

+

Updating a dependency to master:

-
$ git vendor update vendor/github.com/brettlangdon/forge v0.1.7
+
$ git vendor update forge
 

List all existing dependencies:

@@ -136,7 +152,7 @@

AUTHOR

-

Written by Brett Langdon me@brett.is

+

Written by Brett Langdon me@brett.is

REPORTING BUGS

diff --git a/man/git-vendor.md b/man/git-vendor.md index 3c6e23a..4ecd473 100644 --- a/man/git-vendor.md +++ b/man/git-vendor.md @@ -3,27 +3,29 @@ git-vendor(1) -- manage vendored dependency subtrees ## SYNOPSIS -`git-vendor add ` +`git-vendor add [--prefix ] []` -`git-vendor list` +`git-vendor list []` -`git-vendor update ` +`git-vendor update []` ## DESCRIPTION - Manage any repository dependencies under `/vendor/` with `git-subtree`. + Manage any repository dependencies with `git-subtree`. + + `git-vendor` follows the same vendoring pattern that is used in the Go community. Dependencies are stored under `vendor/`. For example, the dependency of `https://github.com/brettlangdon/forge.git` will be stored under `vendor/github.com/brettlangdon/forge` by default. `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. ## COMMANDS - add <repository> <ref> + add [--prefix <dir>] <name> <repository> [<ref>] Add a new vendored dependency - list + list [] - List all existing vendored dependencies and their current version + List all existing vendored dependencies and their current version. Limit show dependency to `` if provided. update <dir> <ref> @@ -32,27 +34,39 @@ git-vendor(1) -- manage vendored dependency subtrees ## OPTIONS + --prefix <dir> + + Directory to pull dependencies in under (e.g. `vendor` or `third_party`, etc). [default: `vendor`] + + <name> + + A name to provide the vendored dependency to use when listing/updating. + <repository> The repository url to vendor. e.g. `https://github.com//` (supports `http://`, `https://` `git://` and `git@` protocols). <ref> - The ref to vendor. e.g. `master`, `v1.0.2`, etc + The ref to vendor. e.g. `master`, `v1.0.2`, etc. [default: `master`] - <dir> +## EXAMPLES - The vendor directory for the dependency. e.g. `vendor/github.com//`. + Adding a new dependency at a specific git tagged version: -## EXAMPLES + $ git vendor add forge https://github.com/brettlangdon/forge v0.1.4 + + Adding a new dependency under a different directory than `vendor/`: + + $ git vendor add --prefix third_party forge https://github.com/brettlangdon/forge - Adding a new dependency: + Updating an existing dependency to a specific git tagged version: - $ git vendor add https://github.com/brettlangdon/forge v0.1.4 + $ git vendor update forge v0.1.7 - Updating an existing dependency: + Updating a dependency to `master`: - $ git vendor update vendor/github.com/brettlangdon/forge v0.1.7 + $ git vendor update forge List all existing dependencies: