from .base_moduleinfo import BaseModuleInfo
-__version__ = '0.2.1'
+__version__ = '0.3.0'
LOG = logging.getLogger(__name__)
default_repo_type = 'forge'
valid_repo_types = ('forge', 'git', 'svn', 'tarball', 'local')
+ re_empty_mod_pf_line = re.compile(r'\s*mod\s+\'([^\']+)\'\s*$', re.IGNORECASE)
re_mod_pf_line = re.compile(r'\s*mod\s+\'([^\']+)\'\s*,\s*(\S+.*)\s*$', re.IGNORECASE)
re_pf_line_version = re.compile(r"^\s*'([^']+)'")
re_def_token = re.compile(r'^\s*(?:,\s*)?([^,]+)(?:\s*,|$)')
re_empty = re.compile(r'^\s*(?:,\s*)?$')
- re_key_val_pair = re.compile(r'^\s*:?([a-z]+)\s*=>\s*[\'"]([^\'"]+)[\'"]\s*$', re.IGNORECASE)
- re_key_val_pair_unquoted = re.compile(r'^\s*:?([a-z]+)\s*=>\s*(\S+)\s*$', re.IGNORECASE)
+ re_key_val_pair = re.compile(r'^\s*:?([a-z_]+)\s*=>\s*[\'"]([^\'"]+)[\'"]\s*$', re.IGNORECASE)
+ re_key_val_pair_old = re.compile(r'^\s*([a-z_]+)\s*:\s*[\'"]([^\'"]+)[\'"]\s*$', re.IGNORECASE)
+ re_key_val_pair_unquoted = re.compile(r'^\s*:?([a-z_]+)\s*=>\s*(\S+)\s*$', re.IGNORECASE)
+ re_key_latest = re.compile(r'^\s*:latest\s*$', re.IGNORECASE)
re_v_at_start = re.compile(r"^v", re.IGNORECASE)
re_newline = re.compile(r'(?:\r\n?|\n\r?)+')
return res
+ # -------------------------------------------------------------------------
+ def __repr__(self):
+ """Typecasting into a string for reproduction."""
+ out = "<%s(" % (self.__class__.__name__)
+
+ fields = []
+ fields.append("appname={!r}".format(self.appname))
+ fields.append("verbose={!r}".format(self.verbose))
+ fields.append("version={!r}".format(self.version))
+ fields.append("base_dir={!r}".format(self.base_dir))
+ if self.full_name_orig:
+ fields.append("full_name={!r}".format(self.full_name_orig))
+ else:
+ fields.append("full_name={!r}".format(self.full_name))
+ fields.append("initialized={!r}".format(self.initialized))
+ if self.repo_type:
+ fields.append("repo_type={!r}".format(self.repo_type))
+ if self.repo:
+ fields.append("repo={!r}".format(self.repo))
+ if self.ref:
+ fields.append("ref={!r}".format(self.ref))
+ if self.use_control_branch:
+ fields.append("use_control_branch={!r}".format(True))
+ if self.forge_version:
+ fields.append("forge_version={!r}".format(self.forge_version))
+ if self.default_branch:
+ fields.append("default_branch={!r}".format(self.default_branch))
+ if self.exclude_spec:
+ fields.append("exclude_spec={!r}".format(True))
+ if self.install_path:
+ fields.append("install_path={!r}".format(self.install_path))
+
+ out += ", ".join(fields) + ")>"
+ return out
+
# -------------------------------------------------------------------------
def __copy__(self):
if match:
key = match.group(1)
val = match.group(2)
+ if verbose > 4:
+ LOG.debug("Matched re_key_val_pair {key!r} => {val!r}.".format(
+ key=key, val=val))
+ defs[key] = val
+ continue
+
+ match = cls.re_key_val_pair_old.match(token)
+ if match:
+ key = match.group(1)
+ val = match.group(2)
+ if verbose > 4:
+ LOG.debug("Matched re_key_val_pair_old {key!r} => {val!r}.".format(
+ key=key, val=val))
defs[key] = val
- else:
- LOG.warn(_("Could not analyze definition token {!r}.").format(token))
+ continue
+
+ match = cls.re_key_val_pair_unquoted.match(token)
+ if match:
+ key = match.group(1)
+ val = match.group(2)
+ if verbose > 4:
+ LOG.debug("Matched re_key_val_pair_unquoted {key!r} => {val!r}.".format(
+ key=key, val=val))
+ defs[key] = val
+ continue
+
+ match = cls.re_key_latest.match(token)
+ if match:
+ if verbose > 4:
+ LOG.debug("Matched re_key_latest 'latest' => True.")
+ defs['latest'] = True
+ continue
+
+ LOG.warn(_("Could not analyze definition token {!r}.").format(token))
if verbose > 4:
LOG.debug("Got definitions:\n{}".format(pp(defs)))
# -------------------------------------------------------------------------
@classmethod
- def init_from_puppetfile_line(cls, line, env, appname=None, verbose=0, base_dir=None):
+ def init_from_puppetfile_line(cls, line, appname=None, verbose=0, base_dir=None):
# Removing all newlines
- mline = self.re_newline.sub(' ', line)
+ mline = cls.re_newline.sub(' ', line)
+
+ match = cls.re_empty_mod_pf_line.match(mline)
+ if match:
+ fullname_orig = match.group(1)
+ module_info = cls(
+ appname=appname, verbose=verbose, base_dir=base_dir,
+ full_name=fullname_orig, repo_type='forge',
+ )
+ return module_info
match = cls.re_mod_pf_line.search(mline)
if not match:
if verbose > 2:
- LOG.debug("Line {!r} is not a module definition line.".format(line))
+ LOG.warn("Line {!r} is not a module definition line.".format(line))
return None
fullname_orig = match.group(1)
if 'commit' in definitions:
module_info.ref = definitions['commit']
+ if 'latest' in definitions:
+ module_info.forge_version = 'latest'
+
if 'version' in definitions:
module_info.ref = definitions['version']