diff --git a/bin/git-vendor b/bin/git-vendor index 4bdc9f6..1364fef 100755 --- a/bin/git-vendor +++ b/bin/git-vendor @@ -41,15 +41,21 @@ 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 | sort -u @@ -63,6 +69,7 @@ vendor_git_log_first() cmd_add() { + require_clean_work_tree name="$1" repository="$2" ref="master" @@ -90,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 @@ -137,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="\