Proton/docs/REBASING_TIPS.md
2019-08-23 09:57:46 -05:00

2.1 KiB

Rebasing Proton onto new upstream releases
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.