PATCH delta: dsfantf1

Lisa asked for my delta format recently.
FWIW here the spec of my delta format.
This is from es.VCSBase.Mod. A WebDAV/DeltaV contribution package to the Native Oberon
system of Niklaus Wirth and Juerg Gutknecht of ETH Zuerich. 
Succeeeded by Bluebottle now (http://bluebottle.ethz.ch)
Please keep in mind that this is from the last millenium and wasn't meant to be 
scrutinized by "RFC professionals". It was written as a quick and dirty reminder
for me to remember the format of my delta files.

>From es.VCSBase.Mod:

$   1, Edgar.Schwarz@z.zgs.de, 31 Jan 99, 1:7:28
$ first version for new format
(** new delta file format
description
	(ci) = compressed integer in Oberon style
	(d) =  data as array of bytes
	tags = numbers coded as a byte
---------
DeltaFile =  # newest revision of file + deltas
	FormatName Flags Text 1{ Diff } .
FormatName = "dsfantf1" .
Flags = SET{31..1,MakroBit}.
Text = TextTag TextLen(ci) Text(d) .
Diff = # newer before older diffs
	DiffTag DiffLen(ci) OldTextLen(ci)
	Versiontag Version(ci)
	DateTag DateLen(ci) Date(d)
	AuthorTag AuthorLen(ci) Author(d)
	LogTextTag  LogTextLen(ci)  LogText(d)
	{ DeltaAddTag   AddLen(ci) AddData(d) 
	  | DeltaCopyTag CopyLen(ci) CopyOffset(ci) }
	[ AttachmentTag AttachmentLen(ci) Attachment(d) ] .
*)

So perhaps some remarks are useful:
- The email address given probably doesn't work anymore.
- (ci) is a number which uses as many bytes as necessary. 7 bits of a byte.
  The msb is used to show that another byte follows. Niklaus Wirth used such
  numbers in parts of his Native Oberon system.
- The new resource is created by:
  - Add: n bytes from delta.
  - Copy: n bytes from source. Referenced by an offset to a source file rider.
          Offset can be negative. So you can get some stretch repeatedly or move 
          parts of source around.
  - Attachment: add some miscellaneous data to a version. E.g. WebDAV properties.
          Not further specified yet.

That's all :-)

Some trivial extensions (For perhaps "dsfantf2") are
(Not checked for sanity. Just brainstorming):
- Use bit 7 of the tag byte to work with an additional source rider on the newly
  created resource for copy.
- Use bit 6 of the tag byte to specify absolute positioning instead of the moving
  rider offset.
- DeltaCallTag CallLen(ci) CallOffset(ci) could be used to define a sort of
  "functions" in the delta. "DeltaCallTag 0 offset" will skip a "function" definition.
- Use another target rider to patch the original resource for further copy/call
  tricks.
The "call" and targer rider stuff just came to my mind when I thought about possible
extensions of the format. Could give some tricky ways to "compress" data with patterns.

Now if anybody thinks that "dsfantf1" could be a simple mandatory delta format
for binary files with a PATCH I wouldn't mind. I would be surprised if you find
something similar enough to give IPR problems anywhere. But OTOH you never know.

Cheers, Edgar

Received on Friday, 25 August 2006 22:27:23 UTC