summaryrefslogtreecommitdiff
path: root/update-kernel-config
blob: 37e414ca0252d451e38c3826774d0755cacdc8d1 (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
#!/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 detemine old upstream git revision.'
  >&2 echo '"# upstream git revision: ..." line is missing.'
  exit 1
fi

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

{
  grep -vxF "$(
    printf '%s\n' "${diff}" | \
      sed -n '
        s/^-//
        T
        p
      '
  )" "/usr/src/archlinux32/packages/$1/$2/config"
  printf '%s\n' "${diff}" | \
    sed -n '
      s/^+//
      T
      p
    '
} | \
  sponge "/usr/src/archlinux32/packages/$1/$2/config"

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
  s/'"$(
    git -C "/usr/src/archlinux32/packages/$1/$2" archive HEAD -- config | \
      tar -Ox | \
      sha256sum | \
      awk '{print $1}'
  )"'/SKIP/g
' "/usr/src/archlinux32/packages/$1/$2/PKGBUILD"