Stubbisms – Tony’s Weblog

July 30, 2008

git rebase, svn and whitespace

Filed under: Java — Tags: , , , , — Antony Stubbs @ 10:35 pm

Working behind a svn repository using the excellent git-svn tool and in a Windows environment, you inevitably run into the problem of trailing whitespace.

Depending on your goals, the first step is to disable the pre-commit hook that checks for it in .git/pre/hooks/pre-commit. easy.

I ran into another interesting whitespace problem when I was running the git-rebase command. Basically the first stage worked fine, but when git went to apply the generated patch it failed complaining about various:

error: NotificationService/launchConfigs/All JUnits.launch: does not match index

and

warning: squelched 104 whitespace errors
warning: 109 lines add whitespace errors.

and

error: Entry 'NotificationService/launchConfigs/All JUnits.launch' not uptodate. Cannot merge.

This is all very strange, because the patch should apply cleanly without any problem as there is no chance to modify any of these files during the process.

Short story was that after an initial panic, I thought back and remembered about the

core.whitespace

setting.

By running:

git-config core.whitespace=nowarn

You are telling git to ignore whitespace issues. I’m quite sure my problem was by git trying to fix them / translate them for during the rebase process.

If you look at

man git-apply

you can see one of the options is:

fix outputs warnings for a few such errors, and applies the patch after fixing
them (strip is a synonym --- the tool used to consider only trailing whitespaces as
errors, and the fix involved stripping them, but modern gits do more).

I believe this may have something to do with this bug in msysgit – “Problems patching for git rebase / git am”.

The work flow went like this:

stubbsa@VFNZV95336 /cygdrive/c/stubbs_dev_merge_git/oasis-cr
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying added hibernate dep
.dotest/patch:15: trailing whitespace.

.dotest/patch:27: trailing whitespace.

.dotest/patch:28: trailing whitespace.
                        org.hibernate
.dotest/patch:29: trailing whitespace.
                        hibernate-annotations
.dotest/patch:30: trailing whitespace.
                        3.3.1.GA
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Applying Added hibernate dep, rev eng strategy, hibernate config for localhost and generation result.
.dotest/patch:24: trailing whitespace.

.dotest/patch:25: trailing whitespace.
                        org.hibernate.eclipse.console.hibernateBuilder
.dotest/patch:26: trailing whitespace.

.dotest/patch:27: trailing whitespace.

.dotest/patch:28: trailing whitespace.

warning: squelched 268 whitespace errors
warning: 273 lines add whitespace errors.
Applying Moved launch configurations.
.dotest/patch:26: trailing whitespace.

.dotest/patch:27: trailing whitespace.

.dotest/patch:28: trailing whitespace.

.dotest/patch:29: trailing whitespace.

.dotest/patch:30: trailing whitespace.

error: NotificationService/launchConfigs/All JUnits.launch: does not match index
error: NotificationService/launchConfigs/Dependency Tree.launch: does not match index
error: NotificationService/launchConfigs/Get Deps - runtime.launch: does not match index
Using index info to reconstruct a base tree...
:26: trailing whitespace.

:27: trailing whitespace.

:28: trailing whitespace.

:29: trailing whitespace.

:30: trailing whitespace.

warning: squelched 104 whitespace errors
warning: 109 lines add whitespace errors.
Falling back to patching base and 3-way merge...
error: Entry 'NotificationService/launchConfigs/All JUnits.launch' not uptodate. Cannot merge.
fatal: merging of trees 58e7f2e19e35fc8155e85f3238503f905e312053 and 1239e895b39ceab8e19b140cbf51f5ef7082201a failed
Failed to merge in the changes.
Patch failed at 0003.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

stubbsa@VFNZV95336 /cygdrive/c/stubbs_dev_merge_git/oasis-cr
$ git rebase --abort
HEAD is now at 5083609 Setup JPA using Hibernate

stubbsa@VFNZV95336 /cygdrive/c/stubbs_dev_merge_git/oasis-cr
$ git-config core.whitespace=nowarn

stubbsa@VFNZV95336 /cygdrive/c/stubbs_dev_merge_git/oasis-cr
$ git rebase -v master
Changes from cb70410d47e13640be9431d63373452a5e9d5c6e to 5548a15d3af44b8686c8e66b246128484a9feaef:
 NotificationService/lib/client-es-2.0.3.jar |  Bin 1939504 -> 0 bytes
 NotificationService/lib/client-es-2.0.5.jar |  Bin 0 -> 1998473 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 NotificationService/lib/client-es-2.0.3.jar
 create mode 100755 NotificationService/lib/client-es-2.0.5.jar
First, rewinding head to replay your work on top of it...
Applying added hibernate dep
.dotest/patch:15: trailing whitespace.

.dotest/patch:27: trailing whitespace.

.dotest/patch:28: trailing whitespace.
                        org.hibernate
.dotest/patch:29: trailing whitespace.
                        hibernate-annotations
.dotest/patch:30: trailing whitespace.
                        3.3.1.GA
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Applying Added hibernate dep, rev eng strategy, hibernate config for localhost and generation result.
.dotest/patch:24: trailing whitespace.

.dotest/patch:25: trailing whitespace.
                        org.hibernate.eclipse.console.hibernateBuilder
.dotest/patch:26: trailing whitespace.

.dotest/patch:27: trailing whitespace.

.dotest/patch:28: trailing whitespace.

warning: squelched 268 whitespace errors
warning: 273 lines add whitespace errors.
Applying Moved launch configurations.
.dotest/patch:26: trailing whitespace.

.dotest/patch:27: trailing whitespace.

.dotest/patch:28: trailing whitespace.

.dotest/patch:29: trailing whitespace.

.dotest/patch:30: trailing whitespace.

warning: squelched 104 whitespace errors
warning: 109 lines add whitespace errors.
Applying Setup JPA using Hibernate
.dotest/patch:41: trailing whitespace.

.dotest/patch:44: trailing whitespace.

.dotest/patch:55: trailing whitespace.
                        org.eclipse.wst.common.project.facet.core.builder
.dotest/patch:56: trailing whitespace.

.dotest/patch:57: trailing whitespace.

warning: squelched 173 whitespace errors
warning: 178 lines add whitespace errors.

stubbsa@VFNZV95336 /cygdrive/c/stubbs_dev_merge_git/oasis-cr
$ gitk

As you can see, it still complains, but the rebase seems to have worked nicely.

There may be severe reprecusions of using core.whitespace=nowarn ( that’s a bit of a joke ) but I haven’t thought about it much yet. We’ll see… all that matters really in our case is that the svn dcommits get through looking sane.

Create a free website or blog at WordPress.com.