From 53d934cdc39afb24df8b31bb258a70403d00946b Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Mon, 18 Jan 2016 21:53:13 -0500 Subject: [PATCH] get list and update working --- git-vendor.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 5 deletions(-) diff --git a/git-vendor.sh b/git-vendor.sh index c2a9e0a..df4320e 100755 --- a/git-vendor.sh +++ b/git-vendor.sh @@ -38,6 +38,23 @@ case "$command" in *) die "Unknown command '$command'" ;; esac +vendor_dirs_from_log() +{ + dir= + git log --grep="^git-vendor-dir: vendor/.*\$" \ + --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" ;; + END) + echo "$dir" + dir= + ;; + esac + done +} + cmd_add() { repository="$1" @@ -51,20 +68,73 @@ cmd_add() message="\ Add '$dir/' from '$repository $ref' -git-subtree-repository: $repository -git-subtree-ref: $ref +git-vendor-dir: $dir +git-vendor-repository: $repository +git-vendor-ref: $ref " - git subtree add --prefix "$dir" --message "$message" "$repository" "$ref" + git subtree add --prefix "$dir" --message "$message" "$repository" "$ref" --squash } cmd_list() { - die "Not implemented" + vendorDirs=($(vendor_dirs_from_log | sort -u)) + for dir in "${vendorDirs[@]}"; + do + git log -1 --grep="^git-vendor-dir: $dir\$" \ + --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-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 "" + fi + dir= + ref= + commit= + repository= + ;; + esac + done + done; + } cmd_update() { - die "Not implemented" + dir="$1" + ref="$2" + git log --grep="^git-vendor-dir: $dir\$" \ + --pretty=format:'START %H%n%s%n%n%b%nEND%n' HEAD | + while read a b junk; do + case "$a" in + START) ;; + git-vendor-repository:) repository="$b" ;; + END) + if [[ ! -z "$repository" ]]; + then + message="\ +Update '$dir/' from '$repository $ref' + +git-vendor-dir: $dir +git-vendor-repository: $repository +git-vendor-ref: $ref +" + git subtree pull --prefix "$dir" --message "$message" "$repository" "$ref" --squash + break + fi + ;; + esac + done } "cmd_$command" "$@"