blob: d2a5f515ba3bea8b4db697e8ea36d2623d816c28 [file] [log] [blame]
# -*- coding:utf-8 -*-
'''
moudules/scan.py
Module specific package scan list generator
'''
import logging
import os
import sys
from repoman.errors import caterror
def scan(repolevel, reposplit, startdir, categories, repo_settings):
'''Generate a list of pkgs to scan
@param repolevel: integer, number of subdirectories deep from the tree root
@param reposplit: list of the path subdirs
@param startdir: the top level directory to begin scanning from
@param categories: list of known categories
@param repo_settings: repository settings instance
@returns: scanlist, sorted list of pkgs to scan
'''
scanlist = []
if repolevel == 2:
# we are inside a category directory
catdir = reposplit[-1]
if catdir not in categories:
caterror(catdir, repo_settings.repodir)
mydirlist = os.listdir(startdir)
for x in mydirlist:
if x == "CVS" or x.startswith("."):
continue
if os.path.isdir(startdir + "/" + x):
scanlist.append(catdir + "/" + x)
# repo_subdir = catdir + os.sep
elif repolevel == 1:
for x in categories:
if not os.path.isdir(startdir + "/" + x):
continue
for y in os.listdir(startdir + "/" + x):
if y == "CVS" or y.startswith("."):
continue
if os.path.isdir(startdir + "/" + x + "/" + y):
scanlist.append(x + "/" + y)
# repo_subdir = ""
elif repolevel == 3:
catdir = reposplit[-2]
if catdir not in categories:
caterror(catdir, repo_settings.repodir)
scanlist.append(catdir + "/" + reposplit[-1])
# repo_subdir = scanlist[-1] + os.sep
else:
msg = 'Repoman is unable to determine PORTDIR or PORTDIR_OVERLAY' + \
' from the current working directory'
logging.critical(msg)
sys.exit(1)
# repo_subdir_len = len(repo_subdir)
scanlist.sort()
logging.debug(
"Found the following packages to scan:\n%s" % '\n'.join(scanlist))
return scanlist