#!this_is_not_really_a_script
echo this is not really a script, run the steps by hand as there are manual steps
exit 1

###############################################################################
# Copyright (c) 2018, 2020 Kichwa Coders Ltd and others.
#
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
###############################################################################


#####
# Prerequisites
# - Python installed and on PATH
# - EASE + Py4J adapter from http://download.eclipse.org/ease/update/release select the following:
#   - EASE Language Support -> EASE Py4J Support (Incubation)
#   - EASE Modules -> Ease Modules (Incubation)
# - ECLIPSE environment variable set to path to eclipse
#   - or update the script below
# - Import formattersettings.xml and cleanupsettings.xml into your workspace and set Formatter and Cleanup actions to CDT

# Default ECLIPSE if not set
: ${ECLIPSE:=/scratch/eclipse/eclipse-committers-2018-12-M2/eclipse}

#####
# Step 1: Checkout the commit you want to rebase
git checkout FETCH_HEAD

#####
# Step 2: Get the patch in the new CDT code formatting standard on a new branch 'commit_to_rebase'
git checkout -b commit_to_rebase
# Rebase change onto this commit, where all the formatter settings and EPLv2 is done, but the
# code has not been formatted yet. If your original commit is not too far behind this
# will finish without conflicts.
git rebase 35996a5c5ca5c254959ba48241eaada6dbf8628d

##
# Run code cleanup/formatting on all the Java files in the commit
# A. Close all open editors in Eclipse
# B. Open all filed modified in the commit
git diff-tree --no-commit-id --name-only -r commit_to_rebase -- *.java | xargs $ECLIPSE
# C. Run cleanup.py on them using Eclipse EASE
# D. Remove trailing whitespace on all relevant files
git show master:.gitattributes | awk '/# remove trailing whitespace/{do getline; while ($0 ~ /^#/); print $1}' |
    while read i ; do
        echo "Removing trailing whitespace on $i files"
        git diff-tree --no-commit-id --name-only -r commit_to_rebase -- "$i" | xargs --no-run-if-empty sed -i 's/[ \t]*$//'
    done

##
# Save the formatting on the branch
git add -u
git commit --amend --reuse-message=HEAD


#####
# Step 3: Create a commit that has only the files edited cleaned up, but no other ones
# Start by checking out to a new branch the same commit as above with the formatter settings
git checkout 35996a5c5ca5c254959ba48241eaada6dbf8628d -b commit_to_format

##
# Run cleanup + trailing whitespace removal as above (Step 2 A-D)

##
# Save the files which are now formatted, but without the change you wish to rebase in a commit
git add -u
git commit -m"formatted files"

#####
# Step 4: Apply the change so you have a history on commit_to_format branch that is two ahead of 35996a5c5c
#   the first being the formatted files, the second being the change we are trying to get onto master
# Diff the two branches we just made, that diff is the real work you are trying to get on master, and apply
# that diff
git diff commit_to_format..commit_to_rebase | git apply
# Save the edit, reusing your original commit message (and therefore Change-Id!)
git add -u
git commit --reuse-message=commit_to_rebase

#####
# Step 5: Cherry-pick the new commit onto master
git checkout master
git cherry-pick commit_to_format

#####
# Step 6: Push commit to gerrit
git push origin master:refs/for/master

#####
# Step 7: Cleanup
git branch -D commit_to_rebase
git branch -D commit_to_format
