'Vacuum indexes in datastore.
This method will query the server to determine which indexes are not
being used according to the user\'s local index.yaml file.  Once it has
made this determination, it confirms with the user which unused indexes
should be deleted.  Once confirmation for each index is receives, it
deletes those indexes.
Because another user may in theory delete the same indexes at the same
time as the user, there is a potential race condition.  In this rare cases,
some of the indexes previously confirmed for deletion will not be found.
The user is notified which indexes these were.
Args:
definitions: datastore_index.IndexDefinitions as loaded from users
index.yaml file.'

def DoVacuum(self, definitions):

    (unused_new_indexes, notused_indexes) = self.DoDiff(definitions)
    deletions = datastore_index.IndexDefinitions(indexes=[])
    if (notused_indexes.indexes is not None):
        for index in notused_indexes.indexes:
            if (self.force or self.GetConfirmation(index)):
                deletions.indexes.append(index)
    if deletions.indexes:
        not_deleted = self.DoDelete(deletions, definitions.application)
        if not_deleted.indexes:
            not_deleted_count = len(not_deleted.indexes)
            if (not_deleted_count == 1):
                warning_message = 'An    index    was    not    deleted.        Most    likely    this    is    because    it    no    longer    exists.\n\n'
            else:
                warning_message = ('%d    indexes    were    not    deleted.        Most    likely    this    is    because    they    no    longer    exist.\n\n' % not_deleted_count)
            for index in not_deleted.indexes:
                warning_message += index.ToYAML()
            logging.warning(warning_message)
