summaryrefslogtreecommitdiff
path: root/scripts/mk-patch.sh
blob: 2cd452903c85d40c401fd7edcaeb9c669ee35dfe (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
#!/bin/sh

repos="$1"
pdir="$2"
if [ -z "${repos}" -o ! -d "${repos}" -o -z "${pdir}" -o ! -d "${pdir}" ];then
    printf "Usage: ${0##*/} <repos_dir> <patch_dir>\n"
    exit 1
fi

pdir="$( cd "${pdir}"; pwd)"
version="$( echo "${pdir}" |sed -r -e 's,.*/([^/]+)/*$,\1,' )"
branch="${version%.*}"
n=$( ls -1 "${pdir}" 2>/dev/null |wc -l )

r1="$( hg -R "${repos}" log -b "${branch}"  \
       |awk '
            $1=="changeset:" {
                prev=rev;
                split($2,a,":");
                rev=a[1];
            }
            $0~/^summary:[[:space:]]+'"${branch}: (bump|update) version to ${version}\+hg"'$/ {
                printf( "%d\n", prev );
            }
            '
     )"

i=0
hg -R "${repos}" log -b "${branch}" -r "${r1}:tip" --template '{rev}\n'    \
|while read rev; do
    p="$( printf "%03d" ${i} )"
    i=$((i+1))
    if [ $( ls -1 "${pdir}/${p}-"*.patch 2>/dev/null |wc -l ) -ne 0 ]; then
        continue
    fi
    plog=$( hg -R "${repos}" log -r ${rev} --template '{desc|firstline}\n'  \
            |sed -r -e 's,[/ :]+,_,g;'                                      \
          )
    pname="${p}-${plog}.patch"
    printf "Revision '%d' --> '%s'\n" ${rev} "${pname}"
    hg -R "${repos}" diff -c ${rev} --color=never >"${pdir}/${pname}"
    pdate="$( hg -R "${repos}" log -r ${rev} --template '{date|isodate}\n' )"
    touch -d "${pdate}" "${pdir}/${pname}"
done