hgfs: update index
This commit is contained in:
parent
fff6d18d51
commit
637a770a16
|
@ -36,6 +36,8 @@ struct Revlog
|
|||
int ifd;
|
||||
int dfd;
|
||||
|
||||
vlong ioff;
|
||||
|
||||
int nmap;
|
||||
Revmap *map;
|
||||
};
|
||||
|
|
|
@ -13,6 +13,7 @@ int funzip(int ofd, int zfd, int len);
|
|||
/* revlog */
|
||||
int fmktemp(void);
|
||||
int revlogopen(Revlog *r, char *path, int mode);
|
||||
void revlogupdate(Revlog *r);
|
||||
void revlogclose(Revlog *r);
|
||||
int revlogextract(Revlog *r, int rev, int ofd);
|
||||
uchar *revhash(Revlog *r, int rev);
|
||||
|
|
|
@ -311,6 +311,9 @@ fswalk1(Fid *fid, char *name, Qid *qid)
|
|||
} else {
|
||||
switch(rf->level){
|
||||
case Qroot:
|
||||
revlogupdate(&changelog);
|
||||
revlogupdate(&manifest);
|
||||
|
||||
i = findrev(&changelog, name);
|
||||
if(rf->info = getrevinfo(i)){
|
||||
rf->level = Qrev;
|
||||
|
@ -455,6 +458,9 @@ fsread(Req *r)
|
|||
respond(r, "bug in fsread");
|
||||
return;
|
||||
case Qroot:
|
||||
revlogupdate(&changelog);
|
||||
revlogupdate(&manifest);
|
||||
|
||||
dirread9p(r, rootgen, nil);
|
||||
respond(r, nil);
|
||||
return;
|
||||
|
|
|
@ -13,15 +13,16 @@ fmktemp(void)
|
|||
return create(mktemp(temp), OTRUNC|ORCLOSE|ORDWR, 0666);
|
||||
}
|
||||
|
||||
static void
|
||||
readindex(Revlog *r)
|
||||
void
|
||||
revlogupdate(Revlog *r)
|
||||
{
|
||||
uchar buf[64];
|
||||
Revmap *m;
|
||||
int rev;
|
||||
|
||||
seek(r->ifd, 0, 0);
|
||||
for(rev=0;;rev++){
|
||||
if(seek(r->ifd, r->ioff, 0) < 0)
|
||||
return;
|
||||
for(rev=r->nmap;;rev++){
|
||||
if(readn(r->ifd, buf, sizeof(buf)) != sizeof(buf))
|
||||
break;
|
||||
if((rev % 16) == 0)
|
||||
|
@ -48,8 +49,9 @@ readindex(Revlog *r)
|
|||
|
||||
if(r->dfd < 0){
|
||||
m->hoff = seek(r->ifd, 0, 1);
|
||||
seek(r->ifd, m->hlen, 1);
|
||||
}
|
||||
r->ioff = seek(r->ifd, m->hlen, 1);
|
||||
} else
|
||||
r->ioff = seek(r->ifd, 0, 1);
|
||||
}
|
||||
r->nmap = rev;
|
||||
}
|
||||
|
@ -67,9 +69,10 @@ revlogopen(Revlog *r, char *path, int mode)
|
|||
path[strlen(path)-1] = 'd';
|
||||
r->dfd = open(path, mode);
|
||||
free(path);
|
||||
r->ioff = 0;
|
||||
r->nmap = 0;
|
||||
r->map = nil;
|
||||
readindex(r);
|
||||
revlogupdate(r);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue