Mercurial > hg > octave-lyh
diff scripts/pkg/private/fix_depends.m @ 17028:89acf2cd9149
Simplify the way pkg checks for dependencies.
* scripts/pkg/fix_depends.m: use regexp to verify correctness
of version strings.
* scripts/pkg/fix_version: use regexp to verify correctness
of version strings.
author | Carlo de Falco <cdf@users.sourceforge.net> |
---|---|
date | Sat, 20 Jul 2013 13:01:45 +0200 |
parents | b7667fcb9fbc |
children |
line wrap: on
line diff
--- a/scripts/pkg/private/fix_depends.m +++ b/scripts/pkg/private/fix_depends.m @@ -28,38 +28,40 @@ function deps_cell = fix_depends (depends) deps = strtrim (ostrsplit (tolower (depends), ",")); deps_cell = cell (1, length (deps)); + dep_pat = ... + '\s*(?<name>\w+)+\s*(\(\s*(?<op>[<>=]+)\s*(?<ver>\d+\.\d+(\.\d+)*)\s*\))*\s*'; ## For each dependency. for i = 1:length (deps) dep = deps{i}; - lpar = find (dep == "("); - rpar = find (dep == ")"); - ## Does the dependency specify a version - ## Example: package(>= version). - if (length (lpar) == 1 && length (rpar) == 1) - package = tolower (strtrim (dep(1:lpar-1))); - sub = dep(lpar(1)+1:rpar(1)-1); - parts = strsplit (sub, " ", true); - if (length (parts) != 2) - error ("incorrect syntax for dependency '%s' in the DESCRIPTION file\n", - dep); + [start, nm] = regexp (dep, dep_pat, 'start', 'names'); + ## Is the dependency specified + ## in the correct format? + if (! isempty (start)) + package = tolower (strtrim (nm.name)); + ## Does the dependency specify a version + ## Example: package(>= version). + if (! isempty (nm.ver)) + operator = nm.op; + if (! any (strcmp (operator, {">", ">=", "<=", "<", "=="}))) + error ("unsupported operator: %s", operator); + endif + version = fix_version (nm.ver); + ## If no version is specified for the dependency + ## we say that the version should be greater than + ## or equal to "0.0.0". + else + package = tolower (strtrim (dep)); + operator = ">="; + version = "0.0.0"; endif - operator = parts{1}; - if (! any (strcmp (operator, {">", ">=", "<=", "<", "=="}))) - error ("unsupported operator: %s", operator); - endif - version = fix_version (parts{2}); - - ## If no version is specified for the dependency - ## we say that the version should be greater than - ## or equal to "0.0.0". - else - package = tolower (strtrim (dep)); - operator = ">="; - version = "0.0.0"; - endif - deps_cell{i} = struct ("package", package, "operator", operator, - "version", version); + deps_cell{i} = struct ("package", package, + "operator", operator, + "version", version); + else + error ("incorrect syntax for dependency '%s' in the DESCRIPTION file\n", + dep); + endif endfor endfunction