]> git.lizzy.rs Git - plan9front.git/commitdiff
hgfs: update index
authorcinap_lenrek <cinap_lenrek@localhost>
Mon, 27 Jun 2011 05:43:25 +0000 (05:43 +0000)
committercinap_lenrek <cinap_lenrek@localhost>
Mon, 27 Jun 2011 05:43:25 +0000 (05:43 +0000)
sys/src/cmd/hgfs/dat.h
sys/src/cmd/hgfs/fns.h
sys/src/cmd/hgfs/fs.c
sys/src/cmd/hgfs/revlog.c

index 7f411b35bbdf551bba7c143c2d9f04227f101e19..c63065843b3c055e334fe9d4e998509554cb4fa6 100644 (file)
@@ -36,6 +36,8 @@ struct Revlog
        int     ifd;
        int     dfd;
 
+       vlong   ioff;
+
        int     nmap;
        Revmap  *map;
 };
index e676ae60522c84330550bdc62efd572e6b9fda06..00bac4601a047369507ef019991cc4e66d40670e 100644 (file)
@@ -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);
index 77e9177e24f3806287015b7391a4f49a1f6a484e..fea6d214bf49a8f3454c86c307e5a9255ed0e3ba 100644 (file)
@@ -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;
index e4d9fcfa1831bc33b6c4f0ae0e432d6bc082ddd9..8153585686db2654713c8bd51a0c156d63c07134 100644 (file)
@@ -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;
 }