build: ensure that reordering of KCONFIG lines are handled properly and that the...
[openwrt/svn-archive/archive.git] / scripts / env
index a1211fbde04933dbd2a1e4fb6389396ac5e1b26f..24d4bec64f06953695ea3bc0dfafb233d33f96d7 100755 (executable)
@@ -96,13 +96,14 @@ env_do_reset() {
 
 env_list() {
        env_init
-       git branch | grep -vE '^. master$'
+       git branch --color | grep -vE '^. master$'
 }
 
 env_diff() {
        env_init
        env_sync_data
-       git diff --cached
+       git diff --cached --color
+       env_link_config
 }
 
 env_save() {
@@ -118,12 +119,12 @@ env_revert() {
 }
 
 env_ask_sync() {
+       env_sync_data
        LINES="$(env_diff | wc -l)" # implies env_init
        [ "$LINES" -gt 0 ] && {
                if ask_bool 1 "Do you want to save your changes"; then
                        env_sync
                else
-                       env_sync_data
                        env_do_reset
                fi
        }
@@ -137,7 +138,9 @@ env_clear() {
        env_sync_data
        if ask_bool 1 "Do you want to keep your current config and files"; then
                mkdir -p "$BASEDIR/files"
-               cp -a "$ENVDIR/files/*" "$BASEDIR/files" 2>/dev/null >/dev/null
+               shopt -s dotglob
+               cp -a "$ENVDIR/files/"* "$BASEDIR/files" 2>/dev/null >/dev/null
+               shopt -u dotglob
                cp "$ENVDIR/.config" "$BASEDIR/"
        else
                rm -rf "$BASEDIR/files" "$BASEDIR/.config"
@@ -148,21 +151,20 @@ env_clear() {
 
 env_delete() {
        local name="${1##*/}"
+       env_init
        [ -z "$name" ] && usage
-       [ -f "$envdir/.git/refs/heads/$name" ] || error "environment '$name' not found"
        branch="$(git branch | grep '^\* ' | awk '{print $2}')"
-       [ "$name" = "branch" ] && error "cannot delete the currently selected environment"
+       [ "$name" = "$branch" ] && error "cannot delete the currently selected environment"
        git branch -D "$name"
 }
 
 env_switch() {
        local name="${1##*/}"
        [ -z "$name" ] && usage
-       [ -f "$ENVDIR/.git/refs/heads/$name" ] || error "environment '$name' not found"
 
        env_init
        env_ask_sync
-       git checkout "$name"
+       git checkout "$name" || error "environment '$name' not found"
        env_link_config
 }
 
@@ -190,9 +192,12 @@ env_new() {
        fi
        git checkout -b "$1" "$from"
        if [ -f "$BASEDIR/.config" -o -d "$BASEDIR/files" ]; then
-               if ask_bool 1 "Do you want to keep your current config and files?"; then
+               if ask_bool 1 "Do you want to start your configuration repository with the current configuration?"; then
                        [ -d "$BASEDIR/files" -a \! -L "$BASEDIR/files" ] && {
-                               mv "$BASEDIR/files/"* "$ENVDIR/" 2>/dev/null
+                               mkdir -p "$ENVDIR/files"
+                               shopt -s dotglob
+                               mv "$BASEDIR/files/"* "$ENVDIR/files/" 2>/dev/null
+                               shopt -u dotglob
                                rmdir "$BASEDIR/files"
                        }
                        env_sync