summaryrefslogtreecommitdiff
path: root/sys/src/cmd/hgfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-06-27 05:43:25 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-06-27 05:43:25 +0000
commit637a770a1698da227bcd296bd5578d978bea6e34 (patch)
treed1482149a755d1f9d16c995b7532228dec0c561c /sys/src/cmd/hgfs
parentfff6d18d5135b5a5580e5ea842958114325a508d (diff)
hgfs: update index
Diffstat (limited to 'sys/src/cmd/hgfs')
-rw-r--r--sys/src/cmd/hgfs/dat.h2
-rw-r--r--sys/src/cmd/hgfs/fns.h1
-rw-r--r--sys/src/cmd/hgfs/fs.c6
-rw-r--r--sys/src/cmd/hgfs/revlog.c17
4 files changed, 19 insertions, 7 deletions
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;
}