| 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 | |
|---|