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$'
121 LINES
="$(env_diff | wc -l)" # implies env_init
122 [ "$LINES" -gt 0 ] && {
123 if ask_bool
1 "Do you want to save your changes"; then
134 [ -L "$BASEDIR/.config" ] && rm -f "$BASEDIR/.config"
135 [ -L "$BASEDIR/files" ] && rm -f "$BASEDIR/files"
136 [ -f "$ENVDIR/.config" ] ||
( cd "$ENVDIR/files" && find |
grep -vE '^\.$' > /dev
/null
)
138 if ask_bool
1 "Do you want to keep your current config and files"; then
139 mkdir
-p "$BASEDIR/files"
140 cp -a "$ENVDIR/files/*" "$BASEDIR/files" 2>/dev
/null
>/dev
/null
141 cp "$ENVDIR/.config" "$BASEDIR/"
143 rm -rf "$BASEDIR/files" "$BASEDIR/.config"
150 local name
="${1##*/}"
152 [ -z "$name" ] && usage
153 [ -f "$ENVDIR/.git/refs/heads/$name" ] || error
"environment '$name' not found"
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
162 [ -f "$ENVDIR/.git/refs/heads/$name" ] || error
"environment '$name' not found"
171 local NAME
="${1##*/}"
173 git branch
-m "$NAME"
181 [ -z "$NAME" ] && usage
184 branch
="$(git branch | grep '^\* ' | awk '{print $2}')"
185 if [ -n "$branch" -a "$branch" != "master" ]; then
187 if ask_bool
0 "Do you want to clone the current environment?"; then
190 rm -f "$BASEDIR/.config" "$BASEDIR/files"
192 git checkout
-b "$1" "$from"
193 if [ -f "$BASEDIR/.config" -o -d "$BASEDIR/files" ]; then
194 if ask_bool
1 "Do you want to keep your current config and files?"; then
195 [ -d "$BASEDIR/files" -a \
! -L "$BASEDIR/files" ] && {
196 mv "$BASEDIR/files/"* "$ENVDIR/" 2>/dev
/null
197 rmdir "$BASEDIR/files"
201 rm -rf "$BASEDIR/.config" "$BASEDIR/files"
211 list
) env_list
"$@";;
212 clear) env_clear
"$@";;
213 switch
) env_switch
"$@";;
214 delete
) env_delete
"$@";;
215 rename
) env_rename
"$@";;
216 diff) env_diff
"$@";;
217 save
) env_save
"$@";;
218 revert
) env_revert
"$@";;
This page took 0.061193 seconds and 5 git commands to generate.