Fossil

Check-in [a2730f7276]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fix the FuseFS to correctly report when files that have executable permission.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | fusefs
Files: files | file ages | folders
SHA1: a2730f72768678c3182b9a51971f06aa2757f22d
User & Date: drh 2014-06-14 02:48:18.991
Context
2014-06-14
02:57
Update autosetup to automatically detect the availability of FuseFS and add it to the configuration. ... (check-in: be7e239894 user: drh tags: fusefs)
02:48
Fix the FuseFS to correctly report when files that have executable permission. ... (check-in: a2730f7276 user: drh tags: fusefs)
01:28
Initialize implementation of the "fusefs" command. To make it work, manually edit the Makefile to add -DFOSSIL_HAVE_FUSEFS and -lfuse. Then run "fossil fusefs /tmp/fusefs". Afterwards you can "ls /tmp/fusefs/checkins/trunk" and so forth. ... (check-in: ee5cd77d5a user: drh tags: fusefs)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/fusefs.c.
130
131
132
133
134
135
136
137

138
139
140
141
142
143
144
  }
  fusefs_load_rid(rid, fusefs.az[1]);
  if( fusefs.pMan==0 ) return -ENOENT;
  pFile = manifest_file_seek(fusefs.pMan, fusefs.az[2], 1);
  if( pFile==0 ) return -ENOENT;
  stbuf->st_mtime = (fusefs.pMan->rDate - 2440587.5)*86400.0;
  if( strcmp(fusefs.az[2], pFile->zName)==0 ){
    stbuf->st_mode = S_IFREG | 0444;

    stbuf->st_nlink = 1;
    stbuf->st_size = db_int(0, "SELECT size FROM blob WHERE uuid='%s'", 
                               pFile->zUuid);
    return 0;
  }
  n = (int)strlen(fusefs.az[2]);
  if( strncmp(fusefs.az[2], pFile->zName, n)!=0 ) return -ENOENT;







|
>







130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
  }
  fusefs_load_rid(rid, fusefs.az[1]);
  if( fusefs.pMan==0 ) return -ENOENT;
  pFile = manifest_file_seek(fusefs.pMan, fusefs.az[2], 1);
  if( pFile==0 ) return -ENOENT;
  stbuf->st_mtime = (fusefs.pMan->rDate - 2440587.5)*86400.0;
  if( strcmp(fusefs.az[2], pFile->zName)==0 ){
    stbuf->st_mode = S_IFREG |
              (manifest_file_mperm(pFile)==PERM_EXE ? 0555 : 0444);
    stbuf->st_nlink = 1;
    stbuf->st_size = db_int(0, "SELECT size FROM blob WHERE uuid='%s'", 
                               pFile->zUuid);
    return 0;
  }
  n = (int)strlen(fusefs.az[2]);
  if( strncmp(fusefs.az[2], pFile->zName, n)!=0 ) return -ENOENT;
Changes to src/manifest.c.
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169

1170
1171
1172
1173
1174
1175
1176
/*
** Compute an appropriate mlink.mperm integer for the permission string
** of a file.
*/
int manifest_file_mperm(ManifestFile *pFile){
  int mperm = PERM_REG;
  if( pFile && pFile->zPerm){
    if( strstr(pFile->zPerm,"x")!=0 )
      mperm = PERM_EXE;
    else if( strstr(pFile->zPerm,"l")!=0 )
      mperm = PERM_LNK;

  }
  return mperm;
}

/*
** Add a single entry to the mlink table.  Also add the filename to
** the filename table if it is not there already.







|

|

>







1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
/*
** Compute an appropriate mlink.mperm integer for the permission string
** of a file.
*/
int manifest_file_mperm(ManifestFile *pFile){
  int mperm = PERM_REG;
  if( pFile && pFile->zPerm){
    if( strstr(pFile->zPerm,"x")!=0 ){
      mperm = PERM_EXE;
    }else if( strstr(pFile->zPerm,"l")!=0 ){
      mperm = PERM_LNK;
    }
  }
  return mperm;
}

/*
** Add a single entry to the mlink table.  Also add the filename to
** the filename table if it is not there already.