Patent ID: 8661428

Claim:
A method for updating a local file on a client from a server computer, the client comprising a general purpose computer system, the method comprising: under control of software executing on the client: reading a pointer in the local file to identify a location of a local global hash value, the local global hash value being embedded in the local file at the client and for determining whether updates to the local file are to be made, the location being an offset; requesting, at the client, a list of a plurality of new hash values corresponding to a plurality of blocks of a single update file, the update file being located on the server computer and having at least one segment of data in common with the local file stored at the client, the list of new hash values being embedded in the update file, wherein the update file is logically divided into a plurality of blocks, the blocks having divisions that are located according to an algorithm, the algorithm locating the divisions between the blocks at positions within the update file when a value of a rolling checksum reaches a particular value, the blocks being of variable size; receiving, at the client, the requested list of new hash values; comparing, at the client, the received list of new hash values to local hash values stored at the client, the local hash values each corresponding to a block of data in the local file, divisions between the blocks of data in the local file being defined according to the algorithm; for each of the plurality of new hash values not having a matching local hash value at the client, downloading a corresponding one of the plurality of blocks of data from the single update file located on the server computer and writing the corresponding block to a new file at the client, thereby downloading to the client from the server a portion of the update file that is less than the entire update file; and for each of the plurality of new hash values having a matching local hash value at the client, copying the corresponding block from the local file to the new file at the client; wherein when each of the plurality of blocks corresponding to the new hash values are written to the new file at the client, a replica of the update file is created on the client.