aboutsummaryrefslogtreecommitdiff
path: root/interface.d/nexus_raw.sh
blob: c0448c1227562698815ad27b65a3ff89c48cca39 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/bash
#
# Nexus RAW repository interface
#


# Check existence of upstream file or directory
# @param url: path relative to NEXUS_URL (i.e. "repository/my_data", "repository/my_data/file.txt")
# @return non-zero indicates failure
nexus_raw_provides() {
    local url
    local response

    url="${NEXUS_URL}/$1"
    if [[ -z $url ]]; then
        echo "nexus_raw_provides: requires a path relative to $NEXUS_URL" >&2
        return 1
    fi

    response=$(curl -s --head "$url" | head -n 1 | awk '{print $2}')
    if (( $response != 200 )); then
        return 1
    fi
    return 0
}

# Download a file
# @param url:
# @param filename:
# @param dest:
# @return
#   1: path to file
#   2: non-zero indicates failure
nexus_raw_download() {
    local url
    local filename
    local dest
    local retval

    url="${NEXUS_URL}/$1"
    if [[ -z $url ]]; then
        echo "nexus_raw_download: requires a path relative to $NEXUS_URL" >&2
        return 1
    fi

    filename=$(basename $url)
    if ! nexus_raw_provides "$1"; then
        echo "${url}: not found on remote server" >&2
        return 1
    fi

    dest="$2"
    if [[ -z "${dest}" ]]; then
        dest="."
    elif [[ ! -d "${dest}" ]]; then
        mkdir -p "${dest}"
    fi

    if (( NEXUS_BASH_VERBOSE )); then
        /bin/echo -n "Fetching '$url' => '$dest' ... " >&2
    fi

    if ! curl -s -L "$url" > "${dest}/${filename}"; then
        retval=$?
        if (( NEXUS_BATH_VERBOSE )); then
            echo "failed ($retval)" >&2
        fi
        return $retval
    fi

    if (( NEXUS_BASH_VERBOSE )); then
        echo "done" >&2
    fi

    echo "$dest/$filename"
    return 0
}

# Upload a file
# @param url: path relative to NEXUS_URL (i.e. "repository/my_data")
# @param filename: local file to upload
# @return non-zero indicates failure
nexus_raw_upload() {
    local url
    local filename

    url="${NEXUS_URL}/$2"
    filename="$1"

    if [[ -z $url ]]; then
        echo "nexus_raw_upload: requires a path relative to $NEXUS_URL" >&2
        return 1
    fi

    if (( NEXUS_BASH_VERBOSE )); then
        /bin/echo -n "Uploading '$filename' => '${2}' ... "
    fi

    if ! curl -s --user "${NEXUS_AUTH}" --upload-file "${filename}" "${url}/${filename}"; then
        if (( NEXUS_BASH_VERBOSE )); then
            echo "failed" >&2
        fi
        return 1
    fi

    if (( NEXUS_BASH_VERBOSE )); then
        echo "done"
    fi
    return 0
}

# Upload a directory tree
# @param src: path to local directory
# @param dest: path relative to NEXUS_URL (i.e. "repository/my_data")
# @return non-zero indicates failure
nexus_raw_upload_dir() {
    local src
    local dest
    local status_callback
    src="$1"
    dest="$2"

    if [[ ! -d "$src" ]]; then
        echo "nexus_raw_upload_dir: source directory does not exist: ${src}" >&2
        return 1
    fi

    if [[ -z "$dest" ]]; then
        echo "nexus_raw_upload_dir: requires a destination relative to ${NEXUS_URL}" >&2
        return 1
    fi

    local failures
    local paths
    paths=($(find "${src}" -type f -print))

    failures=0
    for (( i=0; i < ${#paths[@]}; i++ )); do
        local retval
        local f
        f="${paths[$i]}"

        if ! nexus_raw_upload "$f" "$dest"; then
            (( failures++ ))
        fi
    done

    if (( failures )); then
        return 1
    fi
    return 0
}