From cb62554fc08844fc00397a5618c589d8ff4bf3a9 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Sat, 25 Feb 2023 00:42:55 +0800 Subject: Update --- bin/osm/osm.api.changeset.commit | 121 +++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 38 deletions(-) (limited to 'bin/osm/osm.api.changeset.commit') diff --git a/bin/osm/osm.api.changeset.commit b/bin/osm/osm.api.changeset.commit index 6b67833..d7f57fc 100755 --- a/bin/osm/osm.api.changeset.commit +++ b/bin/osm/osm.api.changeset.commit @@ -1,18 +1,26 @@ #!/bin/bash set -e +set -o pipefail shopt -s lastpipe OSM_SERVER=https://api.openstreetmap.org OSM_TEST_SERVER=https://master.apis.dev.openstreetmap.org + if [[ $@ =~ '--serious' ]]; then SERVER=$OSM_SERVER else +# Commit to test server unless user set --serious SERVER=$OSM_TEST_SERVER fi OSM_API=${SERVER}/api/0.6 -FILE=${@//--serious/} +FILE="${@//--serious/}" + +if [ -z "$FILE" ]; then + echo No OSC file is given >&2 + exit 1 +fi # Prompt for comment and User:Password if [[ ! -t 0 ]]; then @@ -20,61 +28,98 @@ if [[ ! -t 0 ]]; then else read -e -p 'Type comment: ' -r comment create_changeset() { SOURCE_TAG="${SOURCE:+$(printf "" $SOURCE)}" - curl ${OSM_API}/changeset/create \ - --user ${OSM_USER_PASSWD} \ - --upload-file - \ + # Create changeset with given information + response="$(curl ${OSM_API}/changeset/create \ + --write-out "\n%{http_code}" \ + --user "$OSM_USER_PASSWD" \ --silent \ - < - - ${SOURCE_TAG} - - - - - -EOF + --upload-file - \ + <<' EOF' + + + ${SOURCE_TAG} + + + + + + EOF + )" + + return_code=$(tail -1 <<<"$response") + changeset_id=$(head -1 <<<"$response") + + # If return code is not 200, or the response is not a sequence number + # Exit with return code 1 + if [[ ! "$return_code" == 200 ]] || [[ ! "$changeset_id" =~ ^[[:digit:]]+$ ]]; then + echo + echo Fail to create a new changeset: >&2 + echo "$response" >&2 + return 1 + fi } -# Return http code after uploading a file +# API call for uploading OSC file uploade_file_to_changeset() { - curl -X POST $OSM_API/changeset/${changeset_id}/upload \ - --user ${OSM_USER_PASSWD} -i \ + response="$(curl -X POST $OSM_API/changeset/$1/upload \ + --user "$OSM_USER_PASSWD" \ --upload-file - \ - --silent -o /dev/null -w "%{http_code}" + --silent -w "%{http_code}" + )" + + return_code=$(tail -1 <<<"$response") + + if [[ ! "$return_code" == 200 ]]; then + echo + echo Fail to upload OSC file: >&2 + echo "$response" >&2 + return 1 + fi } +# API call for closing changeset close_changeset() { - curl -X PUT ${OSM_API}/changeset/${changeset_id}/close \ - --user ${OSM_USER_PASSWD} -i \ - --silent -o /dev/null -w "%{http_code}" -} + response="$(curl -X PUT ${OSM_API}/changeset/$1/close \ + --user "$OSM_USER_PASSWD" \ + --silent -w "%{http_code}" + )" -# Create changeset with given information -changeset_id=$(create_changeset) + return_code=$(tail -1 <<<"$response") -# Print created changeset id -echo "Changeset created, check ${SERVER}/changeset/${changeset_id}" >/dev/tty -echo ${changeset_id} + if [[ ! "$return_code" == 200 ]]; then + echo + echo Fail to close changeset: >&2 + echo "$response" >&2 + return 1 + fi +} -# Upload OSC file to Changeset -sed -Ee "/<(node|way|relation)/ s/>/ changeset=\"${changeset_id}\">/" $FILE |\ -uploade_file_to_changeset | if [[ $(cat) == '200' ]]; then - echo Upload file $FILE to changeset ${changeset_id} >/dev/tty -else +# Create changeset when CHANGESET is not set +if [ -z CHANGESET ]; then + create_changeset && \ + echo "Changeset created, check ${SERVER}/changeset/${changeset_id}" || \ exit 1 +else + changeset_id=$CHANGESET fi +# Upload OSC file to Changeset +sed -Ee "/<(node|way|relation)/ s/>/ changeset=\"${changeset_id}\">/" $FILE |\ +uploade_file_to_changeset ${changeset_id} && \ +echo Upload file $FILE to changeset ${changeset_id} || \ +exit 1 + # Close Changeset -close_changeset | if [[ $(cat) == '200' ]]; then - echo Changeset ${changeset_id} closed >/dev/tty -else - exit 1 -fi +close_changeset ${changeset_id} && \ +echo Changeset ${changeset_id} closed || \ +exit 1 -- cgit v1.2.3-70-g09d2