From b536c912a89f1cc8bef4617c8754e3537e4c806b Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Tue, 16 Feb 2016 19:59:21 -0500 Subject: [PATCH] Add git-vendor remove and cleanup some code --- bin/git-vendor | 114 ++++++++++++++++++++--------- man/git-vendor.1 | 28 ++++++- man/git-vendor.html | 174 -------------------------------------------- man/git-vendor.md | 14 +++- 4 files changed, 116 insertions(+), 214 deletions(-) diff --git a/bin/git-vendor b/bin/git-vendor index 915d92b..1364fef 100755 --- a/bin/git-vendor +++ b/bin/git-vendor @@ -11,6 +11,7 @@ Usage: git vendor --help git vendor add [--prefix ] [] git vendor list [] + git vendor remove git vendor update [] EOF } @@ -26,7 +27,7 @@ esac command="$1" shift case "$command" in - "add"|"list"|"update") ;; + "add"|"list"|"remove"|"update") ;; *) >&2 echo "error: unknown command \"$command\"" && _usage && exit 1 ;; esac @@ -40,22 +41,35 @@ fi vendor_names_from_log() { name= + dir= 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-name:) name="$b" ;; + git-vendor-dir:) dir="$b" ;; END) - echo "$name" + # Only consider dependencies which still exist on disk + if [ -d "$dir" ]; then + echo "$name" + fi name= + dir= ;; esac - done + done | sort -u +} + +vendor_git_log_first() +{ + name="$1" + git log -1 --grep="^git-vendor-name: $name\$" --pretty=format:'START %H%n%s%n%n%b%nEND%n' HEAD } cmd_add() { + require_clean_work_tree name="$1" repository="$2" ref="master" @@ -83,45 +97,45 @@ git-vendor-ref: $ref cmd_list() { showOnly="$1" - vendorNames=($(vendor_names_from_log | sort -u)) + vendorNames=$(vendor_names_from_log) for name in "${vendorNames[@]}"; do - 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 - 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 "" + vendor_git_log_first "$name" | + 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 + 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 - fi - name= - dir= - ref= - commit= - repository= - ;; - esac - done + name= + dir= + ref= + commit= + repository= + ;; + esac + done done; } cmd_update() { + require_clean_work_tree name="$1" ref="master" if [ "$2" != "" ]; then @@ -130,14 +144,18 @@ cmd_update() if [ $# -lt 1 ]; then die "Incorrect options provided: git vendor update []" fi - git log -1 --grep="^git-vendor-name: $name\$" \ - --pretty=format:'START %H%n%s%n%n%b%nEND%n' HEAD | + vendor_git_log_first "$name" | while read a b junk; do case "$a" in START) ;; git-vendor-dir:) dir="$b" ;; git-vendor-repository:) repository="$b" ;; END) + # Make sure the dependency exists on disk + if [ ! -d "$dir" ]; then + die "Dependency \"$1\" is missing from \"$dir\"" + fi + if [[ ! -z "$repository" ]]; then message="\ @@ -156,4 +174,30 @@ git-vendor-ref: $ref done } +cmd_remove() +{ + require_clean_work_tree + name="$1" + if [ $# -lt 1 ]; then + die "Incorrect options provided: git vendor remove " + fi + vendor_git_log_first "$name" | + while read a b junk; do + case "$a" in + START) ;; + git-vendor-dir:) dir="$b" ;; + END) + # Make sure the dependency exists + if [ ! -d "$dir" ]; then + die "Dependency \"$1\" is missing from \"$dir\"" + fi + git rm -rf "$dir" + git commit --message "Removing \"$name\" from \"$dir\"" + break + ;; + esac + done +} + +# Run the command "cmd_$command" "$@" diff --git a/man/git-vendor.1 b/man/git-vendor.1 index e6fd28b..b33fb3a 100644 --- a/man/git-vendor.1 +++ b/man/git-vendor.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "GIT\-VENDOR" "1" "January 2016" "" "Git Vendor" +.TH "GIT\-VENDOR" "1" "February 2016" "" "Git Vendor" . .SH "NAME" \fBgit\-vendor\fR \- manage vendored dependency subtrees @@ -13,6 +13,9 @@ \fBgit\-vendor list []\fR . .P +\fBgit\-vendor remove \fR +. +.P \fBgit\-vendor update []\fR . .SH "DESCRIPTION" @@ -31,16 +34,22 @@ add [\-\-prefix ] [] Add a new vendored dependency . .P -list [\fIname\fR] +list [] . .P List all existing vendored dependencies and their current version\. Limit show dependency to \fB\fR if provided\. . .P +remove +. +.P +Remove the named vendored dependency\. +. +.P update . .P -Update the vendored dependency to a different version +Update the vendored dependency to a different version\. . .SH "OPTIONS" \-\-prefix @@ -119,6 +128,19 @@ $ git vendor update forge .IP "" 0 . .P +Removing a dependency: +. +.IP "" 4 +. +.nf + +$ git vendor remove forge +. +.fi +. +.IP "" 0 +. +.P List all existing dependencies: . .IP "" 4 diff --git a/man/git-vendor.html b/man/git-vendor.html index 0ecd4f0..e69de29 100644 --- a/man/git-vendor.html +++ b/man/git-vendor.html @@ -1,174 +0,0 @@ - - - - - - git-vendor(1) - manage vendored dependency subtrees - - - - -
- - - -
    -
  1. git-vendor(1)
  2. -
  3. Git Vendor
  4. -
  5. git-vendor(1)
  6. -
- -

NAME

-

- git-vendor - manage vendored dependency subtrees -

- -

SYNOPSIS

- -

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

- -

git-vendor list [<name>]

- -

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

- -

DESCRIPTION

- -

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 [--prefix <dir>] <name> <repository> [<ref>]

- -

Add a new vendored dependency

- -

list [name]

- -

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

- -

update <dir> <ref>

- -

Update the vendored dependency to a different version

- -

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. [default: master]

- -

EXAMPLES

- -

Adding a new dependency at a specific git tagged version:

- -
$ 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
-
- -

Updating an existing dependency to a specific git tagged version:

- -
$ git vendor update forge  v0.1.7
-
- -

Updating a dependency to master:

- -
$ git vendor update forge
-
- -

List all existing dependencies:

- -
$ git vendor list
-
- -

AUTHOR

- -

Written by Brett Langdon me@brett.is

- -

REPORTING BUGS

- -

<https://github.com/brettlangdon/git-vendor/issues>

- -

SEE ALSO

- -

<https://github.com/brettlangdon/git-vendor>

- - -
    -
  1. -
  2. January 2016
  3. -
  4. git-vendor(1)
  5. -
- -
- - diff --git a/man/git-vendor.md b/man/git-vendor.md index 4ecd473..74c319e 100644 --- a/man/git-vendor.md +++ b/man/git-vendor.md @@ -7,6 +7,8 @@ git-vendor(1) -- manage vendored dependency subtrees `git-vendor list []` +`git-vendor remove ` + `git-vendor update []` ## DESCRIPTION @@ -23,13 +25,17 @@ git-vendor(1) -- manage vendored dependency subtrees Add a new vendored dependency - list [] + list [<name>] List all existing vendored dependencies and their current version. Limit show dependency to `` if provided. + remove <name> + + Remove the named vendored dependency. + update <dir> <ref> - Update the vendored dependency to a different version + Update the vendored dependency to a different version. ## OPTIONS @@ -68,6 +74,10 @@ git-vendor(1) -- manage vendored dependency subtrees $ git vendor update forge + Removing a dependency: + + $ git vendor remove forge + List all existing dependencies: $ git vendor list