aboutsummaryrefslogtreecommitdiff
path: root/src/hash.hh
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-06-16 15:59:23 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-06-16 15:59:23 +0000
commit2f04e7102eaad3159073019af96e6e5c4f2c9bcf (patch)
tree324814e02be135c03df6e456c1eec1227b3b85dc /src/hash.hh
parenta09e66da5af348dc25e3b372ec9f518d3532f863 (diff)
* Path hashing.
Diffstat (limited to 'src/hash.hh')
-rw-r--r--src/hash.hh19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/hash.hh b/src/hash.hh
index 9d72e66db..13c5275b4 100644
--- a/src/hash.hh
+++ b/src/hash.hh
@@ -50,6 +50,11 @@ Hash hashFile(const string & fileName);
follows:
hash(path) = md5(dump(path))
+*/
+Hash hashPath(const string & path);
+
+
+/* Dump a path as follows:
IF path points to a REGULAR FILE:
dump(path) = attrs(
@@ -60,7 +65,7 @@ Hash hashFile(const string & fileName);
IF path points to a DIRECTORY:
dump(path) = attrs(
[ ("type", "directory")
- , ("entries", concat(map(f, entries(path))))
+ , ("entries", concat(map(f, sort(entries(path)))))
])
where f(fn) = attrs(
[ ("name", fn)
@@ -72,17 +77,25 @@ Hash hashFile(const string & fileName);
attrs(as) = concat(map(attr, as)) + encN(0)
attrs((a, b)) = encS(a) + encS(b)
- encS(s) = encN(len(s)) + s
+ 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. */
-Hash hashPath(const string & path);
+
+struct DumpSink
+{
+ virtual void operator () (const unsigned char * data, unsigned int len) = 0;
+};
+
+void dumpPath(const string & path, DumpSink & sink);
#endif /* !__HASH_H */