mirror of
https://github.com/ValveSoftware/Proton.git
synced 2024-12-27 23:25:50 +03:00
58 lines
2.1 KiB
Markdown
58 lines
2.1 KiB
Markdown
|
---
|
||
|
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.
|