Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/update-kernel-config
blob: 3fed8525539721ffd9347c398a8f8b41c1280a00 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash

if [ $# -ne 2 ]; then
  >&2 echo 'usage: update-kernel-config [repository] [kernel-name]'
  exit 2
fi

old_revision=$(
  sed -n '
    s/^# upstream git\( revision\)\?: *//
    T
    p
  ' "/usr/src/archlinux32/packages/$1/$2/PKGBUILD"
)

if [ -z "${old_revision}" ]; then
  >&2 echo 'Cannot determine old upstream git revision.'
  >&2 echo '"# upstream git revision: ..." line is missing.'
  exit 1
fi

config_names=$(
  git -C "/usr/src/archlinux32/packages/$1/$2" archive HEAD -- | \
    tar -t | \
    grep '^config\($\|\.\)'
)

diff=$(
  git -C "/usr/src/archlinux/packages/$2/repos/$1-x86_64" diff "${old_revision}" HEAD -- config | \
    grep '^[+-].' | \
    grep -v '^+++\|^---'
)

if [ -z "${diff}" ]; then
  >&2 echo 'nothing changed.'
  exit 1
fi

for config_name in ${config_names}; do
  {
    grep -vxF "$(
      printf '%s\n' "${diff}" | \
        sed -n '
          s/^-//
          T
          p
        '
    )" "/usr/src/archlinux32/packages/$1/$2/${config_name}"
    printf '%s\n' "${diff}" | \
      sed -n '
        s/^+//
        T
        p
      '
  } | \
    sponge "/usr/src/archlinux32/packages/$1/$2/${config_name}"
done

sed -i '
  1 s/^#.*$/# upstream git revision: '"$(
    git -C "/usr/src/archlinux/packages" rev-parse HEAD
  )"'/
  s/'"$(
    git -C "/usr/src/archlinux/packages/$2/repos/$1-x86_64" archive "${old_revision}" -- config | \
      tar -Ox | \
      sha256sum | \
      awk '{print $1}'
  )"'/'"$(
    git -C "/usr/src/archlinux/packages/$2/repos/$1-x86_64" archive HEAD -- config | \
      tar -Ox | \
      sha256sum | \
      awk '{print $1}'
  )"'/g
  '"$(
    for config_name in ${config_names}; do
      printf 's/'
      git -C "/usr/src/archlinux32/packages/$1/$2" archive HEAD -- "${config_name}" | \
        tar -Ox | \
        sha256sum | \
        awk '{print $1}' | \
        tr -d '\n'
      printf '/SKIP/g\n'
    done
  )" "/usr/src/archlinux32/packages/$1/$2/PKGBUILD"