3

I am in need of installing old version (N) of product. However its maker dropped full download in favor of horrible launcher-based installer, and for version I am interested in only patch from previous version (N-1) was released.

I managed to obtain and successfully install version N-1, as it was just set of zip packages. Patch for version N however contains diff patches (.rdiff and .xdiff extensions) for data packages (zips), and although I tried to force Launcher to install them but it failed and corrupted data. (I never worked with such patches)

What I know about those diff patches:

  • they are diffs for data packages (zips)
  • I know which diff is for which package (by filename)
  • diffs are not obfuscated, archive manager can access data in them (although there is "unexpected end of archive")

Although I do not have Linux machine ready, I can, if needed, work with software for penguin. I can boot one from pendrive (eg. by bootable .iso loader), I also have pendrive big enough to fit all data on it, so NTFS capability is not required.

(I am in no hurry so please take your time to make good answer ;) I will have access to machine with those files in ~6 hours and its nothing critical anyway)


Edit #1:

Although I failed to get access to files in question yesterday, I did some google+brain work.

Apparently software to do what I need simply do not exist, and patch itself is made in heretic manner.

Files look like created using rdiff-backup utility which, unless I am blind, lacks option to apply reverse patch without repository set up.

I am still not sure if patch is to apply to packed data, or unpacked directory but it can easily be tested when I will finally reach those files.

And now the heretic part, reverse diff patch is made to turn newer version into older... and that company used it to apply incremental patch? Ugh...

It appears I might need to find file format specs and just make my own utility for it.

6
  • Could you please post a excerpt from an .rdiff and .xdiff files? (like first 10 lines) Command-line arguments used during the diff operation often have an effect on the patch command you have to use.
    – Nicolas Raoul
    Jun 24, 2014 at 10:11
  • 1
    I could, data are not secret at all, but as I wrote it will take me some time before I can return to computer with those files. (Currently I am compiling)
    – PTwr
    Jun 24, 2014 at 10:22
  • As soon as I saw that blue compiling I just new it would be that great xkcd :D Jun 24, 2014 at 14:22
  • @NicolasRaoul it took me longer than expected to find time for this task, but I managed to overcome it. Although I managed to force app launcher to properly install old updates I also gathered enough know-how to do it manually. Thanks for hint with file header, I used file identifier soft to tell me which diff soft to use (I never expected to be so many types of diffs) - which lead me on how to feed them to launcher utility.
    – PTwr
    Jun 30, 2014 at 9:35
  • If your question is solved, could you please post an answer describing how you solved it? Thanks!
    – Nicolas Raoul
    Jun 30, 2014 at 9:39

1 Answer 1

2

Although in the end I have not applied diff patches manually (I managed to force software to apply old updates) pursue of this goal resulted in enough know-how on it to do it (which showed me how to "fix" said software updater).

First step is identifying diff type. Text, binary, directory, incremental, decremental (reverse)... and then you need to find out its exact implementation. Ugh, the pain!

There are several hints on what type of diff patch you are dealing with:

  1. file extension
  2. file header
  3. libraries used in targeted software updater

In my task I have dealt with following file extensions.

  • bdiff
  • xdiff
  • rdiff
  • wdsfc

By checking file headers (signatures), which usually consist of two (word) or four (dword/int) bytes. Although searching for raw signatures resulted in failure, I managed to find this useful File Identifier software which had at least one of diff formats in its database. (I'll add signatures I encountered in later edit)

Results were as following:

  • bdiff: Binary Diff, in my case it was DeltaMAX format, although its commercial solution you can use example binaries (.NET have best GUI) from downloadable demo to apply single patches. Can be also pinpointed by usage of DeltaMax.dll file. Noob-friendly on Windows.
  • xdiff: Cross Diff (not sure about name), it is helper class from Xmail server, should reside in libxdiff library. Example implementation exists in PHP, but as for now (PHP 5.5.14) it is unusable without recompilation. Virtually unusable on Windows.
  • rdiff: Reverse Diff, comes with librsync or implementing it software. Extremely hard to use on Windows.
  • wdsfc: in my case it was just file to replace original one, not a diff at all. (unless you will call 100% a diff), replace original file with it.

(Yes, this software is so awesome that it uses four types of patches together with normal updates...)

Long story short, Windows is very bad platform to work with diff patches. On any Linux distribution you can find most of needed software in repositories (DeltaMAX is Windows only, but should work fine in Wine) and even if only source will be available it is much easier to compile it on any Penguin than to install all necessary stuff on Windows machine.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.