* BUG: this is not correct. mercurial might
* prefix the data log with random \1\n escaped
* metadata strings (see fmetaheader()) and the flen
- * *includes* the metadata part. m(
+ * *includes* the metadata part. we try to compensate
+ * for this once the revision got extracted and
+ * subtract the metadata header in fsstat().
*/
d->length = rl->map[rev].flen;
}
rf->rlog = nil;
rf->fd = -1;
+ rf->doff = 0;
rf->buf = nil;
r->fid->aux = rf;
rf = r->fid->aux;
if(rf->level < Qtree)
fsmkdir(&r->d, rf->level, rf->info);
- else
+ else {
fsmkdir(&r->d, rf->level, rf->node);
+ if(rf->level == Qtree)
+ r->d.length -= rf->doff;
+ }
respond(r, nil);
}
len = 0;
else if((off + len) >= rf->info->loglen)
len = rf->info->loglen - off;
- off += rf->info->logoff;
if(rf->fd >= 0)
goto Fdgen;
if((rf->fd = revlogopentemp(&changelog, hashrev(&changelog, rf->info->chash))) < 0){
responderror(r);
return;
}
- rf->doff = fmetaheader(rf->fd);
+ rf->doff = rf->info->logoff;
goto Fdgen;
case Qwho:
s = rf->info->who;
seek(fd, 0, 2);
write(fd, "\n", 1);
- seek(fd, 0, 0);
+
+ off = fmetaheader(fd);
+ seek(fd, off, 0);
ri = malloc(sizeof(*ri));
memset(ri, 0, sizeof(*ri));
memmove(ri->chash, changelog->map[rev].hash, HASHSZ);
- off = 0;
line = 0;
inmsg = 0;
p = buf;