summaryrefslogtreecommitdiff
path: root/sys/src/cmd/hgfs/fs.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-10-28 00:54:26 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-10-28 00:54:26 +0200
commit6b2b4b58fba2ce432bda596a53355b4daabd5612 (patch)
treedd1282e3cb85540b2eb7b2b2ac7a26bd057f74ec /sys/src/cmd/hgfs/fs.c
parent3fce94e7850ab80d14fa15f2f393ae71259376e5 (diff)
hgfs: detect fncache repo format
Diffstat (limited to 'sys/src/cmd/hgfs/fs.c')
-rw-r--r--sys/src/cmd/hgfs/fs.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/src/cmd/hgfs/fs.c b/sys/src/cmd/hgfs/fs.c
index 9bc314577..cf425ef29 100644
--- a/sys/src/cmd/hgfs/fs.c
+++ b/sys/src/cmd/hgfs/fs.c
@@ -45,15 +45,19 @@ static Revlog manifest;
static Revlog *revlogs;
static char dothg[MAXPATH];
+static int mangle = 0;
static Revlog*
getrevlog(Revnode *nd)
{
char buf[MAXPATH];
Revlog *rl;
+ int mang;
+ mang = mangle;
+Again:
nodepath(seprint(buf, buf+sizeof(buf), "%s/store/data", dothg),
- buf+sizeof(buf), nd, 1);
+ buf+sizeof(buf), nd, mang);
for(rl = revlogs; rl; rl = rl->next)
if(strcmp(buf, rl->path) == 0)
break;
@@ -62,10 +66,14 @@ getrevlog(Revnode *nd)
memset(rl, 0, sizeof(*rl));
if(revlogopen(rl, buf, OREAD) < 0){
free(rl);
+ if(mang++ == 0)
+ goto Again;
return nil;
}
rl->next = revlogs;
revlogs = rl;
+ if(mang)
+ mangle = 1;
} else
revlogupdate(rl);
incref(rl);