123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #!/bin/bash -e
- #
- # get-latest-series: Download latest patch series from Patchwork
- #
- # Copyright (C) 2023 BayLibre Inc.
- #
- # SPDX-License-Identifier: GPL-2.0-only
- #
- # the interval into the past which we want to check for new series, in minutes
- INTERVAL_MINUTES=30
- # Maximum number of series to retrieve. the Patchwork API can support up to 250
- # at once
- SERIES_LIMIT=250
- # Location to save patches
- DOWNLOAD_PATH="."
- # Name of the file to use/check as a log of previously-tested series IDs
- SERIES_TEST_LOG=".series_test.log"
- # Patchwork project to pull series patches from
- PROJECT="oe-core"
- # The Patchwork server to pull from
- SERVER="https://patchwork.yoctoproject.org/api/1.2/"
- help()
- {
- echo "Usage: get-latest-series [ -i | --interval MINUTES ]
- [ -d | --directory DIRECTORY ]
- [ -l | --limit COUNT ]
- [ -h | --help ]
- [ -t | --tested-series LOGFILE]
- [ -p | --project PROJECT ]
- [ -s | --server SERVER ]"
- exit 2
- }
- while [ "$1" != "" ]; do
- case $1 in
- -i|--interval)
- INTERVAL_MINUTES=$2
- shift 2
- ;;
- -l|--limit)
- SERIES_LIMIT=$2
- shift 2
- ;;
- -d|--directory)
- DOWNLOAD_PATH=$2
- shift 2
- ;;
- -p|--project)
- PROJECT=$2
- shift 2
- ;;
- -s|--server)
- SERVER=$2
- shift 2
- ;;
- -t|--tested-series)
- SERIES_TEST_LOG=$2
- shift 2
- ;;
- -h|--help)
- help
- ;;
- *)
- echo "Unknown option $1"
- help
- ;;
- esac
- done
- # The time this script is running at
- START_TIME=$(date --date "now" +"%Y-%m-%dT%H:%M:%S")
- # the corresponding timestamp we want to check against for new patch series
- SERIES_CHECK_LIMIT=$(date --date "now - ${INTERVAL_MINUTES} minutes" +"%Y-%m-%dT%H:%M:%S")
- echo "Start time is $START_TIME"
- echo "Series check limit is $SERIES_CHECK_LIMIT"
- # Create DOWNLOAD_PATH if it doesn't exist
- if [ ! -d "$DOWNLOAD_PATH" ]; then
- mkdir "${DOWNLOAD_PATH}"
- fi
- # Create SERIES_TEST_LOG if it doesn't exist
- if [ ! -f "$SERIES_TEST_LOG" ]; then
- touch "${SERIES_TEST_LOG}"
- fi
- # Retrieve a list of series IDs from the 'git-pw series list' output. The API
- # supports a maximum of 250 results, so make sure we allow that when required
- SERIES_LIST=$(git-pw --project "${PROJECT}" --server "${SERVER}" series list --since "${SERIES_CHECK_LIMIT}" --limit "${SERIES_LIMIT}" | awk '{print $2}' | xargs | sed -e 's/[^0-9 ]//g')
- if [ -z "$SERIES_LIST" ]; then
- echo "No new series for project ${PROJECT} since ${SERIES_CHECK_LIMIT}"
- exit 0
- fi
- # Check each series ID
- for SERIES in $SERIES_LIST; do
- # Download the series only if it's not found in the SERIES_TEST_LOG
- if ! grep -w --quiet "${SERIES}" "${SERIES_TEST_LOG}"; then
- echo "Downloading $SERIES..."
- git-pw series download --separate "${SERIES}" "${DOWNLOAD_PATH}"
- echo "${SERIES}" >> "${SERIES_TEST_LOG}"
- else
- echo "Already tested ${SERIES}. Skipping..."
- fi
- done
|