Home

Awesome

debian: functions module for shellfire

This module provides a simple framework for parsing Debian constructs. Currently, this consists of Debian control files, although specific support is only implemented for the copyright format. Other parsers are trivial to implement - look at the code in copyright.functions. The parser validates format, syntax, checks for duplicates and verifies that mandatory fields are present.

An example user is swaddle.

Compatibility

Overview

Usage couldn't be simpler. To parse a Debian copyright file, try:-

debian_control_copyright my_callback /usr/share/doc/swaddle/copright

where my_callback is a function that accepts parse events:-

my_callback()
{
	local fileFormat="$1"
	local paragraphType="$2"
	local eventType="$3"
		
	# 'Copyright'
	echo "File Format $fileFormat"
	
	# 'Header', 'Files' or 'License'
	echo "$paragraphType"
	
	# 'ParagraphStart', 'ParagraphEnd' or 'Field'
	echo "$eventType"
	
	if [ "$eventType" = 'Field' ]; then

		local fieldName="$4"
		local fieldType="$5"
		
		# eg 'Format'
		echo "$fieldName"
		
		# eg 'singleLine' (see docs)
		echo "$fieldType"
		
		# Depending on fieldType, you can get to values with debian_control_parser_fieldValueFirstLine, debian_control_parser_rawLines (an array), debian_control_parser_fieldValue (for folded fields) or debian_control_parser_continuationLines (for fields with a synopsis or list)
	fi
}

Of course, you can implement your own parsers by defining a paragraph handler, eg:-

debian_control_parser_myParagraphHandler()
{
	…
}

debian_control_parser my_callback debian_control_parser_myParagraphHandler no /usr/share/doc/swaddle/copright

Importing

To import this module, add a git submodule to your repository. From the root of your git repository in the terminal, type:-

mkdir -p lib/shellfire
cd lib/shellfire
git submodule add "https://github.com/shellfire-dev/debian.git"
cd -
git submodule init --update

You may need to change the url https://github.com/shellfire-dev/debian.git above if using a fork.

You will also need to add paths - include the module paths.d.

You will also need to import the unicode module.

Namespace debian_control_copyright

This namespace contains the core functionality needed to parse Debian control copyright files.

To use in code

If calling from another shellfire module, add to your shell code the line

core_usesIn debian/control copyright

in the global scope (ie outside of any functions). A good convention is to put it above any function that depends on functions in this module. If using it directly in a program, put this line inside the _program() function:-

_program()
{
	core_usesIn debian/control copyright
	…
}

Functions


debian_control_copyright()

Arguments deliberately not described. Pass this function as the paragraph argument of debian_control_parser() to parse Debian copyright file.

ParameterValueOptional
eventHandlerFunction to handle parser events.No
copyrightFilePathPath to Debian copyright file to parse.No

See the description of debian_control_parser() for documentation of the eventHandler.


Namespace debian_control_parser

This namespace contains the core functionality needed to access the API.

To use in code

If calling from another shellfire module, add to your shell code the line

core_usesIn debian/control parser

in the global scope (ie outside of any functions). A good convention is to put it above any function that depends on functions in this module. If using it directly in a program, put this line inside the _program() function:-

_program()
{
	core_usesIn debian/control parser
	…
}

Functions


debian_control_parser()

You are advised to not use this function directly, but instead use specific parsers:-

ParameterValueOptional
eventHandlerFunction to handle parser events.No
paragraphHandlerFunction defined to handle file subformat (paragraphs).No
commentsAllowedBoolean. Comments are only normally allowed in debian/control package source files. If in doubt, use yes.No
controlDataFilePathPath to Debian control file to parse.No

The callback function is the following arguments:-

VariableDescription
fileFormatThe file format. Dictated by first paragraph kind. Not useful as you know this, unless writing a generic paragraph function or eventHandler.
paragraphTypeThe start or end of an object or array. The type of value: boolean (including null), number or string
eventTypeThe parse event name. One of ParagraphStart, Field and ParagraphEnd. If ParagraphStart is raised, one or more Field will be raised next followed by ParagraphEnd.
fieldNameOnly passed if eventType is Field.
fieldTypeOnly passed if eventType is Field.

If eventType is Field, then the following variables are (locally) in scope depending on the value of fieldType:-

VariablefieldTypeDescription
debian_control_parser_fieldValueFirstLineAnyValue of first line, trimmed
debian_control_parser_fieldValueAnyAs above but with foldedCommas / foldedWhitespace unfolded.
debian_control_parser_rawLinesAnyAll lines, including first
debian_control_parser_continuationLinesAnyTrimmed continuation lines, but includes first line for multilineList and multilineWithoutSynopsis

fieldType may be one of:-

ValueDescription
singleLineA single line. The commonest type
foldedCommasA folded line; folding uses commas. Only used in source control files, eg Uploaders
foldedWhitespaceA folded line; folding uses whitespace. Only used in source control files, eg .changes' Binary
multilineListBlankFirstLineMultiple lines, first blank, eg Checksums-Sha1
multilineListMultiple lines, first blank, eg Upstream-Contact
multilineWithSynopsisMultiple lines, first synopsis, eg Description, License
multilineWithoutSynopsisMultiple lines, no synopsis, eg Comment

Additionally, the function debian_control_parser_outputRawFieldLines' can be called to write to standard out the current field exactly as read.

If eventType is ParagraphEnd, then the array variable debian_control_parser_fieldsInParagraph contains the fields found in the paragraph.


debian_control_parser_outputRawFieldLines()

Takes no arguments. Writes to standard out the current field exactly as read when the eventType is Field.


debian_control_parser_continuationEventNotWanted()

Intended for implementation of paragraphHandler functions. Description omitted. May change.


debian_control_parser_warning()

Intended for implementation of paragraphHandler functions. Description omitted. May change.