Pa predlozio bih algoritam najmanjeg rastojanja.
Uzmes pocetni fajl, krajnji fajl i operacije kojima dolazis od pocetnog do krajnjeg fajla.
Operacije mogu biti izbaci bajt ili niz bajtova, umetni bajt ili niz bajtova, pomeri bajt ili sekvencu ...
http://en.wikipedia.org/wiki/Levenshtein_distance
Izlaz iz algoritma je shema kako da dobijes od pocetnog, krajnji fajl.
Pretpostavka je da je ovaj deo optimalan nacin da zapises razliku. Zatim ti treba
kod koji ce da primeni to na stvarnom fajlu.
Mozes ubaciti i neki checksum da budes siguran da je patch uspeo.
Znaci
1. Pravljenje patcha (algoritam najmanjeg rastojanja po zadatoj metrici - od metrike zavisi velicina patch-a i kako on menja fajl - raspored operacija)
2. Primena patcha:
1. Napravis backup
2. Primenis patch
3. Proveris checksum
4. ako je sve ok i ne treba ti vise - obrises backup
Uzmi u obzir da u zavisnosti od operativnog sistema, mozes ili ne iz samog programa da menjas sadrzaj programskog
fajla na disku.
Pod Windows-om je recimo jednostavnije da imash patcher program koji menja aplikaciju. I aplikacija kada treba da se update-uje
(nadje noviji patch na serveru), skine ga i pokrene patcher koji ceka da se aplikacija ugasi (sama aplikacija onda ide na exit). Kada
patcher preko handle-a proveri da je proces aplikacije zavrsen, odradi patching i posle startuje aplikaciju a sam se ugasi.
Ili to ili da je kompletan kod u plugin arhitekturi. Onda shell koji inace ucitava i startuje plugine po potrebi korisnika, nosi kod za update
pluginova. Pa kad treba da update neki plugin onda ide unload plugin, patch plugin, reload plugin.