Exemple #1
0
    def _ComputeRules(cls, targets, ignore_list=[]):
        """Computes the rules to be run given the input targets.
    Args:
      targets: list: List of input targets.
    Return:
      list: List of actual rules to be run.
    """
        rules = []
        for target in targets:
            ignore = Utils.IgnoreRule(target, ignore_list)
            if ignore:
                TermColor.Warning(
                    'Ignored target %s as anything with [%s] is ignored.' %
                    (target, ignore))
                continue

            if os.path.isdir(target):
                target = os.getcwd() if target == '.' else target
                rule = os.path.join(target, 'RULES')
                if os.path.isfile(rule):
                    rules += [Utils.RuleNormalizedName(rule)]
                else:
                    TermColor.Warning('No RULES file in directory: %s' %
                                      target)
            elif os.path.isfile(target):
                rules += [
                    Utils.RuleNormalizedName(os.path.splitext(target)[0])
                ]
            elif os.path.basename(target) == '...':
                dir = os.path.dirname(target)
                if not dir: dir = os.getcwd()
                dir = os.path.dirname(
                    Utils.RuleNormalizedName(os.path.join(dir, 'RULES')))
                rules += Utils.GetRulesFilesFromSubdirs(dir, ignore_list)
            else:
                rules += [Utils.RuleNormalizedName(target)]

        temp_list = []
        seen = set()
        for rule in rules:
            if rule in seen: continue
            temp_list += [rule]
            seen |= set([rule])

        rules = []
        for rule in temp_list:
            if ((os.path.basename(rule) != 'RULES') and
                (os.path.join(os.path.dirname(rule), 'RULES') in seen)):
                continue
            rules += [rule]

        return rules
Exemple #2
0
  def Expand(cls, name):
    """Expand a file sname based on basedir.

    Args:
      name: string: The name of the rule.

    Exceptions:
      RulesParseError: Raises exception if parsing fails.
    """
    sname = name.strip()
    if not sname:
      err_str = 'Empty names are not allowed in RULES specification'
      TermColor.Error(err_str)
      raise RulesParseError(err_str)

    if not cls.basedir:  # no basedir specified
      return sname
    elif sname[0] == '/':  # absolute path
      return Utils.RuleNormalizedName(sname)
    else:  # relative path
      return Utils.RuleNormalizedName(os.path.join(cls.basedir, sname))
Exemple #3
0
 def __init__(self, rule_name):
   """initializes the state
   Args:
     rule_name (string) - the rule name
   Raises:
     UnsupportedRuleError: raises exception if the rule type is not yet
       supported. add to the RULE_TYPES lists
   """
   # Create the user friendly link to bin dir if it doesn't already exist.
   FileUtils.CreateLink(FileUtils.GetEDir(), FileUtils.GetBinDir())
   rule_name = Utils.RuleNormalizedName(rule_name)
   Rules.LoadRule(rule_name)
   self._rule = Rules.GetRule(rule_name)
   if not self._rule['_type'] in Packager.RULE_PACKAGER:
     err = 'Rule type %s not supported' % self._rule._type
     TermColor.Error(err)
     raise UnsupportedRuleError(err)
   self._packager = Packager.RULE_PACKAGER[self._rule['_type']]