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

How use patch_target_t for both files and (possibly multiple) properties

From: Daniel Näslund <daniel_at_longitudo.com>
Date: Sun, 20 Jun 2010 21:53:29 +0200

Hi stsp!

Attaching a patch showing a suggestion on how to split up
patch_target_t. Maybe you have some insights on this, before I rush out
and start grooking around and making changes to your design.

What 'svn patch' does
1) Match hunks
2) Apply hunks to a stream backed up by a tmp file
3) Install. copy the tmp file to the target location
4) Notify the user on what has happened, e.g. fuzz, offset and rejects

The problem
Each property is essentially like it's own text file. 'svn patch' must
be generic enough to be able to perform the above actions on both
properties and texts.

* Simplify. Don't use the unidiff format but just copy the content
  straight off and apply it.
* Duplicate. Create special code for handling props, e.g. have both
  match_hunk() and match_property_hunk() and so on.

Proposed solution
Use patch_target_t as a container for sub-patch_targets that can be either
file-text or a property. Store tree change info needed for step 3)
installing and step 4) notifying.

Use patch_target_stream_t for step 1) matching and step 2) applying. It
should contain streams to the property or text target and the hunks
associated with the specific file/property.

A scratch log message (the attached patch only contains changes to the

* subversion/libsvn_client/patch.c
  (patch_target_stream_t): New. A struct used for handling the match and
    apply step of 'svn patch'. It can be either associated with the
    content of a file or a property.
  (patch_target_t): Move some fields to patch_target_stream_t and
    introduce it as a new field.
   match_hunk): These funcs makes up step 1) matching. Use
    patch_target_stream_t instead of patch_target_t.
   reject_hunk): These funcs makes up step 2) applying. Use
    patch_target_stream_t instead of patch_target_t.
  (init_patch_target): Create the patch_target_stream_t objects.
  (apply_one_patch): Loop through the available property hunks in the
    patch and do step 1) matching. Loop through the property hunks in
    the patch and do step 2) applying.
  (...): More things to do.


Received on 2010-06-20 21:54:28 CEST

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