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