From: cinap_lenrek Date: Mon, 27 Jun 2011 05:43:25 +0000 (+0000) Subject: hgfs: update index X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=637a770a1698da227bcd296bd5578d978bea6e34;p=plan9front.git hgfs: update index --- diff --git a/sys/src/cmd/hgfs/dat.h b/sys/src/cmd/hgfs/dat.h index 7f411b35b..c63065843 100644 --- a/sys/src/cmd/hgfs/dat.h +++ b/sys/src/cmd/hgfs/dat.h @@ -36,6 +36,8 @@ struct Revlog int ifd; int dfd; + vlong ioff; + int nmap; Revmap *map; }; diff --git a/sys/src/cmd/hgfs/fns.h b/sys/src/cmd/hgfs/fns.h index e676ae605..00bac4601 100644 --- a/sys/src/cmd/hgfs/fns.h +++ b/sys/src/cmd/hgfs/fns.h @@ -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); diff --git a/sys/src/cmd/hgfs/fs.c b/sys/src/cmd/hgfs/fs.c index 77e9177e2..fea6d214b 100644 --- a/sys/src/cmd/hgfs/fs.c +++ b/sys/src/cmd/hgfs/fs.c @@ -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; diff --git a/sys/src/cmd/hgfs/revlog.c b/sys/src/cmd/hgfs/revlog.c index e4d9fcfa1..815358568 100644 --- a/sys/src/cmd/hgfs/revlog.c +++ b/sys/src/cmd/hgfs/revlog.c @@ -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; }