def command(self): # get SqlAlchemy session self._init_session() repos_location = RhodeCodeUi.get_repos_location() to_remove = [] for dn, dirs, f in os.walk(safe_str(repos_location)): alldirs = list(dirs) del dirs[:] if ".hg" in alldirs or "objects" in alldirs and ("refs" in alldirs or "packed-refs" in f): continue for loc in alldirs: if REMOVED_REPO_PAT.match(loc): to_remove.append([os.path.join(dn, loc), self._extract_date(loc)]) else: dirs.append(loc) # filter older than (if present)! now = datetime.datetime.now() older_than = self.options.older_than if older_than: to_remove_filtered = [] older_than_date = self._parse_older_than(older_than) for name, date_ in to_remove: repo_age = now - date_ if repo_age > older_than_date: to_remove_filtered.append([name, date_]) to_remove = to_remove_filtered print >> sys.stdout, "removing %s deleted repos older than %s (%s)" % ( len(to_remove), older_than, older_than_date, ) else: print >> sys.stdout, "removing all [%s] deleted repos" % len(to_remove) if self.options.dont_ask or not to_remove: # don't ask just remove ! remove = True else: remove = ask_ok( "the following repositories will be deleted completely:\n%s\n" "are you sure you want to remove them [y/n]?" % ", \n".join(["%s removed on %s" % (safe_str(x[0]), safe_str(x[1])) for x in to_remove]) ) if remove: for path, date_ in to_remove: print >> sys.stdout, "removing repository %s" % path shutil.rmtree(path) else: print "nothing done exiting..." sys.exit(0)
def command(self): #get SqlAlchemy session self._init_session() repos_location = RhodeCodeUi.get_repos_location() to_remove = [] for dn, dirs, f in os.walk(safe_str(repos_location)): alldirs = list(dirs) del dirs[:] if ('.hg' in alldirs or 'objects' in alldirs and ('refs' in alldirs or 'packed-refs' in f)): continue for loc in alldirs: if REMOVED_REPO_PAT.match(loc): to_remove.append([os.path.join(dn, loc), self._extract_date(loc)]) else: dirs.append(loc) #filter older than (if present)! now = datetime.datetime.now() older_than = self.options.older_than if older_than: to_remove_filtered = [] older_than_date = self._parse_older_than(older_than) for name, date_ in to_remove: repo_age = now - date_ if repo_age > older_than_date: to_remove_filtered.append([name, date_]) to_remove = to_remove_filtered print >> sys.stdout, 'removing %s deleted repos older than %s (%s)' \ % (len(to_remove), older_than, older_than_date) else: print >> sys.stdout, 'removing all [%s] deleted repos' \ % len(to_remove) if self.options.dont_ask or not to_remove: # don't ask just remove ! remove = True else: remove = ask_ok('the following repositories will be deleted completely:\n%s\n' 'are you sure you want to remove them [y/n]?' % ', \n'.join(['%s removed on %s' % (safe_str(x[0]), safe_str(x[1])) for x in to_remove])) if remove: for path, date_ in to_remove: print >> sys.stdout, 'removing repository %s' % path shutil.rmtree(path) else: print 'nothing done exiting...' sys.exit(0)
def command(self): logging.config.fileConfig(self.path_to_ini_file) from pylons import config #get to remove repos !! add_cache(config) engine = engine_from_config(config, 'sqlalchemy.db1.') init_model(engine) repos_location = RhodeCodeUi.get_repos_location() to_remove = [] for dn, dirs, f in os.walk(safe_str(repos_location)): for loc in dirs: if REMOVED_REPO_PAT.match(loc): to_remove.append([loc, self._extract_date(loc)]) #filter older than (if present)! now = datetime.datetime.now() older_than = self.options.older_than if older_than: to_remove_filtered = [] older_than_date = self._parse_older_than(older_than) for name, date_ in to_remove: repo_age = now - date_ if repo_age > older_than_date: to_remove_filtered.append([name, date_]) to_remove = to_remove_filtered print >> sys.stdout, 'removing [%s] deleted repos older than %s[%s]' \ % (len(to_remove), older_than, older_than_date) else: print >> sys.stdout, 'removing all [%s] deleted repos' \ % len(to_remove) if self.options.dont_ask or not to_remove: # don't ask just remove ! remove = True else: remove = ask_ok('are you sure to remove listed repos \n%s [y/n]?' % ', \n'.join(['%s removed on %s' % (safe_str(x[0]), safe_str(x[1])) for x in to_remove])) if remove: for name, date_ in to_remove: print >> sys.stdout, 'removing repository %s' % name shutil.rmtree(os.path.join(repos_location, name)) else: print 'nothing done exiting...' sys.exit(0)
def repo_scan(self, repos_path=None): """ Listing of repositories in given path. This path should not be a repository itself. Return a dictionary of repository objects :param repos_path: path to directory containing repositories """ if repos_path is None: repos_path = self.repos_path log.info('scanning for repositories in %s' % repos_path) baseui = make_ui('db') repos = {} for name, path in get_filesystem_repos(repos_path, recursive=True): # skip removed repos if REMOVED_REPO_PAT.match(name): continue # name need to be decomposed and put back together using the / # since this is internal storage separator for rhodecode name = Repository.url_sep().join(name.split(os.sep)) try: if name in repos: raise RepositoryError('Duplicate repository name %s ' 'found in %s' % (name, path)) else: klass = get_backend(path[0]) if path[0] == 'hg' and path[0] in BACKENDS.keys(): repos[name] = klass(safe_str(path[1]), baseui=baseui) if path[0] == 'git' and path[0] in BACKENDS.keys(): repos[name] = klass(path[1]) except OSError: continue return repos