summaryrefslogtreecommitdiff
path: root/sys/src/cmd/hgfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-11-02 03:31:55 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-11-02 03:31:55 +0100
commit5cb6be9ce3bb53909879d6911cc2411f8458ed10 (patch)
treeb844008fdfd660656b2c67b4b575fb769c1fed71 /sys/src/cmd/hgfs
parentce59d96ee34905b58d39fa6e7defdf75220032ea (diff)
hgfs: fix metaheader offset for log
Diffstat (limited to 'sys/src/cmd/hgfs')
-rw-r--r--sys/src/cmd/hgfs/fs.c13
-rw-r--r--sys/src/cmd/hgfs/info.c5
2 files changed, 12 insertions, 6 deletions
diff --git a/sys/src/cmd/hgfs/fs.c b/sys/src/cmd/hgfs/fs.c
index 7f9c37d6a..9c61233c3 100644
--- a/sys/src/cmd/hgfs/fs.c
+++ b/sys/src/cmd/hgfs/fs.c
@@ -303,7 +303,9 @@ fsmkdir(Dir *d, int level, void *aux)
* 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;
}
@@ -353,6 +355,7 @@ fsattach(Req *r)
rf->rlog = nil;
rf->fd = -1;
+ rf->doff = 0;
rf->buf = nil;
r->fid->aux = rf;
@@ -368,8 +371,11 @@ fsstat(Req *r)
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);
}
@@ -686,14 +692,13 @@ fsread(Req *r)
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;
diff --git a/sys/src/cmd/hgfs/info.c b/sys/src/cmd/hgfs/info.c
index 2f0d01075..6a17a8fcc 100644
--- a/sys/src/cmd/hgfs/info.c
+++ b/sys/src/cmd/hgfs/info.c
@@ -17,14 +17,15 @@ loadrevinfo(Revlog *changelog, int rev)
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;