From 7c15babf4033918a227451170912ed091dad685f Mon Sep 17 00:00:00 2001 From: Andrii Nakryiko Date: Thu, 28 Mar 2019 16:40:41 -0700 Subject: [PATCH] scripts/sync_kernel.sh: skip empty merges, preventing cherry-picking Merges are common. `git cherry-pick` can't cherry-pick merge commit and requires specifying which of the parents should be cherry-picked, so it's a pain. But merges are also commonly empty, so it's safe to skip them. This change goes through all merges touching libbpf files, checks that they don't have any conflict resolution diffs. If there are any, abort, if not, proceed as usual, ignoring merges. Signed-off-by: Andrii Nakryiko --- scripts/sync-kernel.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/sync-kernel.sh b/scripts/sync-kernel.sh index 16b6158..74d3342 100755 --- a/scripts/sync-kernel.sh +++ b/scripts/sync-kernel.sh @@ -66,7 +66,18 @@ 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,netlink.h} tools/include/tools/libc_compat.h) -LIBBPF_NEW_COMMITS=$(git rev-list --topo-order --reverse ${BASELINE_TAG}..${TIP_TAG} ${LIBBPF_PATHS[@]}) + +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} + MERGE_CHANGES=$(git log --format='' -n1 ${LIBBPF_NEW_MERGE} | wc -l) + if ((${MERGE_CHANGES} > 0)); then + echo "Merge is non empty, aborting!.." + exit 3 + fi +done + +LIBBPF_NEW_COMMITS=$(git rev-list --no-merges --topo-order --reverse ${BASELINE_TAG}..${TIP_TAG} ${LIBBPF_PATHS[@]}) for LIBBPF_NEW_COMMIT in ${LIBBPF_NEW_COMMITS}; do git cherry-pick ${LIBBPF_NEW_COMMIT} done