51 lines
1.6 KiB
Bash
Executable File
51 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
|
|
# Generates single-file from-scratch and delta update files for all or some of the
|
|
# refs in an OSTree repo.
|
|
#
|
|
# To use it run "generate-deltas REPODIR DESTDIR" which will look at all the refs in the
|
|
# repo and make updates to the latest version putting them in the DESTDIR directory.
|
|
|
|
# To apply these on a live system, do something like:
|
|
# $ ostree static-delta apply-offline cs9-x86_64-qemu-upgrade-demo-79da0b2f1b119e99137eaef9680fae9820a9edcd5cac4f6d7c23279498c578f6.update
|
|
# $ rpm-ostree rebase 79da0b2f1b119e99137eaef9680fae9820a9edcd5cac4f6d7c23279498c578f6
|
|
|
|
if [ "$#" -lt 2 ]; then
|
|
echo "Usage generate-deltas REPODIR DESTDIR [REFS..]"
|
|
exit 1
|
|
fi
|
|
|
|
REPO=$1
|
|
DIR=$2
|
|
|
|
shift 2
|
|
|
|
if [ "$#" -gt 0 ]; then
|
|
REFS="$@"
|
|
else
|
|
REFS=$(ostree --repo=$REPO refs)
|
|
fi
|
|
|
|
mkdir -p $DIR
|
|
|
|
NUM_DELTAS=3
|
|
for REF in $REFS; do
|
|
REF_AS_FILE=$(echo $REF | sed "s%/%-%g" )
|
|
HEAD=$(ostree --repo=$REPO rev-parse $REF)
|
|
|
|
# Generate full update for HEAD:
|
|
echo Generating non-delta update for $REF commit $HEAD
|
|
ostree static-delta generate --repo=$REPO --inline --min-fallback-size=0 --empty --filename=$DIR/$REF_AS_FILE-$HEAD.update $HEAD
|
|
|
|
# Generate deltas to HEAD from up to the last 3 parents
|
|
PARENT=$HEAD
|
|
for i in seq $NUM_DELTAS; do
|
|
if ! PARENT=$(ostree --repo=$REPO rev-parse $PARENT^ 2>/dev/null); then
|
|
break;
|
|
fi
|
|
echo Generating delta update for $REF commit $HEAD from commit $PARENT
|
|
ostree static-delta generate --repo=$REPO --inline --min-fallback-size=0 --from=$PARENT --filename=$DIR/$REF_AS_FILE-$PARENT-$HEAD.update $HEAD
|
|
done
|
|
|
|
done
|