hgfs: fix metaheader offset for log
This commit is contained in:
parent
ce59d96ee3
commit
5cb6be9ce3
|
@ -303,7 +303,9 @@ fsmkdir(Dir *d, int level, void *aux)
|
||||||
* BUG: this is not correct. mercurial might
|
* BUG: this is not correct. mercurial might
|
||||||
* prefix the data log with random \1\n escaped
|
* prefix the data log with random \1\n escaped
|
||||||
* metadata strings (see fmetaheader()) and the flen
|
* 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;
|
d->length = rl->map[rev].flen;
|
||||||
}
|
}
|
||||||
|
@ -353,6 +355,7 @@ fsattach(Req *r)
|
||||||
rf->rlog = nil;
|
rf->rlog = nil;
|
||||||
|
|
||||||
rf->fd = -1;
|
rf->fd = -1;
|
||||||
|
rf->doff = 0;
|
||||||
rf->buf = nil;
|
rf->buf = nil;
|
||||||
|
|
||||||
r->fid->aux = rf;
|
r->fid->aux = rf;
|
||||||
|
@ -368,8 +371,11 @@ fsstat(Req *r)
|
||||||
rf = r->fid->aux;
|
rf = r->fid->aux;
|
||||||
if(rf->level < Qtree)
|
if(rf->level < Qtree)
|
||||||
fsmkdir(&r->d, rf->level, rf->info);
|
fsmkdir(&r->d, rf->level, rf->info);
|
||||||
else
|
else {
|
||||||
fsmkdir(&r->d, rf->level, rf->node);
|
fsmkdir(&r->d, rf->level, rf->node);
|
||||||
|
if(rf->level == Qtree)
|
||||||
|
r->d.length -= rf->doff;
|
||||||
|
}
|
||||||
respond(r, nil);
|
respond(r, nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -686,14 +692,13 @@ fsread(Req *r)
|
||||||
len = 0;
|
len = 0;
|
||||||
else if((off + len) >= rf->info->loglen)
|
else if((off + len) >= rf->info->loglen)
|
||||||
len = rf->info->loglen - off;
|
len = rf->info->loglen - off;
|
||||||
off += rf->info->logoff;
|
|
||||||
if(rf->fd >= 0)
|
if(rf->fd >= 0)
|
||||||
goto Fdgen;
|
goto Fdgen;
|
||||||
if((rf->fd = revlogopentemp(&changelog, hashrev(&changelog, rf->info->chash))) < 0){
|
if((rf->fd = revlogopentemp(&changelog, hashrev(&changelog, rf->info->chash))) < 0){
|
||||||
responderror(r);
|
responderror(r);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rf->doff = fmetaheader(rf->fd);
|
rf->doff = rf->info->logoff;
|
||||||
goto Fdgen;
|
goto Fdgen;
|
||||||
case Qwho:
|
case Qwho:
|
||||||
s = rf->info->who;
|
s = rf->info->who;
|
||||||
|
|
|
@ -17,14 +17,15 @@ loadrevinfo(Revlog *changelog, int rev)
|
||||||
|
|
||||||
seek(fd, 0, 2);
|
seek(fd, 0, 2);
|
||||||
write(fd, "\n", 1);
|
write(fd, "\n", 1);
|
||||||
seek(fd, 0, 0);
|
|
||||||
|
off = fmetaheader(fd);
|
||||||
|
seek(fd, off, 0);
|
||||||
|
|
||||||
ri = malloc(sizeof(*ri));
|
ri = malloc(sizeof(*ri));
|
||||||
memset(ri, 0, sizeof(*ri));
|
memset(ri, 0, sizeof(*ri));
|
||||||
|
|
||||||
memmove(ri->chash, changelog->map[rev].hash, HASHSZ);
|
memmove(ri->chash, changelog->map[rev].hash, HASHSZ);
|
||||||
|
|
||||||
off = 0;
|
|
||||||
line = 0;
|
line = 0;
|
||||||
inmsg = 0;
|
inmsg = 0;
|
||||||
p = buf;
|
p = buf;
|
||||||
|
|
Loading…
Reference in a new issue