From 342bcfa319b8f19e8f7092e4e36a6ef765d4c040 Mon Sep 17 00:00:00 2001 From: Andrii Nakryiko Date: Thu, 8 Aug 2019 15:11:01 -0700 Subject: [PATCH] sync: centralize kernel-to-github paths mapping Use associative array (requires at least bash 4) to centralize mapping of paths between kernel's libbpf layout and the one on Github. This minimizes the chance of all those mappings getting out of sync (which happened twice before). Signed-off-by: Andrii Nakryiko --- scripts/sync-kernel.sh | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/scripts/sync-kernel.sh b/scripts/sync-kernel.sh index f9651c9..334c570 100755 --- a/scripts/sync-kernel.sh +++ b/scripts/sync-kernel.sh @@ -19,6 +19,28 @@ fi set -eu +declare -A PATH_MAP +PATH_MAP=( \ + [tools/lib/bpf]=src \ + [tools/include/uapi/linux/bpf_common.h]=include/uapi/linux/bpf_common.h \ + [tools/include/uapi/linux/bpf.h]=include/uapi/linux/bpf.h \ + [tools/include/uapi/linux/btf.h]=include/uapi/linux/btf.h \ + [tools/include/uapi/linux/if_link.h]=include/uapi/linux/if_link.h \ + [tools/include/uapi/linux/if_xdp.h]=include/uapi/linux/if_xdp.h \ + [tools/include/uapi/linux/netlink.h]=include/uapi/linux/netlink.h \ + [tools/include/tools/libc_compat.h]=include/tools/libc_compat.h \ +) + +LIBBPF_PATHS="${!PATH_MAP[@]}" +LIBBPF_VIEW_PATHS="${PATH_MAP[@]}" +LIBBPF_VIEW_EXCLUDE_REGEX='^src/(Makefile|Build|test_libbpf.cpp|\.gitignore)$' + +LIBBPF_TREE_FILTER="mkdir -p __libbpf/include/uapi/linux __libbpf/include/tools && "$'\\\n' +for p in "${!PATH_MAP[@]}"; do + LIBBPF_TREE_FILTER+="git mv -kf ${p} __libbpf/${PATH_MAP[${p}]} && "$'\\\n' +done +LIBBPF_TREE_FILTER+="git rm --ignore-unmatch -f __libbpf/src/{Makefile,Build,test_libbpf.cpp,.gitignore}" + WORKDIR=$(pwd) trap "cd ${WORKDIR}; exit" INT TERM EXIT @@ -65,8 +87,6 @@ git branch ${SQUASH_BASE_TAG} ${SQUASH_COMMIT} git checkout -b ${SQUASH_TIP_TAG} ${SQUASH_COMMIT} # Cherry-pick new commits onto squashed baseline commit -LIBBPF_PATHS=(tools/lib/bpf tools/include/uapi/linux/{bpf_common.h,bpf.h,btf.h,if_link.h,if_xdp.h,netlink.h} tools/include/tools/libc_compat.h) - LIBBPF_NEW_MERGES=$(git rev-list --merges --topo-order --reverse ${BASELINE_TAG}..${TIP_TAG} ${LIBBPF_PATHS[@]}) for LIBBPF_NEW_MERGE in ${LIBBPF_NEW_MERGES}; do printf "MERGE:\t" && git log --oneline -n1 ${LIBBPF_NEW_MERGE} @@ -104,14 +124,6 @@ for LIBBPF_NEW_COMMIT in ${LIBBPF_NEW_COMMITS}; do fi done -LIBBPF_TREE_FILTER=' \ - mkdir -p __libbpf/include/uapi/linux __libbpf/include/tools && \ - git mv -kf tools/lib/bpf __libbpf/src && \ - git mv -kf tools/include/uapi/linux/{bpf_common.h,bpf.h,btf.h,if_link.h,if_xdp.h,netlink.h} \ - __libbpf/include/uapi/linux && \ - git mv -kf tools/include/tools/libc_compat.h __libbpf/include/tools && \ - git rm --ignore-unmatch -f __libbpf/src/{Makefile,Build,test_libbpf.cpp,.gitignore} \ -' # Move all libbpf files into __libbpf directory. git filter-branch --prune-empty -f --tree-filter "${LIBBPF_TREE_FILTER}" ${SQUASH_TIP_TAG} ${SQUASH_BASE_TAG} # Make __libbpf a new root directory @@ -151,8 +163,6 @@ git commit --file=- echo "SUCCESS! ${COMMIT_CNT} commits synced." echo "Verifying Linux's and Github's libbpf state" -LIBBPF_VIEW_PATHS=(src include/uapi/linux/{bpf_common.h,bpf.h,btf.h,if_link.h,if_xdp.h,netlink.h} include/tools/libc_compat.h) -LIBBPF_VIEW_EXCLUDE_REGEX='^src/(Makefile|Build|test_libbpf.cpp|\.gitignore)$' cd ${WORKDIR} && cd ${LINUX_REPO} LINUX_ABS_DIR=$(pwd)