#!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 ##### # 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/{getline; 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