Proton/docs/REBASING_TIPS.md

58 lines
2.1 KiB
Markdown
Raw Normal View History

2019-06-19 17:35:27 +03:00
---
Rebasing Proton onto new upstream releases
---
We maintain a lot of patches on top of upstream releases. When cherry-picking
stuff from upstream into Proton, *always* use the `-x` parameter so the
original commit ID is retained in the log message. Contrarily, *never* use `-x`
when picking things that are not upstreamed. This lets us use the cherry-picked
log message as an indicator of which commits can be dropped during a rebase
because they were already upstreamed.
Here's a command which will generate the list of commits that were applied on
top of wine-4.2, which were not backported from upstream Wine:
wine$ git log --pretty=oneline --reverse --grep='cherry pick' --invert-grep wine-4.2..proton_4.2
You can then pick that list (*without* `-x`!) onto a new Wine release tag,
resolving conflicts and such as you go.
Here's a somewhat clumsy script that I think is easier to work with than git's
built-in tools:
#!/bin/bash
# Cherry-picks commits from an input file in --pretty=oneline format.
# Lines that begin with '#' are ignored.
# Aborts when a cherry-pick fails.
# Outputs the same input file on stderr, but with '#' prefixed to lines that were successfully cherry-picked.
#Usage:
# $ pick_commits to_pick 2> ~/to_pick2
# On pick failure, fix conflicts and use "git cherry-pick --continue", or
# otherwise fix up the repo as desired.
# Edit ~/to_pick2 to comment-out the commit that you fixed.
# Continue using the new file:
# $ pick_commits to_pick2 2> ~/to_pick
# Repeat, alternating between to_pick and to_pick2.
broken=0
while read -r l; do
f=$(echo -n "$l" | cut '-d ' -f1 -)
if [ $broken == 0 -a ${f:0:1} != '#' ]; then
echo "Picking $l"
git cherry-pick $f 2>&1
if [ $? -ne 0 ]; then
echo $l 1>&2
broken=1
else
echo '#'$l 1>&2
fi
else
echo $l 1>&2
fi
done < "$1"
Once your Wine rebase is done, update the prefix version in the proton Python
script, resetting the minor version back to 1.