code: def remove(self, *filenodes):
          
          for node in filenodes:
              if node.path in (n.path for n in self.removed):
                  raise NodeAlreadyRemovedError("Node is already marked to "
                      "for removal at %s" % node.path)
              if node.path in (n.path for n in self.changed):
                  raise NodeAlreadyChangedError("Node is already marked to "
                      "be changed at %s" % node.path)
              # We only mark node as *removed* - real removal is done by
              # commit method
              self.removed.append(node)
docs: Marks given ``FileNode`` (or ``RemovedFileNode``) objects to be
          *removed* in next commit.
  
          :raises ``NodeAlreadyRemovedError``: if node has been already marked to
            be *removed*
          :raises ``NodeAlreadyChangedError``: if node has been already marked to
            be *changed*