David Blume commited on 2016-01-16 12:03:26
Showing 2 changed files, with 50 additions and 14 deletions.
... | ... |
@@ -24,8 +24,13 @@ If you're not cloning the repo, then run the following: |
24 | 24 |
dotfiles$ tar -xvf dotfiles.tar |
25 | 25 |
dotfiles$ rm dotfiles.tar |
26 | 26 |
|
27 |
-Then, when you run `setup.sh`, it'll backup your old files to `backup_of_dotfiles_<date>` |
|
28 |
-and replace them with the ones here. |
|
27 |
+Then, when you run `setup.sh`, it'll backup your changed files to `backup_of_dotfiles_<date>` |
|
28 |
+and replace them with the ones here. You can perform a **dry run** to see which files will |
|
29 |
+be changed by passing the "-n" parameter. |
|
30 |
+ |
|
31 |
+ dotfiles$ ./setup.sh -n |
|
32 |
+ |
|
33 |
+If you approve of the changes, then just run `setup.sh` |
|
29 | 34 |
|
30 | 35 |
dotfiles$ ./setup.sh |
31 | 36 |
|
... | ... |
@@ -1,39 +1,70 @@ |
1 | 1 |
#!/usr/bin/env bash |
2 | 2 |
set -eu -o pipefail # See: https://sipb.mit.edu/doc/safe-shell/ |
3 | 3 |
|
4 |
+declare -r SCRIPT_NAME=$(basename "$BASH_SOURCE") |
|
4 | 5 |
declare -r backup_dir=$HOME/backup_of_dotfiles_`date "+%Y-%m-%d"` |
5 | 6 |
declare -a dotfiles=(".bashrc" ".bash_profile" ".vimrc" |
6 | 7 |
".gitconfig" ".gitignore" ".inputrc") |
8 |
+declare -i DRY_RUN=0 |
|
9 |
+ |
|
10 |
+## exit the shell (with status 2) after printing the message |
|
11 |
+usage() { |
|
12 |
+ echo "\ |
|
13 |
+$SCRIPT_NAME -hn |
|
14 |
+ -h Print this help text |
|
15 |
+ -n Perform a dry run, to see what'll change |
|
16 |
+" |
|
17 |
+ exit 2; |
|
18 |
+} |
|
19 |
+ |
|
20 |
+## Process the options |
|
21 |
+while getopts "hn" OPTION |
|
22 |
+do |
|
23 |
+ case $OPTION in |
|
24 |
+ h) usage;; |
|
25 |
+ n) DRY_RUN=1;; |
|
26 |
+ \?) usage;; |
|
27 |
+ esac |
|
28 |
+done |
|
7 | 29 |
|
8 | 30 |
if [ ! -d $backup_dir ]; then |
9 |
- mkdir -p $backup_dir |
|
31 |
+ ((DRY_RUN==0)) && mkdir -p $backup_dir |
|
10 | 32 |
fi |
11 | 33 |
|
12 | 34 |
# Move original dot files to backup |
13 | 35 |
for i in "${dotfiles[@]}" |
14 | 36 |
do |
15 | 37 |
if [ -e $HOME/"$i" ]; then |
38 |
+ if ! cmp --silent $HOME/"$i" "$i" ; then |
|
39 |
+ echo "$i" will be changed as follows: |
|
40 |
+ diff $HOME/"$i" "$i" || true |
|
41 |
+ if [ $DRY_RUN -eq 0 ]; then |
|
16 | 42 |
mv $HOME/"$i" $backup_dir |
43 |
+ # Consider using symbolic links instead |
|
44 |
+ # so pulling updates automatically apply |
|
45 |
+ cp "$i" $HOME |
|
46 |
+ fi |
|
47 |
+ else |
|
48 |
+ echo No change to "$i". |
|
49 |
+ fi |
|
50 |
+ else |
|
51 |
+ echo "$i" will be added to HOME. |
|
52 |
+ ((DRY_RUN==0)) && cp "$i" $HOME |
|
17 | 53 |
fi |
18 | 54 |
done |
55 |
+ |
|
56 |
+if [ $DRY_RUN -eq 0 ]; then |
|
19 | 57 |
if [ -d $HOME/.vim ]; then |
20 | 58 |
mv $HOME/.vim $backup_dir |
21 | 59 |
fi |
22 |
- |
|
23 |
-echo Note: Your old dotfiles are backed up to $backup_dir |
|
24 |
- |
|
25 |
-# Move new dot files in. |
|
26 |
-# If you cloned the repo, consider making symbolic links instead, |
|
27 |
-# to more easily keep this home directory current by pulling updates. |
|
28 |
-for i in "${dotfiles[@]}" |
|
29 |
-do |
|
30 |
- cp "$i" $HOME |
|
31 |
-done |
|
32 | 60 |
cp -r .vim $HOME |
61 |
+fi |
|
62 |
+ |
|
63 |
+echo Your old dotfiles are backed up to $backup_dir |
|
33 | 64 |
|
34 | 65 |
# Make a directory for vim undo |
35 | 66 |
if [ ! -d $HOME/.vim_undo ]; then |
36 |
- mkdir -p $HOME/.vim_undo |
|
67 |
+ ((DRY_RUN==0)) && mkdir -p $HOME/.vim_undo |
|
37 | 68 |
fi |
38 | 69 |
|
39 | 70 |
# Tell David what's left. |
40 | 71 |