[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Progress report for GSoC 'svn patch' project

From: Daniel Näslund <daniel_at_longitudo.com>
Date: Fri, 18 Jun 2010 08:56:25 +0200


The goal is to be able to create, parse and apply diffs in the 'git
unidiff' format. The original thought was to add support for property
diffs when the basic parts of the 'git unidiff' part was in place, but
Stefan suggested that we could easily add property diffs even without
the git parts. At the moment I'm working in that direction.

What we have for 'property diffs'
* A fixed format using '##' as hunk header delimiters instead of '@@'.

  Added: prop
  ## -0,0 +1 ##
  - value
  + value

  Modified: prop
  ## -0,0 +1 ##
  - value
  + value

  Deleted: prop
  ## -0,0 +1 ##
  - value
  + value

* The ability to parse those property hunks since r955844.

What needs to be done for 'property diffs'
* A diff header is only added if we have text changes, we need one even
  if the patch has only property changes.
* We need to be able to distinguish between patches that deletes a
  property and those that sets the property to empty.
* The property changes needs to be applied to the target.
* More C-tests involving different combinations of text and prop hunks.
* C-tests with context lines starting with 'Added: ', 'Modified: ' and
* C-tests with reverse diffs involving properties.
* A clear documentation of the property diff format.
* Proper handling of properties with binary content.

What we have for 'git unidiffs'
* With SVN_EXPERIMENTAL_PATCH we can create git headers for added and
  deleted paths
* We have fields in 'svn_patch_t' for recording what tree operation the
  patch performs.
* C-test for parsing simple 'git diffs', e.g. diffs with either text
  modifications or tree changes but not both.
* Three XFailing unittests (passes with SVN_EXPERIMENTAL_PATCH defined)
  for wc-wc, url-wc, url-url.

What needs to be done for 'git unidiffs'
* The parsing of the git headers. We still need to be able to handle
  unidiffs. There's a *lot* of if statements in the patch I have. I'm
  thinking about using something table-driven instead.
* C-tests for git diffs that combines tree changes and text mods.
* Applying the tree changes.
* Create git headers for copied paths. Needs some small rearrangement of
  diff callbacks but nothing big.
* Create git headers for moved paths. We need to keep the deleted paths
  in a baton and match them against copyfrom information. Can be a bit
* Encode and decode binary files.

Needs to be done but can't be done at the moment
* Be able to handle copies and renames that's in revisions previous to
  WORKING. We need editor-v2 for that.

With SVN_EXPERIMENTAL_PATCH defined, we create git diff headers for all
possible combinatinos of sources, e.g. wc-wc, url-wc and url-url. But we
can only track renames and copies for wc-wc and the changes in wc for
url-wc. I mean that that since we won't have git diffs available for 1.7
anyway, we can just continue with the goal of releasing the git diff
feature when we have proper rename/copy tracking available.

Received on 2010-06-18 08:57:11 CEST

This is an archived mail posted to the Subversion Dev mailing list.