* Refactoring: move dump function into archive.cc.

This commit is contained in:
Eelco Dolstra 2003-06-20 10:40:25 +00:00
parent 38e12df631
commit 1849aa2a72
7 changed files with 190 additions and 183 deletions

View file

@ -47,55 +47,9 @@ Hash hashString(const string & s);
Hash hashFile(const string & fileName);
/* Compute the hash of the given path. The hash is defined as
follows:
hash(path) = md5(dump(path))
md5(dump(path)).
*/
Hash hashPath(const string & path);
/* Dump a path as follows:
IF path points to a REGULAR FILE:
dump(path) = attrs(
[ ("type", "regular")
, ("contents", contents(path))
])
IF path points to a DIRECTORY:
dump(path) = attrs(
[ ("type", "directory")
, ("entries", concat(map(f, sort(entries(path)))))
])
where f(fn) = attrs(
[ ("name", fn)
, ("file", dump(path + "/" + fn))
])
where:
attrs(as) = concat(map(attr, as)) + encN(0)
attrs((a, b)) = encS(a) + encS(b)
encS(s) = encN(len(s)) + s + (padding until next 64-bit boundary)
encN(n) = 64-bit little-endian encoding of n.
contents(path) = the contents of a regular file.
sort(strings) = lexicographic sort by 8-bit value (strcmp).
entries(path) = the entries of a directory, without `.' and
`..'.
`+' denotes string concatenation. */
struct DumpSink
{
virtual void operator () (const unsigned char * data, unsigned int len) = 0;
};
void dumpPath(const string & path, DumpSink & sink);
#endif /* !__HASH_H */