diff options
| author | Hsieh Chin Fan <pham@topo.tw> | 2023-02-25 00:42:55 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <pham@topo.tw> | 2023-02-25 00:42:55 +0800 |
| commit | cb62554fc08844fc00397a5618c589d8ff4bf3a9 (patch) | |
| tree | f0414afa0f33d73248ac382721390e09d236ef0d /bin | |
| parent | 829334ee816637fb63ff530601a4355685ac0421 (diff) | |
Update
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/osm/osm.api.changeset.commit | 121 |
1 files changed, 83 insertions, 38 deletions
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 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | 2 | ||
| 3 | set -e | 3 | set -e |
| 4 | set -o pipefail | ||
| 4 | shopt -s lastpipe | 5 | shopt -s lastpipe |
| 5 | 6 | ||
| 6 | OSM_SERVER=https://api.openstreetmap.org | 7 | OSM_SERVER=https://api.openstreetmap.org |
| 7 | OSM_TEST_SERVER=https://master.apis.dev.openstreetmap.org | 8 | OSM_TEST_SERVER=https://master.apis.dev.openstreetmap.org |
| 9 | |||
| 8 | if [[ $@ =~ '--serious' ]]; then | 10 | if [[ $@ =~ '--serious' ]]; then |
| 9 | SERVER=$OSM_SERVER | 11 | SERVER=$OSM_SERVER |
| 10 | else | 12 | else |
| 13 | # Commit to test server unless user set --serious | ||
| 11 | SERVER=$OSM_TEST_SERVER | 14 | SERVER=$OSM_TEST_SERVER |
| 12 | fi | 15 | fi |
| 13 | 16 | ||
| 14 | OSM_API=${SERVER}/api/0.6 | 17 | OSM_API=${SERVER}/api/0.6 |
| 15 | FILE=${@//--serious/} | 18 | FILE="${@//--serious/}" |
| 19 | |||
| 20 | if [ -z "$FILE" ]; then | ||
| 21 | echo No OSC file is given >&2 | ||
| 22 | exit 1 | ||
| 23 | fi | ||
| 16 | 24 | ||
| 17 | # Prompt for comment and User:Password | 25 | # Prompt for comment and User:Password |
| 18 | if [[ ! -t 0 ]]; then | 26 | if [[ ! -t 0 ]]; then |
| @@ -20,61 +28,98 @@ if [[ ! -t 0 ]]; then | |||
| 20 | else | 28 | else |
| 21 | read -e -p 'Type comment: ' -r comment </dev/tty | 29 | read -e -p 'Type comment: ' -r comment </dev/tty |
| 22 | fi | 30 | fi |
| 23 | if [ -z ${OSM_USER_PASSWD} ]; then | 31 | if [ -z "${OSM_USER_PASSWD}" ]; then |
| 24 | read -e -p 'Type USER:PASSWD: ' -r OSM_USER_PASSWD </dev/tty | 32 | read -e -p 'Type USER:PASSWD: ' -r OSM_USER_PASSWD </dev/tty |
| 25 | fi | 33 | fi |
| 26 | 34 | ||
| 35 | # API call for changeset create | ||
| 36 | # If env SOURCE is set, add it as part of changeset: | ||
| 37 | # <tag k='source' v='$SOURCE'/> | ||
| 27 | create_changeset() { | 38 | create_changeset() { |
| 28 | SOURCE_TAG="${SOURCE:+$(printf "<tag k='source' v='%s'/>" $SOURCE)}" | 39 | SOURCE_TAG="${SOURCE:+$(printf "<tag k='source' v='%s'/>" $SOURCE)}" |
| 29 | 40 | ||
| 30 | curl ${OSM_API}/changeset/create \ | 41 | # Create changeset with given information |
| 31 | --user ${OSM_USER_PASSWD} \ | 42 | response="$(curl ${OSM_API}/changeset/create \ |
| 32 | --upload-file - \ | 43 | --write-out "\n%{http_code}" \ |
| 44 | --user "$OSM_USER_PASSWD" \ | ||
| 33 | --silent \ | 45 | --silent \ |
| 34 | <<EOF | tail -1 | 46 | --upload-file - \ |
| 35 | <osm> | 47 | <<' EOF' |
| 36 | <changeset> | 48 | <osm> |
| 37 | ${SOURCE_TAG} | 49 | <changeset> |
| 38 | <tag k='comment' v='${comment}'/> | 50 | ${SOURCE_TAG} |
| 39 | <tag k='created_by' v='bash script'/> | 51 | <tag k='comment' v='${comment}'/> |
| 40 | <tag k='bot' v='yes'/> | 52 | <tag k='created_by' v='bash script'/> |
| 41 | </changeset> | 53 | <tag k='bot' v='yes'/> |
| 42 | </osm> | 54 | </changeset> |
| 43 | EOF | 55 | </osm> |
| 56 | EOF | ||
| 57 | )" | ||
| 58 | |||
| 59 | return_code=$(tail -1 <<<"$response") | ||
| 60 | changeset_id=$(head -1 <<<"$response") | ||
| 61 | |||
| 62 | # If return code is not 200, or the response is not a sequence number | ||
| 63 | # Exit with return code 1 | ||
| 64 | if [[ ! "$return_code" == 200 ]] || [[ ! "$changeset_id" =~ ^[[:digit:]]+$ ]]; then | ||
| 65 | echo | ||
| 66 | echo Fail to create a new changeset: >&2 | ||
| 67 | echo "$response" >&2 | ||
| 68 | return 1 | ||
| 69 | fi | ||
| 44 | } | 70 | } |
| 45 | 71 | ||
| 46 | # Return http code after uploading a file | 72 | # API call for uploading OSC file |
| 47 | uploade_file_to_changeset() { | 73 | uploade_file_to_changeset() { |
| 48 | curl -X POST $OSM_API/changeset/${changeset_id}/upload \ | 74 | response="$(curl -X POST $OSM_API/changeset/$1/upload \ |
| 49 | --user ${OSM_USER_PASSWD} -i \ | 75 | --user "$OSM_USER_PASSWD" \ |
| 50 | --upload-file - \ | 76 | --upload-file - \ |
| 51 | --silent -o /dev/null -w "%{http_code}" | 77 | --silent -w "%{http_code}" |
| 78 | )" | ||
| 79 | |||
| 80 | return_code=$(tail -1 <<<"$response") | ||
| 81 | |||
| 82 | if [[ ! "$return_code" == 200 ]]; then | ||
| 83 | echo | ||
| 84 | echo Fail to upload OSC file: >&2 | ||
| 85 | echo "$response" >&2 | ||
| 86 | return 1 | ||
| 87 | fi | ||
| 52 | } | 88 | } |
| 53 | 89 | ||
| 90 | # API call for closing changeset | ||
| 54 | close_changeset() { | 91 | close_changeset() { |
| 55 | curl -X PUT ${OSM_API}/changeset/${changeset_id}/close \ | 92 | response="$(curl -X PUT ${OSM_API}/changeset/$1/close \ |
| 56 | --user ${OSM_USER_PASSWD} -i \ | 93 | --user "$OSM_USER_PASSWD" \ |
| 57 | --silent -o /dev/null -w "%{http_code}" | 94 | --silent -w "%{http_code}" |
| 58 | } | 95 | )" |
| 59 | 96 | ||
| 60 | # Create changeset with given information | 97 | return_code=$(tail -1 <<<"$response") |
| 61 | changeset_id=$(create_changeset) | ||
| 62 | 98 | ||
| 63 | # Print created changeset id | 99 | if [[ ! "$return_code" == 200 ]]; then |
| 64 | echo "Changeset created, check ${SERVER}/changeset/${changeset_id}" >/dev/tty | 100 | echo |
| 65 | echo ${changeset_id} | 101 | echo Fail to close changeset: >&2 |
| 102 | echo "$response" >&2 | ||
| 103 | return 1 | ||
| 104 | fi | ||
| 105 | } | ||
| 66 | 106 | ||
| 67 | # Upload OSC file to Changeset | 107 | # Create changeset when CHANGESET is not set |
| 68 | sed -Ee "/<(node|way|relation)/ s/>/ changeset=\"${changeset_id}\">/" $FILE |\ | 108 | if [ -z CHANGESET ]; then |
| 69 | uploade_file_to_changeset | if [[ $(cat) == '200' ]]; then | 109 | create_changeset && \ |
| 70 | echo Upload file $FILE to changeset ${changeset_id} >/dev/tty | 110 | echo "Changeset created, check ${SERVER}/changeset/${changeset_id}" || \ |
| 71 | else | ||
| 72 | exit 1 | 111 | exit 1 |
| 112 | else | ||
| 113 | changeset_id=$CHANGESET | ||
| 73 | fi | 114 | fi |
| 74 | 115 | ||
| 116 | # Upload OSC file to Changeset | ||
| 117 | sed -Ee "/<(node|way|relation)/ s/>/ changeset=\"${changeset_id}\">/" $FILE |\ | ||
| 118 | uploade_file_to_changeset ${changeset_id} && \ | ||
| 119 | echo Upload file $FILE to changeset ${changeset_id} || \ | ||
| 120 | exit 1 | ||
| 121 | |||
| 75 | # Close Changeset | 122 | # Close Changeset |
| 76 | close_changeset | if [[ $(cat) == '200' ]]; then | 123 | close_changeset ${changeset_id} && \ |
| 77 | echo Changeset ${changeset_id} closed >/dev/tty | 124 | echo Changeset ${changeset_id} closed || \ |
| 78 | else | 125 | exit 1 |
| 79 | exit 1 | ||
| 80 | fi | ||