diff options
author | Brian Feldman <green@FreeBSD.org> | 2004-02-27 21:01:02 +0000 |
---|---|---|
committer | Brian Feldman <green@FreeBSD.org> | 2004-02-27 21:01:02 +0000 |
commit | d7e662de4c7e03751b8b15f813f79b249698ef19 (patch) | |
tree | d7be1b9de5fed30518b26bcbb63bb5bb0d92f0bf /Tools/scripts/plist | |
parent | Change WWW to its primary location. (diff) |
Update "plist" to understand the rest of the mtree(5) file format,
thus fixing the extra-@dirrm-problem once the base mtree files
document the extra symlinks that are part of the local/etc. trees.
Notes
Notes:
svn path=/head/; revision=102311
Diffstat (limited to 'Tools/scripts/plist')
-rwxr-xr-x | Tools/scripts/plist | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/Tools/scripts/plist b/Tools/scripts/plist index 92e953e69194..6a903ad15f33 100755 --- a/Tools/scripts/plist +++ b/Tools/scripts/plist @@ -42,29 +42,51 @@ class Mtree @paths = [] @curlevel = [] @strip = strip.to_i - @cont = false + @curline = '' + @global_settings = {} self end def parse_line(line) line.chomp! - spline = line.split - oldcont = @cont - @cont = line[-1, 1] == "\\" - case spline[0] - when nil - when /^[\/#]/ - # ignore "command" lines and comments - when '..' - if oldcont - raise 'continued line has a .. directive?!' + if line.empty? || line[0, 1] == '#' + return + end + if line[-1, 1] == "\\" + @curline.concat(line[0..-2]) + next + end + line = @curline + line + @curline = '' + case line[/\S.+/] + when /^\/(\S+)/ + case $1 + when 'set' + $'.split.each {|setting| + key, value, = setting.split(/=/) + @global_settings[key] = value + } + when 'unset' + $'.split.each {|setting| @global_settings.delete(setting)} + else + raise "invalid command \"#{$1}\"" end + when '..' if @curlevel.pop.nil? raise '".." with no previous directory' end else - if !oldcont - @curlevel.push(spline[0]) - @paths.push(@curlevel.dup) + spline = line.split() + path = spline[0] + settings = @global_settings.dup + if spline.size > 1 + spline[1..-1].each {|setting| + key, value, = setting.split(/=/) + settings[key] = value + } + end + @paths.push(@curlevel + [path]) + if settings['type'] == nil || settings['type'] == 'dir' + @curlevel.push(path) end end self |