Changeset 470

Show
Ignore:
Timestamp:
05/20/08 09:30:40 (8 months ago)
Author:
mgoldman
Message:

Ported remove code. jmowery, please review

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/trunk-pmd-intproto/server/master.py

    r462 r470  
    8585                                        self.log((val.body, info[0])) 
    8686                                elif val.msg == 'modules': 
    87                                         self.log((val.body, info[0])) 
     87                                        self.modules((val.body, info[0])) 
    8888                                else: 
    8989                                        print "Unrecognized message \"" + val.msg + '"' 
     
    156156                        n.set_bool_status(key, val) 
    157157                n.update() 
     158 
     159        def status(self, (val, clientid)): 
     160                pass 
     161         
     162        def log(self, (val, clientid)): 
     163                pass 
     164 
     165        def modules(self, (val, clientid)): 
     166                pass 
    158167 
    159168 
  • branches/trunk-pmd-intproto/server/storage.py

    r469 r470  
    517517        def remove(self, names): 
    518518                '''Remove each file or directory in names from revision control recursively.''' 
    519                 raise NotImplementedError 
     519                if names.__class__ == [].__class__: 
     520                        map(self.remove_single, names) 
     521 
     522                name = os.path.basename(name) 
     523                if self.is_locked(): 
     524                        raise RuntimeError, 'Layer \'' + self.Name + '\' is locked; cannot remove \'' + name + '\'' 
     525                if self.is_locked(name): 
     526                        raise RuntimeError, '\'' + name + '\' is locked; it cannot be removed' 
     527                if name in control_files: 
     528                        return #don't remove control files 
     529                if name == '.': 
     530                        if not is_controlled(self.Name): 
     531                                return #nothing to do if not under control 
     532                        if self.recursive_lock_check(): 
     533                                raise RuntimeError, 'One or more files or directories under \'' + self.Name + '\' is locked and cannot be removed' 
     534                        for dir in self.list_controlled_dirs(): 
     535                                l = Layer(os.path.join(self.Name, dir)) 
     536                                l.remove('.') 
     537                        os.remove(self.StatusFile) 
     538                        os.remove(self.MetadataFile) 
     539                        os.rmdir(self.StorageDir) 
     540                        os.rmdir(self.NodesDir) 
     541                        self.StatusFile = '' 
     542                        self.StorageDir = '' 
     543                        self.StatusDate = 0 
     544                        self.Modified = False #changes don't matter everything is gone 
     545                        if is_controlled(os.path.join(self.Name, '..')): 
     546                                l = Layer(os.path.join(self.Name, '..')) 
     547                                l.remove(self.Name) 
     548                                l.update() 
     549                if not self.Entries.has_key(name): 
     550                        return #this is explicitly NOT an error so that remove can ignore duplicate recursive requests for directories quietly 
     551                if self.Entries[name].Type == 'DIR': 
     552                        self.Entries.remove(name) 
     553                        self.Modified = True 
     554                        l = Layer(os.path.join(self.Name, name)) 
     555                        l.remove('.') 
     556                        l.update() 
     557                        self.update() 
     558                else: 
     559                        storage_files = self.get_file_revisions(name) 
     560                        del self.Entries[name] 
     561                        for file_name in storage_files: 
     562                                os.remove(os.path.join(self.StorageDir, file_name)) 
     563                        self.Modified = True 
     564                 
    520565 
    521566        def control(self):