summaryrefslogtreecommitdiff
path: root/merge_conf
blob: 8e888feabdcde2dcf39990ac0e3e83320f116687 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env sh

SUBMODULES=$(git submodule status | sed -E 's/ [a-z0-9]+ ([^ ]+) .*/\1/')
FILES=$(tree -aqifF --noreport --prune .local .config | sed -E '/\/$/d;s/\*$//')

for submodule in ${SUBMODULES}; do
  SS=$(printf '%s' "${submodule}" | sed 's/\//\\\//g;s/\./\\./g')
  FILES=$(printf '%s' "${FILES}" | sed -E "/${SS}/d")
done

function prompt_mergeskip () {
    read -p "Merge $1 with local copy? [y/n]" yn
    case $yn in
      [Yy]*) vimdiff "${HOME}/$1" "$1";;
      [Nn]*) return;;
    esac
}

NEW_FILES=$((0))
CHG_FILES=$((0))

function copy() {
  local FILE="${1}"
  echo -ne "missing $FILE\n"
  read -p "copy to local config? [y/n]:" yn
  case $yn in
    [Yy]*) cp $f ~/$f;;
    [Nn]*) return;;
  esac
}

if [ "$1" = "-c" ]; then
  for f in ${FILES}; do
    [ -e "${HOME}/${f}" ] || NEW_FILES=$(($NEW_FILES + 1))

    diff -q -I 'email|name|signingkey' "${HOME}/${f}" "${f}" >/dev/null
    [ $? -ne 0 ] && CHG_FILES=$(($CHG_FILES + 1))
  done
  printf "New files: %d\nFiles changed: %d\n" "${NEW_FILES}" "${CHG_FILES}"
else
  for f in ${FILES}; do
    [ -e "${HOME}/${f}" ] || copy $f

    diff -q -I 'email|name|signingkey' "${HOME}/${f}" "${f}" >/dev/null
    [ $? -ne 0 ] && prompt_mergeskip "${f}"
  done
fi