diff options
author | An-Cheng Huang <ancheng@vyatta.com> | 2008-11-06 18:44:40 -0800 |
---|---|---|
committer | An-Cheng Huang <ancheng@vyatta.com> | 2008-11-06 18:44:40 -0800 |
commit | a96c79e41c61d25822fb16e7dfba28182a5fd2e9 (patch) | |
tree | 8fb1b1a36271bbd2de97833f7794b69334986237 /templates/system | |
parent | 954c6d0ae5d03eed990fdc12d8b3cc67bcea932d (diff) | |
download | vyatta-cfg-system-a96c79e41c61d25822fb16e7dfba28182a5fd2e9.tar.gz vyatta-cfg-system-a96c79e41c61d25822fb16e7dfba28182a5fd2e9.zip |
fix for bug 2313: add support for "Region/City" timezone specification.
Diffstat (limited to 'templates/system')
-rw-r--r-- | templates/system/time-zone/node.def | 79 |
1 files changed, 49 insertions, 30 deletions
diff --git a/templates/system/time-zone/node.def b/templates/system/time-zone/node.def index e271e3e6..00179850 100644 --- a/templates/system/time-zone/node.def +++ b/templates/system/time-zone/node.def @@ -1,35 +1,54 @@ type: txt help: Set local timezone default: "GMT" -update:expression: "LTF=\"/usr/share/zoneinfo\" && \ -case \"$VAR(@)\" in \ - [Ll][Oo][Ss]*) LTF=\"$LTF/US/Pacific\" ;; \ - [Dd][Ee][Nn]*) LTF=\"$LTF/US/Mountain\" ;; \ - [Hh][Oo][Nn]*) LTF=\"$LTF/US/Hawaii\" ;; \ - [Nn][Ee][Ww]*) LTF=\"$LTF/US/Eastern\" ;; \ - [Cc][Hh][Ii]*) LTF=\"$LTF/US/Central\" ;; \ - [Aa][Nn][Cc]*) LTF=\"$LTF/US/Alaska\" ;; \ - [Pp][Hh][Oo]*) LTF=\"$LTF/US/Arizona\" ;; \ - *) LTF=\"$LTF/Etc/$VAR(@)\" ;; \ -esac && \ -if [ -e \"$LTF\" ]; then \ - sudo ln -fs $LTF /etc/localtime; \ -else \ - echo \"Invalid timezone\"; \ - exit 1; \ -fi" +update: LTF="/usr/share/zoneinfo" + case "$VAR(@)" in + [Ll][Oo][Ss]*) LTF="$LTF/US/Pacific" ;; + [Dd][Ee][Nn]*) LTF="$LTF/US/Mountain" ;; + [Hh][Oo][Nn][Oo]*) LTF="$LTF/US/Hawaii" ;; + [Nn][Ee][Ww]*) LTF="$LTF/US/Eastern" ;; + [Cc][Hh][Ii][Cc]*) LTF="$LTF/US/Central" ;; + [Aa][Nn][Cc]*) LTF="$LTF/US/Alaska" ;; + [Pp][Hh][Oo]*) LTF="$LTF/US/Arizona" ;; + GMT*) LTF="$LTF/Etc/$VAR(@)" ;; + *) LTF="$LTF/$VAR(@)" ;; + esac + if [ -f "$LTF" ]; then + sudo ln -fs $LTF /etc/localtime + else + echo "Invalid timezone" + exit 1 + fi delete:expression: "sudo ln -fs /usr/share/zoneinfo/GMT /etc/localtime" -allowed: local -a list=( "Los Angeles" "New York" "Denver" "Chicago" \ - "Anchorage" "Honolulu" "Phoenix" "GMT" ) - for (( i = -1; i > -13; i-- )); do - list[${#list[@]}]="GMT$i"; +allowed: word=${COMP_WORDS[$COMP_CWORD]} + if [[ $word == */* ]]; then + marr=($(ls -d /usr/share/zoneinfo/$word*)) + else + marr=($(find /usr/share/zoneinfo/ -maxdepth 1 -type d \ + -name "$word*")) + fi + if (( ${#marr[@]} == 1 )); then + word=${marr[0]#/usr/share/zoneinfo/} + fi + if [ -n "$word" ] && [[ $word != */ ]]; then + marr=($(ls -d /usr/share/zoneinfo/$word*)) + if (( ${#marr[@]} == 1 )) \ + && [ -d "/usr/share/zoneinfo/$word" ]; then + word=$word/ + elif [[ $word == */* ]]; then + word=${word%/*}/ + fi + fi + for z in $(ls -d /usr/share/zoneinfo/$word* \ + 2>/dev/null | egrep '^/usr/share/zoneinfo/[A-Z]'); do + zz=${z#/usr/share/zoneinfo/} + if [ -d $z ] || [[ $zz == */* ]]; then + echo \"$zz\" + fi done - for (( i = 1; i < 13; i++ )); do - list[${#list[@]}]="GMT+$i"; - done - for zone in "${list[@]}"; do - echo \"$zone\" - done -comp_help:Enter one of the following time zones: - Honolulu Anchorage Los Angeles Phoenix Denver Chicago New York - GMT GMT-1 ... GMT-12 GMT+1 ... GMT+12 +comp_help:Enter the local timezone by specifying "Region/City" + Use auto-completion to see available regions and cities. + Start with one of these regions: + Africa America Antarctica Arctic Asia Atlantic + Australia Brazil Canada Chile Europe Indian + Mexico Mideast Pacific US |