#!/usr/bin/python # Copyright (C) 2013 Linaro Ltd. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import os import shutil import sys from datetime import datetime # Number of days to keep a repository. DEFAULT_DELTA = 30 # Where trashed repository are stored. TRASH_DIRECTORY = "/home/git/repositories/trash" # This is how gitolite 'trashes' repositories: it stores them in a timestamp. DATE_FORMAT = "%Y-%m-%d_%H:%M:%S" if __name__ == '__main__': today = datetime.now() for root, dirs, _ in os.walk(TRASH_DIRECTORY): for name in dirs: try: date = datetime.strptime(name, DATE_FORMAT) # Do not recurse into a directory that matches DATE_FORMAT. dirs.remove(name) delta = today - date if delta.days >= DEFAULT_DELTA: shutil.rmtree(os.path.join(root, name)) except ValueError: # It means that a directory name does not match DETA_FORMAT. pass except OSError: sys.stderr.write("Error removing directory {0}\n".format( os.path.join(root, name)))