From f40f6e25fe294df19bf09c1e7afbb73bea95a896 Mon Sep 17 00:00:00 2001 From: gretchen Date: Mon, 18 Nov 2019 16:58:52 -0800 Subject: Make intermediate directorieS --- norns_upload | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) mode change 100644 => 100755 norns_upload diff --git a/norns_upload b/norns_upload old mode 100644 new mode 100755 index 37817ea..c67ea6c --- a/norns_upload +++ b/norns_upload @@ -5,17 +5,22 @@ if [[ $# -ne 2 ]]; then exit 1 fi -# TODO: make directories - HOST="${NORNS:-norns.local}" API="/api/v1" BASE="/dust/code/" PROJECT="$1" FILE="$2" - -LOCAL_FILE="$FILE" +# make directories +# TODO if there's already a directory with a filename this probably +# doesn't do the right thing, but maybe that's the best we can do... +DIR="$PROJECT/" +if [[ "$(dirname "$FILE")" != "." ]]; then + DIR+="$(dirname "$FILE")" +fi +DIR_URL="http://$HOST$API$BASE$DIR?kind=directory" URL="http://$HOST$API$BASE$PROJECT/$FILE" + TEMP="$(mktemp)" BOUNDARY="----$(head -c70 < <(tr -dc '\101-\132\141-\172' < /dev/urandom))" @@ -25,7 +30,14 @@ function finish { trap finish EXIT echo "--$BOUNDARY"$'\r\nContent-Disposition: form-data; name="value"; filename="blob"\r\nContent-Type: text/utf-8\r\n\r' > $TEMP -cat < "$LOCAL_FILE" >> $TEMP +cat < "$FILE" >> $TEMP echo $'\r\n'"--$BOUNDARY--"$'\r\n' >> $TEMP + +# this is idempotent *and* creates all of the intermediate directories +# thanks monome >:) +curl -XPUT "$DIR_URL" --silent > /dev/null + +# TODO this should exit 1 if this doesn't work +# looks like we need to parse this. curl "$URL" -X PUT -H "Content-Type: multipart/form-data; boundary=$BOUNDARY" --data-binary @$TEMP --compressed --silent > /dev/null -- cgit v1.2.1