7 Usage: $0 [options] <command> [arguments]
10 list List environments
11 clear Delete all environment and revert to flat config/files
12 new <name> Create a new environment
13 switch <name> Switch to a different environment
14 delete <name> Delete an environment
15 rename <newname> Rename the current environment
16 diff Show differences between current state and environment
17 save Save your changes to the environment
18 revert Revert your changes since last save
32 local DEFAULT
="$1"; shift
35 1) def
=0; defstr
="Y/n";;
36 0) def
=1; defstr
="y/N";;
37 *) def
=; defstr
="y/n";;
39 while [ -z "$val" ]; do
42 echo -n "$* ($defstr): "
55 if [ -z "$CREATE" ]; then
56 [ -d "$ENVDIR" ] ||
exit 0
58 [ -x "$(which git 2>/dev/null)" ] || error
"Git is not installed"
59 mkdir
-p "$ENVDIR" || error
"Failed to create the environment directory"
60 cd "$ENVDIR" || error
"Failed to switch to the environment directory"
66 git commit
-q -m "Initial import"
69 error
"Failed to initialize the environment directory"
74 [ \
! -L "$BASEDIR/.config" -a -f "$BASEDIR/.config" ] && mv "$BASEDIR/.config" "$ENVDIR"
82 git commit
-m "${STR:-Update} at $(date)"
86 rm -f "$BASEDIR/.config"
87 ln -s env
/.config
"$BASEDIR/.config"
88 mkdir
-p "$ENVDIR/files"
89 [ -L "$BASEDIR/files" ] ||
ln -s env
/files
"$BASEDIR/files"
99 git branch |
grep -vE '^. master$'
123 LINES
="$(env_diff | wc -l)" # implies env_init
124 [ "$LINES" -gt 0 ] && {
125 if ask_bool
1 "Do you want to save your changes"; then
135 [ -L "$BASEDIR/.config" ] && rm -f "$BASEDIR/.config"
136 [ -L "$BASEDIR/files" ] && rm -f "$BASEDIR/files"
137 [ -f "$ENVDIR/.config" ] ||
( cd "$ENVDIR/files" && find |
grep -vE '^\.$' > /dev
/null
)
139 if ask_bool
1 "Do you want to keep your current config and files"; then
140 mkdir
-p "$BASEDIR/files"
141 cp -a "$ENVDIR/files/*" "$BASEDIR/files" 2>/dev
/null
>/dev
/null
142 cp "$ENVDIR/.config" "$BASEDIR/"
144 rm -rf "$BASEDIR/files" "$BASEDIR/.config"
151 local name
="${1##*/}"
153 [ -z "$name" ] && usage
154 branch
="$(git branch | grep '^\* ' | awk '{print $2}')"
155 [ "$name" = "$branch" ] && error
"cannot delete the currently selected environment"
156 git branch
-D "$name"
160 local name
="${1##*/}"
161 [ -z "$name" ] && usage
165 git checkout
"$name" || error
"environment '$name' not found"
170 local NAME
="${1##*/}"
172 git branch
-m "$NAME"
180 [ -z "$NAME" ] && usage
183 branch
="$(git branch | grep '^\* ' | awk '{print $2}')"
184 if [ -n "$branch" -a "$branch" != "master" ]; then
186 if ask_bool
0 "Do you want to clone the current environment?"; then
189 rm -f "$BASEDIR/.config" "$BASEDIR/files"
191 git checkout
-b "$1" "$from"
192 if [ -f "$BASEDIR/.config" -o -d "$BASEDIR/files" ]; then
193 if ask_bool
1 "Do you want to keep your current config and files?"; then
194 [ -d "$BASEDIR/files" -a \
! -L "$BASEDIR/files" ] && {
195 mv "$BASEDIR/files/"* "$ENVDIR/" 2>/dev
/null
196 rmdir "$BASEDIR/files"
200 rm -rf "$BASEDIR/.config" "$BASEDIR/files"
210 list
) env_list
"$@";;
211 clear) env_clear
"$@";;
212 switch
) env_switch
"$@";;
213 delete
) env_delete
"$@";;
214 rename
) env_rename
"$@";;
215 diff) env_diff
"$@";;
216 save
) env_save
"$@";;
217 revert
) env_revert
"$@";;