• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:git

4 	echo "USAGE: ./sync-kernel.sh <libbpf-repo> <kernel-repo> <bpf-branch>"
6 …echo "Set BPF_NEXT_BASELINE to override bpf-next tree commit, otherwise read from <libbpf-repo>/CH…
7 …BPF_BASELINE to override bpf tree commit, otherwise read from <libbpf-repo>/BPF-CHECKPOINT-COMMIT."
8 echo "Set MANUAL_MODE to 1 to manually control every cherry-picked commits."
12 set -eu
14 LIBBPF_REPO=${1-""}
15 LINUX_REPO=${2-""}
16 BPF_BRANCH=${3-""}
17 BASELINE_COMMIT=${BPF_NEXT_BASELINE:-$(cat ${LIBBPF_REPO}/CHECKPOINT-COMMIT)}
18 BPF_BASELINE_COMMIT=${BPF_BASELINE:-$(cat ${LIBBPF_REPO}/BPF-CHECKPOINT-COMMIT)}
20 if [ -z "${LIBBPF_REPO}" ] || [ -z "${LINUX_REPO}" ]; then
24 if [ -z "${BPF_BRANCH}" ]; then
28 if [ -z "${BASELINE_COMMIT}" ] || [ -z "${BPF_BASELINE_COMMIT}" ]; then
29 echo "Error: bpf or bpf-next baseline commits are not provided"
33 SUFFIX=$(date --utc +%Y-%m-%dT%H-%M-%S.%3NZ)
35 TMP_DIR=$(mktemp -d)
39 declare -A PATH_MAP
60 LIBBPF_TREE_FILTER="mkdir -p __libbpf/include/uapi/linux __libbpf/include/tools && "$'\\\n'
62 LIBBPF_TREE_FILTER+="git mv -kf ${p} __libbpf/${PATH_MAP[${p}]} && "$'\\\n'
64 LIBBPF_TREE_FILTER+="git rm --ignore-unmatch -f __libbpf/src/{Makefile,Build,test_libbpf.c,.gitigno…
71 # Output brief single-line commit description
72 # $1 - commit ref
75 git log -n1 --pretty='%h ("%s")' $1
78 # Create commit single-line signature, which consists of:
79 # - full commit subject
80 # - author date in ISO8601 format
81 # - full commit body with newlines replaced with vertical bars (|)
82 # - shortstat appended at the end
83 # The idea is that this single-line signature is good enough to make final
85 # $1 - commit ref
86 # $2 - paths filter
91 git show --pretty='("%s")|%aI|%b' --shortstat $ref -- "${@-.}" | tr '\n' '|'
94 # Cherry-pick commits touching libbpf-related files
95 # $1 - baseline_tag
96 # $2 - tip_tag
99 local manual_mode=${MANUAL_MODE:-0}
110 …new_commits=$(git rev-list --no-merges --topo-order --reverse ${baseline_tag}..${tip_tag} -- "${LI…
114 synced_cnt=$(grep -F "${signature}" ${TMP_DIR}/libbpf_commits.txt | wc -l)
120 grep -F "${signature}" ${TMP_DIR}/libbpf_commits.txt | \
121 cut -d'|' -f1 | sed -e 's/^/- /'
127 echo "'${desc} matches multiple commits, please, double-check!"
132 read -p "Do you want to skip '${desc}'? [y/N]: " should_skip
142 if ! git cherry-pick ${new_commit} &>/dev/null; then
143 …echo "Warning! Cherry-picking '${desc} failed, checking if it's non-libbpf files causing problems.…
144 libbpf_conflict_cnt=$(git diff --name-only --diff-filter=U -- "${LIBBPF_PATHS[@]}" | wc -l)
145 conflict_cnt=$(git diff --name-only | wc -l)
149 echo "Looks like only non-libbpf files have conflicts, ignoring..."
151 echo "Empty cherry-pick, skipping it..."
152 git cherry-pick --abort
156 git add .
158 if ! GIT_EDITOR=true git cherry-pick --continue &>/dev/null; then
161 echo "Success! All cherry-pick conflicts were resolved for '${desc}'!"
167 …read -p "Error! Cherry-picking '${desc}' failed, please fix manually and press <return> to proceed…
170 # Append signature of just cherry-picked commit to avoid
171 # potentially cherry-picking the same commit twice later when
175 echo LINUX_$(git log --pretty='%h' -n1) "${signature}" >> ${TMP_DIR}/libbpf_commits.txt
182 rm -r ${TMP_DIR}
184 git checkout ${TIP_SYM_REF}
185 git branch -D ${BASELINE_TAG} ${TIP_TAG} ${BPF_BASELINE_TAG} ${BPF_TIP_TAG} \
196 for h in $(git log --pretty='%h' -n500); do
203 TIP_SYM_REF=$(git symbolic-ref -q --short HEAD || git rev-parse HEAD)
204 TIP_COMMIT=$(git rev-parse HEAD)
205 BPF_TIP_COMMIT=$(git rev-parse ${BPF_BRANCH})
206 BASELINE_TAG=libbpf-baseline-${SUFFIX}
207 TIP_TAG=libbpf-tip-${SUFFIX}
208 BPF_BASELINE_TAG=libbpf-bpf-baseline-${SUFFIX}
209 BPF_TIP_TAG=libbpf-bpf-tip-${SUFFIX}
210 VIEW_TAG=libbpf-view-${SUFFIX}
211 LIBBPF_SYNC_TAG=libbpf-sync-${SUFFIX}
214 SQUASH_BASE_TAG=libbpf-squash-base-${SUFFIX}
215 SQUASH_TIP_TAG=libbpf-squash-tip-${SUFFIX}
216 SQUASH_COMMIT=$(git commit-tree ${BASELINE_COMMIT}^{tree} -m "BASELINE SQUASH ${BASELINE_COMMIT}")
238 git branch ${BASELINE_TAG} ${BASELINE_COMMIT}
239 git branch ${TIP_TAG} ${TIP_COMMIT}
240 git branch ${BPF_BASELINE_TAG} ${BPF_BASELINE_COMMIT}
241 git branch ${BPF_TIP_TAG} ${BPF_TIP_COMMIT}
242 git branch ${SQUASH_BASE_TAG} ${SQUASH_COMMIT}
243 git checkout -b ${SQUASH_TIP_TAG} ${SQUASH_COMMIT}
245 # Cherry-pick new commits onto squashed baseline commit
250 FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch --prune-empty -f --tree-filter "${LIBBPF_TREE_FIL…
252 FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch --prune-empty -f --subdirectory-filter __libbpf $…
254 # If there are no new commits with libbpf-related changes, bail out
255 COMMIT_CNT=$(git rev-list --count ${SQUASH_BASE_TAG}..${SQUASH_TIP_TAG})
263 git format-patch ${SQUASH_BASE_TAG}..${SQUASH_TIP_TAG} --cover-letter -o ${TMP_DIR}/patches
265 # Now is time to re-apply libbpf-related linux patches to libbpf repo
267 git checkout -b ${LIBBPF_SYNC_TAG}
269 for patch in $(ls -1 ${TMP_DIR}/patches | tail -n +2); do
270 if ! git am -3 --committer-date-is-author-date "${TMP_DIR}/patches/${patch}"; then
271 if ! patch -p1 --merge < "${TMP_DIR}/patches/${patch}"; then
272 …read -p "Applying ${TMP_DIR}/patches/${patch} failed, please resolve manually and press <return> t…
274 git am --continue
281 git checkout ${TIP_TAG}
282 # re-generate bpf_helper_defs.h
284 "${LINUX_ABS_DIR}/scripts/bpf_doc.py" --header \
285 --file include/uapi/linux/bpf.h > src/bpf_helper_defs.h
287 helpers_changes=$(git status --porcelain src/bpf_helper_defs.h | wc -l)
289 git add src/bpf_helper_defs.h
290 git commit -s -m "sync: auto-generate latest BPF helpers
293 " -- src/bpf_helper_defs.h
296 # Use generated cover-letter as a template for "sync commit" with
299 echo ${TIP_COMMIT} > CHECKPOINT-COMMIT && \
300 echo ${BPF_TIP_COMMIT} > BPF-CHECKPOINT-COMMIT && \
301 git add CHECKPOINT-COMMIT && \
302 git add BPF-CHECKPOINT-COMMIT && \
303 awk '/\*\*\* BLURB HERE \*\*\*/ {p=1} p' ${TMP_DIR}/patches/0000-cover-letter.patch | \
308 Baseline bpf-next commit: ${BASELINE_COMMIT}\n\
309 Checkpoint bpf-next commit: ${TIP_COMMIT}\n\
312 git commit -s --file=-
319 git checkout -b ${VIEW_TAG} ${TIP_COMMIT}
320 FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch -f --tree-filter "${LIBBPF_TREE_FILTER}" ${VIEW_T…
321 FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch -f --subdirectory-filter __libbpf ${VIEW_TAG}^..$…
322 git ls-files -- "${LIBBPF_VIEW_PATHS[@]}" | grep -v -E "${LINUX_VIEW_EXCLUDE_REGEX}" > ${TMP_DIR}/l…
325 git ls-files -- "${LIBBPF_VIEW_PATHS[@]}" | grep -v -E "${LIBBPF_VIEW_EXCLUDE_REGEX}" > ${TMP_DIR}/…
328 diff -u ${TMP_DIR}/linux-view.ls ${TMP_DIR}/github-view.ls
331 for F in $(cat ${TMP_DIR}/linux-view.ls); do
332 if ! diff -u "${LINUX_ABS_DIR}/${F}" "${GITHUB_ABS_DIR}/${F}"; then
342 read -p "Does everything look good? [y/N]: " ignore_inconsistency