Changeset 781 for baculafs


Ignore:
Timestamp:
Jul 25, 2009, 3:10:17 AM (15 years ago)
Author:
joergs
Message:

getaddr checks for existing directories

File:
1 edited

Legend:

Unmodified
Added
Removed
  • baculafs/trunk/baculafs.py

    r780 r781  
    4747        #logging.debug('BC init done')
    4848
    49 
    50     def ls(self, path):
    51 
     49    def cd(self, path):
    5250        path = path + "/"
    5351        logging.debug( "(" + path + ")" )
     
    6361            # path ok, now wait for prompt
    6462            self.bconsole.expect( BCONSOLE_RESTORE_PROMPT )
     63            return True
    6564        elif index == 1:
    6665            #print "wrong path"
     66            return False
     67        elif index == 2:
     68            logging.error( "EOF bconsole" )
     69            #raise?
     70            return False
     71        elif index == 3:
     72            logging.error( "TIMEOUT  bconsole" )
     73            return False
     74
     75    def ls(self, path):
     76        logging.debug( "(" + path + ")" )
     77
     78        if self.cd( path ):
     79            self.bconsole.sendline( 'ls' )
     80            self.bconsole.expect( BCONSOLE_RESTORE_PROMPT )
     81            lines = self.bconsole.before.splitlines()
     82            #logging.debug( str(lines) )
     83            return lines
     84        else:
    6785            return
    68         elif index == 2:
    69             print "error EOF"
    70             raise
    71         elif index == 3:
    72             print "error TIMEOUT"
    73             return
    74 
    75         self.bconsole.sendline( 'ls' )
    76         self.bconsole.expect( BCONSOLE_RESTORE_PROMPT )
    77         lines = self.bconsole.before.splitlines()
    78         #logging.debug( str(lines) )
    79         return lines
    8086
    8187###############
     
    95101        #logging.debug('init finished')
    96102
     103
     104    def _getattr(self,path):
     105        # TODO: may cause problems with filenames that ends with "/"
     106        path = path.rstrip( '/' )
     107        logging.debug( '"' + path + '"' )
     108
     109        if (path in self.files):
     110            #logging.debug( "(" + path + ")=" + str(self.files[path]) )
     111            return self.files[path]
     112
     113        if Bconsole().cd(path):
     114            # don't define files, because these have not been checked
     115            self.files[path] = { 'type': self.TYPE_DIR, 'dirs': [ ".", ".." ] }
     116
     117        return self.files[path]
     118
     119
     120
     121
    97122    def _getdir(self, path):
    98123
     
    103128        if (path in self.files):
    104129            #logging.debug( "(" + path + ")=" + str(self.files[path]) )
    105             if self.files[path]['type'] == self.TYPE_FILE:
    106                 logging.debug( '"' + path + '"=file (cached)' )
     130            if self.files[path]['type'] == self.TYPE_NONE:
     131                logging.info( '"' + path + '" does not exist (cached)' )
     132                return self.files[path]
     133            elif self.files[path]['type'] == self.TYPE_FILE:
     134                logging.info( '"' + path + '"=file (cached)' )
    107135                return self.files[path]
    108136            elif ((self.files[path]['type'] == self.TYPE_DIR) and ('files' in self.files[path])):
    109                 logging.debug( '"' + path + '"=dir (cached)' )
     137                logging.info( '"' + path + '"=dir (cached)' )
    110138                return self.files[path]
    111139
    112140        try:
    113141            files = Bconsole().ls(path)
    114             #logging.debug( "  files: " + str( files ) )
     142            logging.debug( "  files: " + str( files ) )
    115143
    116144            # setting initial empty directory. Add entires later in this function
     
    144172        logging.debug( '"' + path + '"' )
    145173
     174        st = fuse.Stat()
     175
     176        if not (path in self.files):
     177            self._getattr(path)
     178
     179        if not (path in self.files):
     180            return -errno.ENOENT
     181
    146182        file = self.files[path]
    147         st = fuse.Stat()
    148 
    149         #file = self._getdir( path )
    150183
    151184        if file['type'] == self.TYPE_FILE:
     
    153186            st.st_nlink = 1
    154187            st.st_size  = 0
     188            return st
    155189        elif file['type'] == self.TYPE_DIR:
    156190            st.st_mode = stat.S_IFDIR | 0755
     
    159193            else:
    160194                st.st_nlink = 2
    161         else:
    162             return -errno.ENOENT
    163         return st
     195            return st
     196
     197        # TODO: check for existens
     198        return -errno.ENOENT
     199       
    164200
    165201
Note: See TracChangeset for help on using the changeset viewer.