2010-06-17  David Lutterkort  <lutter@redhat.com>

	Test behavior of aug_setm
	  * src/augeas.c (aug_setm): return number of modified nodes
	  * tests/test-api.c (testSetM): compliance tests for aug_setm

	* src/augeas.c (aug_setm): do not segfault when sub is NULL

2010-06-17  Frederik Wagner  <fnerdwq@gmail.com>

	Tests for new aug_setm function
	Test through augtool calls.

	Exposed aug_setm to augtool.

2010-06-17  David Lutterkort  <lutter@redhat.com>

	Add aug_setm to API
	  * src/augeas.h (aug_setm): new public API call
	  * src/augeas.c (aug_setm): implement setting multiple nodes
	  * src/augeas_sym.version: export symbol aug_setm

2010-05-24  Frederik Wagner  <fnerdwq@googlemail.com>

	Shellvars: added SuSE sysconfig puppet files
	For SuSE systems, added /etc/sysconfig/{puppet,puppetmaster} to lens.

2010-05-18  Frederik Wagner  <fnerdwq@googlemail.com>

	List handling shellvars_list lens added.
	Lens shellvars_list has been added to treat variables in specific files
	as lists of words, e.g. in /etc/sysconfig/ 'kernel' and 'bootloader'.

	* lenses/shellvars.aug: removed include for /etc/sysconfig/kernel
	* lenses/shellvars_array.aug: new lens
	* lenses/tests/test_shellvars_array.aug: test for new lens

2010-05-13  David Lutterkort  <lutter@redhat.com>

	Add modules_conf to naturaldocs Menu

	Add /etc/modules.conf from hell
	Actually, from http://www.janerob.com/rob/ts5100/modules.conf

2010-05-13  Matthew Booth  <mbooth@redhat.com>

	Modules_conf: new lens for modules.conf and conf.modules

	Modprobe: Refactor to make re-use easier

2010-05-11  David Lutterkort  <lutter@redhat.com>

	* src/augeas.c: record expression for defvar in /augeas/variables

2010-05-07  David Lutterkort  <lutter@redhat.com>

	* Grub: handle comments within a boot stanza
	Fixes RH BZ 590067

	Adjust copyright notices
	  - copyright is from creation of file through 2010
	  - adjust copyright owner according to Red Hat's policy

2010-05-04  Raphael Pinson  <raphink@gmail.com>

	Group: add test for disabled account ('!' in password field)

2010-04-27  seph  <seph@directionless.org>

	Shellvars: process /etc/environment

2010-04-26  Nicolas Valcrcel Scerpella  <nvalcarcel@ubuntu.com>

	Iptables: also look for /etc/iptables-save
	This is where Debian keeps iptables rules

2010-04-26  Frederik Wagner  <fnerdwq@googlemail.com>

	securetty: added handling of emtpy lines/comments
	* lenses/securetty.aug:
	        added handling of comments and empty lines
	* lenses/tests/test_securetty.aug:
	        added test for enhanced lens

2010-04-21  David Lutterkort  <lutter@redhat.com>

	Version 0.7.1

2010-04-21  Simon Josi  <josi@puzzle.ch>

	Securetty: new lens and test for /etc/securetty

2010-04-21  David Lutterkort  <lutter@redhat.com>

	Sudoers: use example file from Fedora 13
	This is causing trouble with release-0.7.0, but not this revision.

	File was reported in bug #122

	tests: make most tests work on Solaris
	The test scripts are full of bashisms; removed some of them, though for
	most, just changed the shell from /bin/sh to /bin/bash; removing bashisms
	will need to be addressed.

	Tests now mostly pass (82/85) on the OpenCSW Solaris 5.10 build machine

	* tests/test-save.c: use proper includes for WIFEXITED
	Without them, the build fails on FreeBSD

2010-04-20  David Lutterkort  <lutter@redhat.com>

	Debctrl (multi_line_entry): fix bad regexp
	The lens 'del /^ / " "' is not valid, since we do not allow '^' as a meta
	character. Changing that to 'del / / " "' exposed a typecheck problem in
	lns: both multi_line_entry and eol match blank lines. Fixed this by
	requiring that a multi_line_entry has to have at least one non-blank
	character.

	Debctrl: whitespace cleanup, no functional change

	* src/fa.c (re_iter_as_string): escape literal '|'
	When turning a FA back to a string, a literal '|' needs to be output as '\|'

	  * tests/fatest.c (testExpandCharRanges): test escaping of literal '|'

2010-04-19  David Lutterkort  <lutter@redhat.com>

	* tests/fatest.c (print_regerror): do not use alloca

	* bootstrap: pull in isblank explicitly
	Fixes bug #111

	* src/lens.c (lns_check_rec): fix refcounting mistake on error path
	Fixes bug #120

	* src/augtool.c: report an error when 'get' fails

	aug_get: return -1 when multiple nodes match
	This fixes breakage in the API contract for aug_get, introduced in commit
	e80494a6. Also adds a test to ensure we do not break API for aug_get again.

	Fixes bug #121

2010-04-16  David Lutterkort  <lutter@redhat.com>

	jmt: distinguish between successful parse and syntax error at end of input
	If a syntax error happened after the last character of the input string
	(e.g., becuase the input was incomplete), rec_process would think the parse
	was successful, and then notice that there was no parse result. That would
	lead to an incorrect error message hinting at an internal error, when it
	was really a syntax error.

	By changing the return value for jmt_visit, it's now possible to
	distinguish between internal errors, syntax errors and successful parses
	properly.

	* src/get.c (visit_exit): handle L_MAYBE
	Added test to tests/modules/pass_simple_recursion.aug, lens 'maybe'

	Fixes bug #119

	* src/jmt.c (build_tree): print debug output for build_nullable

2010-03-12  David Lutterkort  <lutter@redhat.com>

	* lenses/tests/test_logrotate.aug: add test for files separated by newlines
	This test the fix for bug #104, commit fe0453ce.

2010-03-11  David Lutterkort  <lutter@redhat.com>

	* lenses/group.aug (password): remove backslashes
	Backslashes in char classes are taken literally, they do not escape a
	character.

2010-03-11  root  <root@lx200.costest.lrz.de>

	Group: Added disabled password support
	* lenses/group.aug: '*' and '!' are allowed chars for disabled password
	* lenses/tests/test_group.aug: added test for lens change

2010-03-11  David Lutterkort  <lutter@redhat.com>

	* src/lens.c (lns_check_rec): avoid use of uninitialized 'result'
	The ensures can fail, and we check whether result is NULL in the error
	path.

2010-03-05  David Lutterkort  <lutter@redhat.com>

	* src/lens.c (lns_format_atype): format L_REC lenses

	* src/lens.c: remove asserts; better error for missed tag in switch

	Shellvars: handle a bare 'export VAR'

	Inittab: allow ':' in the process field
	Fixes part of bug #109

2010-03-05  Tim Stoop  <tim.stoop@gmail.com>

	Approx: allow keywords starting with '$'

2010-03-04  David Lutterkort  <lutter@redhat.com>

	Approx: lens and test for the approx proxy server

	Produce a better error when iteration stops prematurely during put/create
	We now try to include the name of the child node that caused us to stop in
	the error message.

2010-03-03  David Lutterkort  <lutter@redhat.com>

	* src/fa.c: allow the strange regexp syntax '(a|)'
	POSIX allows it, and so do we now

	Fixes bug #113

2010-03-02  David Lutterkort  <lutter@redhat.com>

	Passwd: parse NIS entries on Solaris
	Based on a fix by Stuart Sears

2010-02-26  David Lutterkort  <lutter@redhat.com>

	* src/fa.c: clean up error macros
	The error macros _E, _F, and _N use names reserved for system libraries;
	this leads to compile errors at least on Solaris (as reported by lanky).

	Rename _E and _F to E and F, and eliminate _N.

2010-02-26  Frederik Wagner  <wagner@lrz.de>

	Modprobe: Suse includes
	* lenses/modprobe.aug: included /etc/modprobe.conf.local

	Shellvars: Suse includes
	* lenses/shellvars.aug:
	    added include for /etc/sysconfig/network/ifcfg-

	Grub: support empty kernel parameters, Suse incl.s
	* lenses/grub.aug:
	  - added support for kernel parameters of the form "parameter="
	    w/o given value
	  - included /boot/grub/menu.lst
	  - changed default for delimiter in kw_menu_arg to " "
	* lenses/tests/test_grub.aug: changes corresponding to lens change

2010-02-26  Dominique Dumont  <domi.dumont@free.fr>

	Debctrl: new lens and test

2010-02-23  David Lutterkort  <lutter@redhat.com>

	Ntp: add 'tinker' directive
	Fixes bug #103

	Logrotate: tolerate whitespace at the end of a line
	Fixes bug #101

2010-02-23  Raphael Pinson  <raphink@gmail.com>

	Dhclient: add rfc code parsing
	Fixes bug #107

	Sudoers: allow del_negate even if no negate_node is found
	Fixes bug #106

	Logrotate: files can be separated by newlines
	Fixes bug #104

	Dput: add 'allow_dcut' parameter
	Fixes bug #105

2010-02-22  David Lutterkort  <lutter@redhat.com>

	* src/augtool.c: ignore empty lines from stdin
	We still complain about the nonsensical 'augtool ""'.

	Fixes BZ 566844 reported by Mike Burns

2010-02-22  Stuart Sears  <ssears@redhat.com>

	Sudoers (parameter_string_nobool_kw): accept "secure_path "
	Fixes BX 566134

2010-02-19  Tim Stoop  <tim.stoop@gmail.com>

	Nagisocfg: lens and test for /etc/nagios3/nagios.cfg

2010-02-12  Ivana Hutarova Varekova  <varekova@redhat.com>

	Cgrules: new lens and test
	See cgrules.conf for http://libcg.sourceforge.net/

2010-02-11  Ivana Hutarova Varekova  <varekova@redhat.com>

	Cgconfig: lens and tests for libcgroup config
	See http://libcg.sourceforge.net/

2010-02-11  Laine Stump  <laine@laine.org>

	* src/transform.c (file_info): fix memory leak

2010-02-09  David Lutterkort  <lutter@redhat.com>

	* lens.c (ambig_check): pretty print tree type errors
	Instead of dumping raw regular expressions for the tree encoding, print out
	something resembling our tree notation.

2010-02-08  David Lutterkort  <lutter@redhat.com>

	libfa: handle the syntax r{min,} properly
	  * src/fa.c (parse_repeated_regexp): set max = -1 when we see r{min,};
	    (re_iter_as_string): when max == -1, print r{min,}
	  * tests/fatext.c (testExample): add a few tests for this syntax

	* src/fa.c (parse_int): flag not parsing anything as an error

	* src/jmt.c: add caller filtering
	Caller filtering is needed to weed out seemingly ambiguous parse trees (see
	Section 5.3 of Jim/Mandelbaum's paper)

	Also adds two pathological lenses and tests to
	pass_simple_recursion.aug. Those tests fail without caller filtering.

	* AUTHORS: reformatted

	* tests/Makefile.am: add test for cobblermodules.aug

2010-02-08  Shannon Hughes  <shughes@redhat.com>

	Cobblermodules: lens + tests for cobbler's modules.conf

2010-02-02  David Lutterkort  <lutter@redhat.com>

	Shellvars: allow spaces after/before opening/closing parens for array
	Bug reported by Doug Warner

2010-02-01  Matthew Palmer  <matt@anchor.net.au>

	Sshd: allow optional arguments in subsystem commands

2010-01-27  David Lutterkort  <lutter@redhat.com>

	* src/augeas.c (tree_replace): don't bother marking the new parent as dirty
	We call tree_rm on it earlier, which already marks it as dirty.

	This line also triggered a SEGV when sub == NULL; this happened, for
	example, when /etc/apt/preferences was an empty file.

	Bug reported by Matt Palmer

	* src/get.c (no_match_error): initialize lname
	Otherwise, gcc complains about a possibly uninitialized value with -O2

2010-01-25  David Lutterkort  <lutter@redhat.com>

	Test for using a recursive lens inside other lenses

	* src/get.c: handle recursive lenses that are not L_REC
	Since any lens that uses an L_REC is itself recursive, the distinction
	whether to use get_rec or get_lens can be made in lns_get

	rec_process will also build the jmt if it does not exist yet

	Fixes ticket #100

	Properly handle lenses that use L_REC lenses
	In constructs involving a recursive lens, we need to take the body of the
	recursive lens into consideration. We avoid infinite recursion by stopping
	when we see an L_REC that is marked as rec_internal, since that's the
	struct lens that points back to the top of the lens from within it.

	jmt_build now expects to be handed a properly set up recursive lens, which
	means that for an L_REC both the internal and external instances have to
	exist and be connected

	  * src/lens.c (lns_check_rec): defer building the jmt until the end
	  * src/jmt.c: when building the jmt, consider L_REC as long as it's not
	    internal

	* src/jmt.c (print_grammar): recurse into L_REC if they are not rec_internal

	* src/jmt.c (jmt_visit): allow for toplevel lenses that are not L_REC
	To reconstruct the parse of a lens that is not L_REC, but uses L_REC,
	e.g. l* where l is L_REC, we can not assume any longer that the root of the
	parse tree has only one child. Consequently, we need to start
	reconstruction with listing all the children of the root node.

	Split build_tree into build_children (collects a list of child nodes) and
	build_tree which creates the tree for a nonterminal.

	To start reconstruction, we now start with collecting the list of children
	of the root of the parse tree; the Earley graph does not contain an item
	for that, which makes this operation slightly special.

	* src/lens.c: propagate rec_internal in the body of an L_REC

	* src/lens.c: don't short-circuit typechecking for recursive lenses explicitly
	The typecheck helpers are all smart enough to not run checks when one of
	the types is NULL, as is the case for recursive lenses.

	* src/lens.h (struct lens): explain better how we handle recursive lenses

	* src/jmt.c (build_trace): allow passing in a NULL item

	* src/lens.c (tags): add name for value primitive

	* src/get.c: replace assert's by ensure's
	assert aborts, which a library shouldn't do

	* src/errcode.h (ensure0): convenience version of ensure

	* src/get.c (find_seq): properly report OOM, do not call abort

	Remove assert_error_at
	This function was dangerous, since it does not jump, and therefore users
	will continue doing what they were doing, even if an assertion failed. Use
	BUG_ON instead.

	* src/get.c (struct state): make info a pointer

2010-01-23  David Lutterkort  <lutter@redhat.com>

	* src/lens.c (restrict_regexp): properly report OOM

2010-01-20  David Lutterkort  <lutter@redhat.com>

	Document the basics of building from git

2010-01-15  David Lutterkort  <lutter@redhat.com>

	* src/builtin.c: builtins for printing and inspecting lenses

	Add a unit type
	The literal '()' is the only member of the unit type. Composition is now
	allowed if the first expression is of type unit, i.e. '() ; something' is
	legal.

	Language: allow '_' as an identifier that is never bound
	  The expression
	    let _ = something
	  will evaluate something and then immediately forget it

	  * src/lexer.l (LID): allow leading underscore
	  * src/syntax.c (bind, bind_type): do not bind '_'

	New primitive lens 'value'
	In analogy to 'label', this lens allows setting the value of a tree node to
	a fixed string

2010-01-14  David Lutterkort  <lutter@redhat.com>

	Version 0.7.0

	Json: lens and tests for generic Json files

	Tests for recursive (context free) lenses

	Syntax for recursive lenses
	Add a 'let rec' construct; the syntax should be considered experimental and
	might be changed to some other form of expressing recursion.

	With recursive lenses, we can't do the bottom-up typechecking that we do
	for regular lenses; we need to consider the whole lens at once. This is
	achieved by inserting a callback to lns_check_rec when we parse 'let rec
	ident = exp'.

	  * src/builtin.c (lns_check_rec_glue): new function
	  * src/lexer.l: new token LETREC
	  * src/parser.y: add syntax rule for LETREC and desugar it into a call to
	    lns_check_rec
	  * src/syntax.h: make free_term available, constant for name
	    of let_check_rec within the interpreter
	  * src/syntax.c (free_term): now extern, not static

	* src/get.c (get_rec, parse_rec): get/parse for recursive lenses

	* src/put.c: put/create for recursive lenses

	Remember the jmt in the lens and free it when it is no loner needed

	Earley parser based on Jim/Mandelbaum's transducers

	Calculate if a lens's ctype is nullable

	Add a typechecker and constructor for recursive lenses
	  * src/lens.h (lns_make_rec, lns_check_rec): new functions
	  * src/lens.c (lns_make_rec, lns_check_rec): new functions

	Suppress buildtime typechecks for L_REC; propagate recursive flag

	* src/lens.c (free_lens): free recursive lenses

	* src/lens.h: add a recursive lens combinator

	A simple debug facility
	Debugging is disabled by default. When configured with --enable-debug=yes,
	Augeas will look at runtime at the environment variable AUGEAS_DEBUG, which
	should contain a colon-separated list of categories. Besides printing
	various thigs on stdout, some debug output is also left in files in the
	directory set by the environment variable AUGEAS_DEBUG_DIR, e.g., dot
	graphs of various internal data structures.

	  * configure.ac: add --enable-debug option
	  * src/internal.h (debugging, debug_file): new functions
	  * src/internal.c (debugging, debug_file): new functions

	struct error: add pointer back to struct augeas

	* src/errcode.h: more usable BUG_ON and BUG_FMT

	* src/lens.c (ambig_check): report OOM from fa_ambig_example

	* src/fa.c (fa_ambig_example): getting a NULL example is not an error

	* src/syntax.c (compile): give up after the first error
	We have no error recovery to speak off; if we keep going, we most of the
	time carpet-bomb the user with error messages that are simple follow-ons to
	the first error.

	* TODO: deleted, that list is in Trac now

	* src/fa.c (fa_intersect): initialize vars that could be used on error

	* src/fa.c (fa_as_regexp): convert strings more efficiently
	Since we are building the transitive closure of the FA, cut down the size
	of the FA by first extracting strings and removing their internal states.

	* src/fa.c (fa_as_regexp): fin only accepting state, no trans fin->fin

	Indicate whether an FA uses character ranges or regexps on transitions
	  * src/fa.c (struct fa): new field trans_re; (fa_as_regexp): set trans_re;
	    (fa_dot): print regexp rather than char range if trans_re is set

2010-01-13  David Lutterkort  <lutter@redhat.com>

	Add syntax for case-insensitive regexps
	A regexp literal /regexp/i will be converted to a case-insensitive regexp.

	* src/regexp.c (regexp_minus): respect nocase flags

	* src/lens.c (str_to_fa): compile nocase fa when needed

	* src/lens.c (str_to_fa): remove FIXME's and use proper error reporting

	Support for case-insensitive regexps
	Add nocase argument to make_regexp, and adjust all uses of make_regexp to
	pass that in. For concatenation and union of regexps we have to expand
	case-insensitive regexps when they are mixed with case-sensitive regexps.

	Adjust all uses of make_regexp.

	Add fa_expand_nocase to libfa

	Support for case-insensitive operations in libfa
	  * src/fa.h (fa_nocase, fa_is_nocase): new functions
	  * src/fa.c (struct fa): new field nocase; (fa_is_basic): a total FA has
	    two transitions under nocase; (fa_clone): preserve nocase flag;
	    (union_in_place, concat_in_place, fa_intersect): if one operand is
	    nocase, and the other isn't, expand the nocase FA to a case-sensitive
	    one; (totalize): do not add transitions on [A-Z]; (fa_nocase,
	    fa_is_nocase): new functions; (case_expand): new function
	  * tests/fatest.c (assertExample): also test against a nocase FA;
	    (testNoCase): test concat etc. on nocase FA's

	* src/lens.c (subtree_atype): new function

2010-01-07  David Lutterkort  <lutter@redhat.com>

	Facelift for augtool
	This makes augtool somewhat friendlier, mostly because

	  - help is organized better: typing 'help' produces a list of commands and
	    a brief synopsis for each, typing 'help command' prints detailed help
	    about a command
	  - augtool now knows about path expressions, so that they do not need to
	    be enclosed in quotes if they have spaces with predicates, e.g. you can
	    now type 'get /foo[ last() ]'

	Record an error if more than one lens tries to load a file
	  * src/transform.c (file_info): new function; (transform_load): detect if
	    more than one lens tries to load a file and record error in
	    /augeas/files/PATH/error

	Pull computing a path underneath /files from a filename into a function
	  * src/transform.c (file_name_path): new function; (load_file): use
	    file_name_path

	Change the metadata for individual files
	Record the name of the lens used to load the file in the lens node
	underneath /augeas/files/$PATH; the location info of the lens is kept in
	lens/info

	  * src/transform.c (add_file_info): change what we keep underneath the
	    lens node
	  * tests/xpath.tests (lircd-ancestor): adapt to metadata change

	* src/transform.c (add_file_info): manipulate tree directly
	Going through public functions like aug_set is silly, and causes all kinds
	of string munging.

	Produce better error message for multiple matching transforms in save
	  * src/augeas.h (aug_errcode_t): new error code AUG_EMXFM
	  * src/augeas.c (errcodes): new error string for AUG_EMXFM; (tree_save):
	    report multiple transforms as proper error
	  * tests/test-save.c (testMultipleXfm): new test

	New function transform_file_error
	  * src/transfrom.h (transform_file_error): add prototype
	  * src/transform.c (transform_file_error): new function

	New function xfm_lens_name
	  * src/transfrom.h (xfm_lens_name): add prototype
	  * src/transform.c (xfm_lens_name): new function

	Tree functions to find/create a node with a path expression
	Internal counterparts to aug_get and aug_set

	  * src/internal.h (tree_find, tree_find_cr): new prototypes
	  * src/augeas.c (tree_find, tree_find_cr): new functions

	* src/internal.h: make various tree management functions available

2010-01-06  David Lutterkort  <lutter@redhat.com>

	Xinetd (name): fix bad '-' in character class

2010-01-05  David Lutterkort  <lutter@redhat.com>

	Do not choke on non-existing lens during save
	  * src/transform.c (add_file_info): check that lens is non-NULL;
	    (lens_from_name): provide detailed error message when lens lookup
	    failed; (transform_validate): copy error from lens_from_name into tree
	  * tests/test-save.c (testNonExistentLens): new test

	Fixes bug #98

	New error code AUG_ENOLENS
	Indicates failure to look a lens up by name from /augeas/load/*/lens

	  * src/augeas.h (aug_errcode_t): new value AUG_ENOLENS
	  * src/augeas.c (errcodes): new entry for AUG_ENOLENS

	* src/lens.c (lens_release): tolerate a NULL lens

2010-01-04  Bryan Kearney  <bkearney@localhost.localdomain>

	Cobblersettings: new lens and test

2010-01-04  David Lutterkort  <lutter@redhat.com>

	Rename read_file to xread_file

2009-12-23  David Lutterkort  <lutter@redhat.com>

	* src/lens.c (lns_make_union, lns_make_concat): do not access free'd memory
	make_lens_binop may free one of the lenses it gets passed. We can therefore
	not reference them after a call to make_lens_binop.

	* src/lens.c (format_lens): minimalistic pretty-printing of a lens

	* src/regexp.c (print_regexp): clean the regexp with fa_restrict_alphabet

2009-12-18  David Lutterkort  <lutter@redhat.com>

	* src/builtin.c (lens_get, lens_put): propagate errors as exceptions

	More convenience macros for errors
	Add BUG_ON and ERR_RET macros for reporting internal errors

	  * src/errcode.h (BUG_ON, ERR_RET, HAS_ERR): new macros
	  * src/errcode.c (bug_on): implementation for BUG_ON

2009-12-17  David Lutterkort  <lutter@redhat.com>

	Lokkit: allow '-' in arguments

	Iptables: handle both negation syntaxes
	Options can be negated either with '! --option arg' or with '--option !
	arg'. We now handle both, though they lead to slightly different trees

2009-12-14  David Lutterkort  <lutter@redhat.com>

	* doc/ftdetect/augeas.vim: fix syntax

2009-12-09  Partha Aji  <paji@redhat.com>

	Made samba aug accept entry keys with ':' in them

2009-12-09  David Lutterkort  <lutter@redhat.com>

	Shellvars: allow arrays that span multiple lines

2009-12-07  David Lutterkort  <lutter@redhat.com>

	Iptables: allow quoted strings as arguments

2009-11-30  David Lutterkort  <lutter@redhat.com>

	Version 0.6.0

	Distribute and install vim syntax files
	Fixes ticket #97

	* Makefile.maint: sign tags

	Krb5: allow v4_name_convert in libdefaults section
	Fixes part of ticket #95

	Fstab: allow # in the spec
	Fixes part of ticket #95

	Group: allow empty password field
	Fixes part of ticket #95

	* src/parser.y: properly initialize yylloc
	Fixes ticket #96

2009-11-25  David Lutterkort  <lutter@redhat.com>

	Properly check regexp literals for syntax errors
	  * src/regexp.h (regexp_check): new function
	  * src/regexp.c (regexp_compile_internal): new function to base both
	    regexp_compile and regexp_check off
	  * src/syntax.c (check_value): produce a syntax error if regexp does not
	    pass regexp_check; (check_exp): make sure we do check values

	Fixes ticket #93

	* src/lexer.l: include errcode.h; fix bad use of report_error

	* src/errcode.c: include stdarg.h

	Cron: variable names can contain '_' etc.
	Use Shellvars.key_re for consistency.

	Fixes ticket #94

2009-11-25  Matt Palmer  <mpalmer@hezmatt.org>

	AptPreferences: add a put test
	Make sure we handle an empty file properly, and cleanup the resulting
	hassle

2009-11-24  Matt Palmer  <mpalmer@hezmatt.org>

	Normalise records so that empty lines (which are a required part of the syntax) don't creep into the tree

	Support version pins in apt_preferences

2009-11-23  David Lutterkort  <lutter@redhat.com>

	* tests/Makefile.am (lens_tests): run postfix_access tests

2009-11-16  Partha Aji  <paji@redhat.com>

	Added a Post Fix Access lens along with the unit tests

2009-11-13  David Lutterkort  <lutter@redhat.com>

	* src/lens.c (ambig_check): distinguish error between concat and iteration

	* src/regexp.c (regexp_escape): treat NULL regexps as the empty regexp

	* src/regexp.c (regexp_escape): fix stripping of enclosing parens
	Only strip them if they belong together, and not for something like /(a)(b)/

	* src/syntax.c: spew exceptions less often
	  print_value: only print exceptions that haven't been seen
	  compile_test: only print the exception for a test when it hasn't
	                been seen

	* src/get.c: never try to process a string that doesn't match
	When a string during init_regs doesn't match at all, there's nothing useful
	we can do. Immediately return an error from lns_get.

	* src/syntax.h (exn_error): produce an exception to indicate an error
	exn_error returns a special exception that indicates that an error has
	happened (e.g., out-of-memory) that has already been reported in the
	central augeas->error instance.

2009-11-12  David Lutterkort  <lutter@redhat.com>

	* src/info.c (print_info): do not choke on NULL info

	* src/internal.h: new macros MEMCMP and MEMMOVE

	* src/lens.c (lns_make_subtype): explain type derivation

	* examples/fadot.c: by default, print minimized regexp

	* examples/fadot.c: fix formatting, no functional changes

2009-11-10  David Lutterkort  <lutter@redhat.com>

	Make augparse and augtool use user's locale

	* test/Makefile.am (TEST_ENVIRONMENT): set LANG to a non-C locale

	Remove character ranges from regexps if we are not in the C locale
	Since re_compile_pattern uses the current locale when expanding character
	ranges like [a-z], we need to be careful that such ranges are expanded in
	the C locale.

	  * configure.ac: check for uselocale
	  * src/internal.[ch] (regexp_c_locale): new function
	  * src/lens.c (digits_string): spell out the digits
	  * src/lens.c (restrict_regexp): expand char ranges in restricted regexp
	  * src/lexer.l (regexp_literal): run regexp literals through
	    regexp_c_locale
	  * src/regexp.c (regexp_escape): compress character ranges for printing
	  * src/regexp.c (regexp_minus): expand charcter ranges

	Fixes ticket #35 for systems that do not have uselocale (for systems with
	uselocale, the fix is commit 07b6a880)

	libfa: new function fa_expand_char_ranges

	Calls to __aug_load_module need to go through api_entry/api_exit

	Switch to C locale on API entry on systems that have uselocale
	Since we need to do all our operations (especially regexp matching) in the
	C locale, we switch to that on API entry, and switch back to the user's
	locale on API exit.

	That also makes it necessary that aug_init wraps the bulk of its work
	inside an api_entry/api_exit.

	Fixes ticket #35 for systems that have uselocale

2009-10-26  David Lutterkort  <lutter@redhat.com>

	Inittab: parse end-of-line comments into a #comment

2009-10-23  David Lutterkort  <lutter@redhat.com>

	* src/lens.c (lns_make_subtree): parenthesize key and value patterns
	These patterns may be a union not enclosed in parens

	* src/regexp.c (regexp_escape): don't clobber last character

	* src/lens.c: use regexp_escape to print regexps in error messages

	* src/fa.c (fa_restrict_alphabet): initialize parse

	* src/fa.c (special_chars): treat $ and ^ as special
	They are special when they are at the beginning resp. the end of a regular
	expression. Making them special (i.e., escaping them with '\') everywhere
	doesn't hurt.

	* src/fa.c (re_needs_parens_in_concat): ITER doesn't need parens in concat

	* src/fa.c (re_cset_as_string): work properly with negated cset
	We did not take re->negate into account, and always acted as if the cset
	was not negated. Introduce helper function cset_contains to both fix that
	and make the code a little clearer.

2009-10-22  David Lutterkort  <lutter@redhat.com>

	bootstrap: use stpcpy and stpncpy from gnulib

	Makefiles: gnulib now requires linking against libselinux
	  * src/Makefile.am (libfa_la_LIBADD): add LIB_SELINUX
	  * examples/Makefile.am (fadot_LDADD): remove GNULIB

2009-10-21  David Lutterkort  <lutter@redhat.com>

	Path expressions: add union operator
	Nodesets can now be unioned with the '|' operator

	Fixes ticket #89

	* src/pathx.c (clone_nodeset): properly set size of the clone
	The size of the clone is the number of nodes in the original nodeset, not
	the size of the original nodeset.

	* src/regexp.c (regexp_union_n): insert '|' after the first non-NULL regexp
	We can not blindly insert a '|' after the first passed-in regexp since that
	(and any number of regexps at the beginning) might be NULL. We only insert
	'|' after actually copying a regexp into the result.

2009-10-20  David Lutterkort  <lutter@redhat.com>

	Wine: new lens and test
	Lens for parsing textual Windows registry files

	Pam: allow '-' before type
	The type field in a pam.d file can start with a '-' to indicate that
	missing the module should not cause an error. The '-' is now mapped into
	the tree as a separate node 'optional'

	Bug reported by Shannon Hughes

	* test/Makefile.am (lens_tests): add lens-ethers.sh

	* src/internal.c (escape): convert char to unsigned when printing as octal
	Without that, there's no guarantee that the char will be printed as three
	octal digits and not more

	Report line/column number when get/put test fails
	  * src/builtin.c (make_exn_lns_error): add line/column number in error
	    message
	  * src/internal.c (calc_line_ofs): moved here from transform.c
	  * src/internal.h (calc_line_ofs): declare prototype
	  * src/transform.c (calc_line_ofs): moved to internal.c

	* src/get.c (get_error): use end of last match as error position

	* man/augtool.1: regenerate

2009-10-19  David Lutterkort  <lutter@redhat.com>

	Krb5: support a [kdc] section
	The only entry it can have so far is 'profile' - no idea what else can go
	there since it's not documented in krb5.conf(5), but used, e.g. on Fedora
	11

2009-10-12  David Lutterkort  <lutter@redhat.com>

	Rx (device_name): allow '!' in device name

2009-10-09  David Lutterkort  <lutter@redhat.com>

	Lokkit: make argument for --trust more permissive
	The --trust option takes an interface name, whcih can be more than what
	token accepts.

	  * lenses/lokkit.aug (trust): new lens; (entry): use trust
	  * lenses/rx.aug (device_name): new regexp
	  * lenses/tests/test_lokkit.aug: new test for more permissive device names

	Lokkit.forward_port: add missing eol
	Also adjust test_lokkit.aug since we're not getting a spurious empty entry
	anymore

2009-10-06  Satoru SATOH  <satoru.satoh@gmail.com>

	/etc/ethers: new lens and test
	The followings adds a new lens for /etc/ethers and associated test.

2009-09-30  David Lutterkort  <lutter@redhat.com>

	* src/augparse.c: get error details from error API

	interpreter: do not abort() on fatal errors or print on stderr
	Use the error reporting infrastructure for most errors. Fatal errors (bugs)
	in the interpreter now lead to an error code AUG_EINTERNAL, and not an
	abort()

	* src/parser.y: do not print to stderr

	* src/lexer.l: print into struct error instead of stderr

	New error code AUG_ESYNTAX

	* src/info.c (format_info): minor fixes
	  - append a ':' after the location
	  - produce a result even when line numbers are invalid
	  - use xasprintf, not asprintf

	* src/lexer.l (to_int): unused, remove

	Make struct error available in struct info
	This makes it much easier to report errors into the central struct error
	instance hanging off the Augeas instance.

	Put struct error and report_error into its own file
	Also, make the struct error in struct augeas a pointer

	* src/info.h: optimize layout of struct info

	*src/syntax.c: catch some allocation errors

	* src/ref.h (make_ref_err): convenience macro

	* tests/fatest.c (print_regerror): only print first 40 chars of regexp

	libfa: handle allocation failures gracefully

	parser: report some allocation failures

	* src/fatest.c: make testable with failmalloc
	  - when FAILMALLOC_INTERVAL is set, report success, no matter
	    how many tests failed (presumably because of memory starvation)
	  - abort with die_oom() if crucial internal checks can't be performed
	    because of allocation failures

	cutest: fortify against allocation failures
	  - new function die_oom which sets exit status to 2 when
	    we die from an oom condition
	  - use the safe-alloc macros for allocations
	  - abort the test when internal allocations fail

	* src/hash.c (hash_alloc_insert): return 0/-1 for success/error

	Use a proper function for make_ref
	That allows us to require that callers check the return value

	Handle allocation failures from define_native_intl

	build: support for running with libfailmalloc preloaded
	Add --with-failmalloc=LIB configure option and failmalloc targets to run
	select programs with failing allocations.

2009-09-24  David Lutterkort  <lutter@redhat.com>

	* src/transform.c: do not include canonicalize.h anymore
	The canonicalize-lgpl gnulib module doesn't require that anymore

2009-09-21  David Lutterkort  <lutter@redhat.com>

	Path expressions: add regexp matching
	Add a function regexp : string -> regexp and an operator
	 =~ : string|nodeset -> regexp -> boolean to the language for
	path expressions.

	* src/regexp.c (regexp_compile): do not print anything on error

	Split regexps, info and strings out of syntax.[ch]
	  * Move struct string and struct info and related functions into info.[ch]
	  * Move headers for regexp.c into new file regexp.h

	This makes it easier to reuse these outside of syntax.[ch] - including
	syntax.h in get.c and put.c was way too much anyway.

	aug_match, aug_mv: return -1 when pathx evaluation fails

	Report errors when exactly one match is expected
	aug_mv and aug_insert expect that exactly one node matches the path
	expressions they are given. Report new errors if none or more than one node
	match.

	* src/augtool.c: use new error API
	Call into the error API after each aug_* call and print error details

	Propagate pathx errors during evalutaion
	We did not report errors from pathx evaluation functions, only from the
	parser/typechecker. Now functions like pathx_first etc. report errors
	properly.

	Store pathx parse errors in internal error struct
	The pathx_parse function will now store error information in a struct
	error; we pass the one from struct augeas in and save it in the pathx.

	Reset old error messages on each entry through the API from the outside

	* src/syntax.c (interpreter_init): report errors

	Error reporting API and infrastructure
	Only reporting errors in the tree makes the API much harder to use; the
	aug_error* functions make it easier to inquire about errors
	programmatically.

	* src/pathx.c (pathx_symtab_init): unused, remove

2009-09-18  David Lutterkort  <lutter@redhat.com>

	* src/syntax.c (interpreter_init): fix potential leak
	If globbuf has entries in it when we encounter an error, we need to
	globfree it.

2009-09-17  Matt Palmer  <mpalmer@hezmatt.org>

	Sudoers: allow certain backslash-quoted characters in a command
	Commands may contain backslashes by themselves and the two-char sequences
	\\[=:,\\]

2009-09-14  David Lutterkort  <lutter@redhat.com>

	Version 0.5.3

2009-09-11  David Lutterkort  <lutter@redhat.com>

	Man pages: update to match current augtool and augparse

	Add --version option to augtool and augparse
	Fixes bug #88

	A couple more files for the test root

	Add preceding-sibling and following-sibling axes to path expressions

2009-09-10  David Lutterkort  <lutter@redhat.com>

	Better error message for too many args in a path expression

2009-09-09  David Lutterkort  <lutter@redhat.com>

	Slapd: include /etc/openldap/slapd.conf
	This is the default location in Fedora.

	Fixes bug #85

2009-09-04  David Lutterkort  <lutter@redhat.com>

	Multipath: new lens for /etc/multipath.conf

	* src/try: fix 'set annotate' for gdb

2009-09-03  David Lutterkort  <lutter@redhat.com>

	Transparent save of cross-device links
	When saving to a file, we first write to a file with extension .augnew and
	then rename that file to the actual file. This fails when the original is a
	symlink to a file on another device.

	We now write the .augnew file next to the canonicalized original file to
	avoid that headache. There are still situations where the rename fails,
	e.g. when the original file is bindmounted - in that situation, we have to
	copy.

	* src/syntax.c (print_value): use print_tree instead of dump_tree

2009-09-02  David Lutterkort  <lutter@redhat.com>

	* lenses/rx.aug (fspath): simplistic regex for filesystem paths

	* src/lens.c (disjoint_check): print example as tree for put
	When the typechecker finds lens overlap in a union's put direction, format
	the generated example as a tree to make it more readable.

	* src/lens.c(enc_format): remove extraneous quote

	Make fa_example work for strings with embedded NUL's

2009-09-01  Matt Palmer  <mpalmer@hezmatt.org>

	Inetd: new lens and test

2009-08-31  David Lutterkort  <lutter@redhat.com>

	Pretty-print lens atypes and use that for errors during put
	* src/lens.c (lns_format_atype): new function
	* src/lens.h (lns_format_atype): new prototype
	* src/put.c (regexp_match_error): use lns_format_atype for errors

	* tests/modules/pass_strip_quotes.aug: test quote stripping
	The tests strips optional quotes and puts them back (or creates them) as
	needed, only depending on the value of the tree node.

	Match trees on label and value, not just label
	We still only use one level in the tree for matching in the put direction,
	but take the values of nodes into account.

	We had fail_ tests in place to document the deficiency of the tree matcher,
	but with that deficiency gone, these now become passing tests.

	Restrict the alphabet of a regexp

	Use offsets for various lens types

	Carry the key type explicitly in lenses
	Instead of computing the key type recursively, store it in lens->ktype. The
	key type becomes the new abstract type (atype) when a lens is used inside a
	subtree combinator.

	Allow NULLS in regexp_(union|concat)_n
	It's sometimes useful to union/concat N regexps even if some of them are
	NULL. regexp_(union|concat)_n will ignore them.

	libfa: handle regexps with embedded NUL characters
	So far, the API promised that we could do that, but that wasn't implemented.

	fa_compile: accept regexps with embedded NUL's

	Make regexp_escape strip enclosing parens; make API const correct
	  * src/syntax.h (regexp_escape): make const correct
	  * src/regexp.h (regexp_escape): strip '(...)' enclosing entire regexp

	* src/builtin.c (tree_clear_glue): primitive clear function for use in tests

	Utility function xasprintf
	Like asprintf, but don't leave first arg in limbo on error

	*  src/internal.h (xasprintf): new prototype
	*  src/internal.c (xasprintf): new function

	regexp_release: allow NULL regexp

	* src/augeas.c: do not read past the end of the load path

2009-08-14  David Lutterkort  <lutter@redhat.com>

	Only read regular files
	  * src/transform.c (is_regular_file): new function
	  * src/transform.c (filter_generate): do not include non-regular files

	Fixes bug #68

2009-08-12  David Lutterkort  <lutter@redhat.com>

	Do not assume how glob allocates gl_pathv
	We assumed that the gl_pathv in a glob_t was allocated in a particular
	manner.

	  * src/transform.c (filter_generate): make a copy of gl_pathv

2009-08-10  David Lutterkort  <lutter@redhat.com>

	aug_load: cleanup variables when deleting /files
	The first thing aug_load does is delete /augeas/files and /files. We need
	to make sure that any variables that contain references to nodes in those
	subtrees are cleaned up properly, i.e. that we remove such nodes from
	nodesets in the variables.

	  * src/augeas.c (tree_unlink_children): remove descendants of the tree we
	    are deleting from variables.
	  * tests/test-load.c (testLoadDefined): verify fix

	Fixes bug #79

	Pass symtab explicitly into pathx_symtab_remove_descendants

2009-08-06  David Lutterkort  <lutter@redhat.com>

	Record new files under /augeas/files when they are saved
	  * src/transform.c (transform_save): add file info with add_file_info
	  * tests/test-save.c: test that file info is added for a new file
	  * tests/Makefile.am: build and run test-save
	  * .gitignore: ignore tests/test-save

	Fixes bug #78

	* src/transform.c (add_file_info): change what we store about a file
	For a file FILE, we now only record the path and the info for the lens;
	instead of

	  /augeas/files/FILE/path      = /files/FILE
	  /augeas/files/FILE/lens/info = ...
	  /augeas/files/FILE/lens/id = 0x...

	we only record

	  /augeas/files/FILE/path  = /files/FILE
	  /augeas/files/FILE/lens  = ...

	The id wasn't useful to anybody, and the lens info is useful for debugging
	at best

	* src/transform.c (add_file_info): minor cleanup
	  - Rename add_load_info to add_file_info
	  - Eliminate filename argument, since it's redundant

	defnode: when creating new node, put it in the nodeset
	When a new node is created, e.g. with 'defnode x "/foo[0 = 1]"' we used to
	assign an empty nodeset to x. Now x will hold a reference to the newly
	created node, even though the initial path expression would never match any
	nodes.

	  * src/augeas.c (aug_defnode): call pathx_symtab_assign_tree after
	    creating a node
	  * src/pathx.c (pathx_symtab_assign_tree): new function to assign a single
	    tree node to a variable
	  * src/internal.h: declare pathx_symtab_assign_tree
	  * tests/test-xpath.c (test_defnode_nonexistent): test new behavior

2009-08-05  David Lutterkort  <lutter@redhat.com>

	* src/lexer.l: allow DOS line endings
	Accept \r\n as a line ending in addition to \n

	Fixes RH Bugzilla 514712

2009-08-04  Matthew Booth  <mbooth@redhat.com>

	Require quotes around strings in xorg.conf
	man xorg.conf appears to support this:
	           String      a string enclosed in double quote marks (")

	This change means that explicitly parsed values will remove quotes in the
	get directory and insert them in the put direction.

	Currently, only the following entries are explicitly parsed:
	* Option
	* Screen
	* InputDevice
	* Driver
	* SubSection
	* Identifier
	* VideoRam
	* DefaultDepth
	* Device
	* All entries in the Display Subsection

	The lens will also accept any other entry name not in this list. However,
	as it does not know what types to expect, it stores a bare string. This
	will include quote marks.

	Add more specific entry handlers to xorg.conf
	Additionally handle:
	* Driver
	* Identifier
	* VideoRam
	* DefaultDepth

	This covers all entries in the default configuration.

	The advantage of having a specific handler is that it knows more about what
	values are valid. For example, with this patch Driver will not accept an
	unquoted value, which would cause the X server not to start.

	Parse more directives in xorg.conf
	The default xorg.conf generated by pyxf86config on Red Hat/Fedora systems
	is not parsed by the current xorg.conf. Specifically it does not
	understand:

	* Screen, in ServerLayout
	* InputDevice, in ServerLayout
	* SubSection "Display" ..., in Screen

	This patch adds support for those values, so that the default xorg.conf on
	Red Hat/Fedora systems now parses.

	It should also add support for all directives in the Display subsection,
	however they are not covered by the test.

2009-07-31  Marc Fournier  <marc.fournier@camptocamp.com>

	vim: extra carriage return caused a parse error

2009-07-23  Jim Meyering  <meyering@redhat.com>

	tests: extract SELinux context more portably
	* test-preserve.sh: Use stat --format=%C $hosts ... rather than
	ls -lZ $hosts | cut -d ' ' -f 5.  The latter fails with some
	combinations of ls and SELinux.

2009-07-16  David Lutterkort  <lutter@redhat.com>

	* src/Makefile.am: link libfa with gnulib, needed on AIX

2009-07-14  Bruno Cornec  <Bruno.Cornec@hp.com>

	* doc/augeas.vim: vi syntax highlighting for .aug files

2009-07-13  David Lutterkort  <lutter@redhat.com>

	Version 0.5.2

2009-07-09  David Lutterkort  <lutter@redhat.com>

	tree handling: propagate dirty flag into root
	We had an off-by-one error in tree_mark_dirty that lead to the root of the
	tree not being marked as dirty. As a consequence, performing a tree_clean
	on such a tree would not mark the tree as clean; that caused an aug_load
	directly followed by aug_save to write to disk, even though the tree was
	unchanged.

	  * src/augeas.c (tree_mark_dirty): propagate dirty flag to the root
	  * tests/test-load.c (testLoadSave): test that simple load + save
	    does not touch the filesystem

	This bug was introduced in commit 7278965b

2009-07-08  David Lutterkort  <lutter@redhat.com>

	Ntp: allow additional options for server etc.
	Allow options listed on http://doc.ntp.org/4.2.4/confopt.html

	Fixes bug #72 reported by Micah

	Shellvars: allow backticks as quote characters
	  * lenses/shellvars.aug (simple_value): allow backticks as quotes
	  * lenses/tests/test_shellvars.aug: add tests

	Fixes bug #74 reported by Micah

2009-07-08  Jim Meyering  <meyering@redhat.com>

	build: ignore generated test files
	* tests/.gitignore: Remove file.
	* .gitignore: ignore tests/lens-*.sh

2009-07-08  David Lutterkort  <lutter@redhat.com>

	Logrotate: allow filenames to be indented
	  * lenses/logrotate.aug (rule): allow indentation at start of rule
	  * lenses/tests/test_logrotate.aug: add tests

	Fixes part of bug #67 reported by Micah

	Logrotate: make owner/group in create statement optional
	  * lenses/logrotate.aug (create): make mode/owner/group optional
	  * lenses/test/test_logrotate.aug: add tests

	Fixes part of bug #67 reported by Micah

	* configure.ac: use AC_SYS_LARGEFILE
	Suggested by Jeff Johnson <n3npq@mac.com>

	* src/augeas.c (init_root): when root0 == "", use "/" as root
	When an empty string is passed as root0, make sure we do not make an
	invalid memory access when we look for the trailing slash.

	Reported and fix suggested by Jeff Johnson <n3npq@mac.com>

2009-06-27  Jim Meyering  <meyering@redhat.com>

	tests: divide test-lenses.sh into its 54 independent tests
	This permits these tests to be run in parallel.
	* tests/lens-test-1: New file.
	* tests/Makefile.am (lens_tests): Define.
	(check-lens-tests): New rule, to ensure that the above stays in
	sync with reality.
	(check): Depend on check-lens-tests.
	($(lens_tests)): New rule.  Generate these files.
	(check_SCRIPTS): Remove test-lenses.sh.  Add $(lens_tests).
	(EXTRA_DIST): Add lens-test-1.
	* tests/test-lenses.sh: Remove file.
	* tests/.gitignore: suppress lens-*.sh files

2009-06-26  Jim Meyering  <meyering@redhat.com>

	enable automake-1.11 features: colorized and parallel tests, etc.
	Also enable automake's new "silent-rules" feature.
	Use "make V=1" to see the usual, verbose-mode commands.
	* configure.ac: Require automake-1.11.
	Enable color-tests parallel-tests.  Use AM_SILENT_RULES([yes])

2009-06-26  Marc Fournier  <marc.fournier@camptocamp.com>

	Yum: also read files in /etc/yum/pluginconf.d

2009-06-16  David Lutterkort  <lutter@redhat.com>

	Inittab: clean up formatting some

2009-06-16  Matt Palmer  <matt@anchor.net.au>

	Inittab: simplified schema, map comments
	Change the structure of the inittab lens so that the 'id' field is used
	as the name of the subtree for that line in /etc/inittab.

	Map comments as '#comment' nodes

2009-06-16  David Lutterkort  <lutter@redhat.com>

	augtool: add --echo option
	  * src/augtool.c: add --echo option to print commands when reading
	                   from a file via stdin
	  * man/augtool.pod: document --echo option
	  * man/augtool.1: regenerated

2009-06-15  Jim Meyering  <meyering@redhat.com>

	build: fix "make distcheck" failure
	* src/Makefile.am (EXTRA_DIST): Add fa_sym.version.

2009-06-12  Anders F Bjorklund  <afb@users.sourceforge.net>

	* tests/augtest: convert darwin's double slashes to single slash

	* test-test-preserve.sh: work with BSD ls, as well as GNU ls
	Needed to make the test pass on OS/X

2009-06-11  David Lutterkort  <lutter@redhat.com>

	libfa: use linker script to only export public symbols
	libfa was exporting all kinds of symbols that were meant to be internal;
	now it only exports what's in fa.h

2009-06-11  Anders F Bjrklund  <afb@users.sourceforge.net>

	configure: do not use version script if the linker doesn't support it
	That is the case on OS X

	Fixes part of ticket #66

	configuration: check whether rl_completion_matches is available
	That function is missing on OS/X; we substitute it with a dummy if readline
	does not provide it.

	Fixes part of ticket #66

	* src/augtool.c: add missing include for ctype.h
	Part of fix for ticket #66

2009-06-09  David Lutterkort  <lutter@redhat.com>

	Version 0.5.1

	* tests/test-put-symlink.sh: fix broken test
	- use lenses in ../lenses
	- fix typo: HOSTS_AUGSAVE, not HOSTS_AGSAVE

	* bootstrap: use getline module from gnulib

	* src/augtool.c: initialize 'line' to NULL

2009-06-05  David Lutterkort  <lutter@redhat.com>

	Logrotate (hooks): simplify to speed up typechecker

	Logrotate: make newline at end of script optional

	* src/put.c (put_store): escape regexp before printing

	* src/pathx.c: coerce the operands of 'and'/'or' to boolean
	Fixes bug #44

	* src/lexer.l: allow empty regexps
	Fixes bug #34

	Dnsmasq: process files in /etc/dnsmasq.d/*
	Fixes bug #65 reported by abnormaliti

2009-06-01  David Lutterkort  <lutter@redhat.com>

	* src/augtool.c: allow comments starting with '#'

2009-05-29  David Lutterkort  <lutter@redhat.com>

	Whitespace cleanup (no functional change)
	Remove trailing whitespace

	Ntp: support more commands
	* process 'broadcastdelay'
	* process enable/disable flags
	* process leapfile

	Minor amount of code cleanup

	Fixes bug #62, reported by Frank Sweetser

	Fix grammar docs (production for PrimaryExpr was wrong)

	* tests/root/etc/: add group and passwd files

2009-05-28  Matt Palmer  <matt@anchor.net.au>

	Interfaces: various bug fixes
	* disallow end-of-line comments
	* support generic allow-* stanzas

	Interfaces: accept options containing '_'
	Bug reported by Jonas Eriksson

2009-05-28  David Lutterkort  <lutter@redhat.com>

	* tests/grub-rm-entry.rb: 'savedefault' indented by '\t', not ''

2009-05-14  David Lutterkort  <lutter@redhat.com>

	Modprobe: handle comments at the end of a line

2009-04-13  David Lutterkort  <lutter@redhat.com>

	Grub: allow optional argument for savedefault command

	Grub: parse arguments to chainloader command

	Grub: parse arguments for terminal command

	Grub: parse individual arguments for serial command

	Grub: parse kernel and module arguments

	Grub: simplify comment_re to speed up typecheck

2009-04-13  Raphael Pinson  <raphink@gmail.com>

	Cron: add a "time" node

2009-04-13  David Lutterkort  <lutter@redhat.com>

	* src/augeas.h: improve some comments

2009-04-09  David Lutterkort  <lutter@redhat.com>

	* src/augparse.c: add --notypecheck option

2009-04-08  Raphael Pinson  <raphink@gmail.com>

	Pbuilder: lens and tests for Debian's personal builder

	Shellvars: map comments with Util.comment and Util.empty

	Shellvars: parse 'export' and 'unset' commands

2009-04-08  David Lutterkort  <lutter@redhat.com>

	Add Cron to the dosumentation menu

2009-04-08  Raphael Pinson  <raphink@gmail.com>

	Cron: new lens and test
	Parses /etc/crontab and /etc/cron.d

	Sudoers: allow backslashes inside sto_to_com and sto_to_com_user
	This patch fixes ticket #60 which reports the possible usage of
	backslashes in sudoers aliases (for use with e.g. Windows resources).

	Backslashes are now allowed only in the middle of sto_to_com and
	sto_to_com_cmnd.

	Additionally, add a line with backslashes in test_sudoers to prevent
	regressions.

	Xinetd: map comments using Util.comment

	Squid: allow indentation of entries

2009-04-07  Raphael Pinson  <raphink@gmail.com>

	Logrotate: allow = as a separator for value_to_eol
	Fix ticket #61 by allowing "=" as a valid separator in value_to_eol.
	"word" may not contain "=" anymore in this case.  Note that this is not
	documented in "man logrotate" but is shipped by default in CentOS (cf
	ticket #61).

2009-04-07  David Lutterkort  <lutter@redhat.com>

	Ntp: fixes to make the default Fedora config work
	Now enough of ntp.conf is understood so that the config from Fedora 10 with
	all directives uncommented can be processed.

2009-04-07  Raphael Pinson  <raphink@gmail.com>

	Ntp: add fudge directive
	Fixes ticket #59

2009-04-07  David Lutterkort  <lutter@redhat.com>

	* src/transform.c (transform_save): append newline to old text
	If we appended a newline to initially load the file, we also need to do
	that when we parse the file again during save.

	Bug reported by Michael Conigliaro <mike@conigliaro.org>

2009-04-03  David Lutterkort  <lutter@redhat.com>

	* src/augtool.c: new option --noautoload

	* src/augeas.h: expose flag to suppress module autoload
	With AUG_NO_MODL_AUTOLOAD, modules are only loaded when they are needed.

	* src/transform.c (filter_generate): avoid segfault if we never call glob

	Php: some more tests, sample php.ini in test root

	Rx: remove \b and \d escapes

2009-04-03  Raphael Pinson  <raphink@gmail.com>

	Modify some existing lenses to use new utility modules
	Changes Aliases, Exports, Fstab, Group, and Monit

	Also exposes comments in /etc/aliases as #comment nodes

	New utility modules Build, Rx, and Sep

2009-04-03  Marc Fournier  <marc.fournier@camptocamp.com>

	Php: added default path on redhat

2009-04-02  Raphael Pinson  <raphink@gmail.com>

	Use readline only when stdin is a tty, use getline otherwise

2009-04-01  Marc Fournier  <marc.fournier@camptocamp.com>

	Vsftpd: several fixes
	* map comments as #comment
	* handle empty lines
	* find vsftpd.conf on Fedora/RHEL

2009-03-27  David Lutterkort  <lutter@redhat.com>

	Iptables: fix ticket #51
	 * allow more characters in chain names
	 * allow comments mixed in with chains and rules

	* augeas.spec.in: fadot is not installed yet

	Version 0.5.0

	Fix build problems uncovered by distcheck

	* src/get.c (get_quant_star): do not leak registers

	Some more test files

	Fix uninitialized variables found by optimizer

	* src/hash.c (hash_free_nodes): simplify and accelerate
	Reduces time to typecheck grub.aug from 9.8s to 8.5s on my machine.

	* src/hash.c: mark some asserts as expensive

	* tests/root/etc/krb5.conf: simple example file

	Krb5: lens and tests for /etc/krb5.conf

2009-03-25  Raphael Pinson  <raphink@gmail.com>

	Grub: add support for Debian's update-grub (ticket #50)
	Bug reported by Micah Anderson

2009-03-25  David Lutterkort  <lutter@redhat.com>

	* src/fa.c (fa_ambig_example): use heuristic for fast checking
	This avoids a lot of intersections in the Augeas typechecker, and speeds
	typechecking up by between 5% and 20%, depending on the lens.

	Thanks to Nate Foster for the inspiration of this

	Sudoers: produce at most one negate node
	Even if there are multiple '!' signs, only produce one negate node.

2009-03-25  Raphael Pinson  <raphink@gmail.com>

	Sudoers: fix ticket #48
	* make a difference between boolean and non boolean values for integers and
	  strings
	* allow multiple negate flags (odd/even numbers change the behaviour)
	* add optional double quotes to integer and string field

	Bug reported by Frank Sweetser

2009-03-25  David Lutterkort  <lutter@redhat.com>

	* src/augtool.c: make second argument for 'set' optional
	This makes it possible to set a tree node's value to the empty string
	with
	  set /foo ""
	and
	  set /foo

2009-03-24  David Lutterkort  <lutter@redhat.com>

	* src/augeas.c (aug_init): make it easier to override distributed lenses
	Make the default load path

	   $(datadir)/augeas/lenses:$(datadir)/augeas/lenses/dist

	and instal the lenses we distribute into the dist/ subdir. That makes it
	easy for other packages to override lenses we ship: when they are installed
	into $(datadir)/augeas/lenses, they are automatically preferred over the
	ones we ship.

	New API call aug_defnode and augtool command defnode
	It's common that we want to define a variable to reference /foo/bar, and
	create that node if it does not exist yet. aug_defnode bundles that
	together into one convenient call.

	* src/pathx.c (eval_filter): correctly hande realloc of value_pool

	* src/pathx.c (expand_tree): ensure we start with a nonempty lp_trace

	* src/augtool.c: new 'defvar' command

	Add variables for path expressions
	The new API call aug_defvar allows defining variables that can later be
	used in path expressions.

2009-03-23  David Lutterkort  <lutter@redhat.com>

	Add FilterExpr to path expression grammar
	This allows using constructs like $foo/some/path and $foo[2]

	* src/augeas.c (parse_user_pathx): new parameter need_nodeset

	* src/pathx.c (pathx_parse): new parameter need_nodeset

	* src/pathx.c (ns_filter): new function

	* src/pathx.c: rename E_LOCPATH to E_FILTER

	* src/pathx.c (clone_value): new function

2009-03-21  David Lutterkort  <lutter@redhat.com>

	* src/pathx.c (release_value): factor logic into separate function

	* src/pathx.c: remove assumption that toplevel expression is a locpath
	We can't assume that anymore when we have variables. That requires some
	headache for pathx_expand_tree, since that needs a full trace of evaluating
	a locpath against the tree.

	* src/pathx.c (pathx_eval): factor eval into a function

	* examples/fadot: remove, checked in by mistake

2009-03-20  David Lutterkort  <lutter@redhat.com>

	* .gitignore: ignore examples/fadot

	* src/get.c: rename 'Short iteration' to a more helpful message

	* src/transform.c (store_error): report which lens failed

	* src/transform.c (store_error): ignore errors from err_set

	* src/transform.c (store_error): calculate line number/ofs for error

	* src/transform.c (err_set): new function

2009-03-20  Francis Giraldeau  <francis.giraldeau@revolutionlinux.com>

	* examples/fadot.c: tool to generate dot graphs of FA's
	The fadot tool produces dot graphs of finite automata, and allows certain
	operations on FA's from the command line, like intersection and complement
	of FA's.

2009-03-20  David Lutterkort  <lutter@redhat.com>

	* src/pathx.c: call make_value before pop_value
	Since make_value might realloc, pointers retrieved with pop_value may
	become invalid across make_value calls.

2009-03-19  David Lutterkort  <lutter@redhat.com>

	* src/augeas.c: remove some internal uses of pathx_parse

	* src/augeas.c: create various /augeas nodes when they go missing

	* src/put.c (create_concat): fix goofy error message

	Update and refresh man pages

	* src/augtool.c: add --noload option

	Validate trees representing a transform before using them

	* tests/test-load.c: new test for aug_load

	* src/augeas.h (aug_init): make loading the tree optional
	The new flag AUG_NO_LOAD can be used to keep aug_init from loading any
	files. This gives the user a chance to modify /augeas/load and then call
	aug_load.

	* src/augtool.c: new 'load' command

	* src/augeas.h (aug_load): new public function

	* src/transform.h: use tree encoded transforms

	* src/lens.c (lens_release): allow NULL lens to be passed in

	* src/syntax.h (lens_lookup): new function

	* src/augeas.c: report transforms under /augeas/load

	Rename AUG_NO_DEFAULT_LOAD to AUG_NO_MODL_AUTOLOAD

	Limits (filter): no need to exclude anything

2009-03-19  Raphael Pinson  <raphink@gmail.com>

	Limits: map domain into the value of domain node (schema change)
	Mapping the domain as the label of a node leads to difficulties since '*'
	is a valid domain name.

	Problem reported by Mark Drayton (ticket #47)

2009-03-19  David Lutterkort  <lutter@redhat.com>

	Lokkit: new lens and test

2009-03-17  David Lutterkort  <lutter@redhat.com>

	Iptables: new lens and test
	A fairly basic parse of the iptables config file. It should accept any
	legal iptables config file; what makes it basic is that it doesn't break
	some of the values down as fine-grained as I would like to have them

2009-03-14  David Lutterkort  <lutter@redhat.com>

	* configure.ac: bump major version of libfa

	* src/fa.h (fa_as_regexp): cleaner prototype

	* src/fa.h (fa_ambig_example): cleaner prototype

	* src/fa.h (fa_example): cleaner prototype

	* src/fa.h (fa_compile): pass in size of regexp

2009-03-13  David Lutterkort  <lutter@redhat.com>

	* src/fa.h: use 'struct fa *' instead of fa_t

	* src/augeas.c: fix handling of dirty flag
	Under some circumstances, we did not properly propagate the dirty flag up
	the tree, leading to files that were not saved even though they should have
	been.

	This also removes two full sweeps over the tree for dirty handling, and now
	only touches nodes that are/need to be marked dirty.

	* Makefile.maint: different setup at home

	* src/transform.c (transform_save): properly sync data to disk
	Make sure the data we write into the .augnew file hits the disk before
	renaming to the proper name

2009-03-12  David Lutterkort  <lutter@redhat.com>

	Modprobe: lens and tests for modprobe.conf

	* src/fa.c (re_cset_as_string): turn '[^\n]' into '.'

	Place Sudoers and Util under LGPLv2+
	Raphael Pinson agreed to changing the license for these to LGPLv2+ like the
	rest of Augeas.

2009-03-09  David Lutterkort  <lutter@redhat.com>

	Version 0.4.2

	Logrotate: process 'minsize 1M' rule
	logrotate allows unit suffixes 'k', 'M' and 'G' for 'size' and 'minsize'

	Squid: add squid.conf from Fedora 11 rawhide

	* src/builtin.c: new builtins Sys.getenv and Sys.read_file

	* src/syntax.h (dup_string): duplicate a string

	* src/internal.h (xstrerror): new function

2009-03-09  Francois Deppierraz  <francois.deppierraz@camptocamp.com>

	Test the Debian Lenny sample squid.conf

	Add a bunch of keywords available on squid-2.7-STABLE6 or squid-3.HEAD-20090308.
	The keywords list was generated by the following command:

	fgrep TAG squid-2.7.STABLE6/src/squid.conf.default  | awk '{ print "                | \""$3"\"" }' | sort > /tmp/squid2.7

	fgrep TAG squid-3.HEAD-20090308/src/squid.conf.documented | awk '{ print "                | \""$3"\"" }' | sort > /tmp/squid3-HEAD

	cat /tmp/squid2.7 /tmp/squid3-HEAD | sort | uniq

2009-03-09  David Lutterkort  <lutter@redhat.com>

	* tests/xpath.tests: Hosts lens puts comments into #comment nodes

	* augeas.spec.in: BR for libselinux-devel (bug #26)
	Without the BR, the Fedora and EPEL builds are done without SELinux
	support, resulting in a binary that does not preserve SELinux contexts

2009-03-06  David Lutterkort  <lutter@redhat.com>

	Sshd: map comments as '#comment' nodes

	Change the label for comment nodes to '#comment'

	Do not delete files that had an error upon parsing
	When we can't read a file, we create an entry for it under /augeas, but
	there won't be anything for it under /files. That looks a lot like a file
	whose entire subtree was deleted; but since we failed reading the file, we
	should not delete it either.

	* src/augeas.c (aug_init): always create /files

	Sshd: add test showing how to add a Subsystem

2009-03-03  David Lutterkort  <lutter@redhat.com>

	* Makefile.maint: add autogen target

	* src/pathx.c (eval_rel): for numbers, '<' and '<=' were reversed

	Postfix_main: handle continuation lines

	* src/pathx.c: fix some comments

2009-03-02  David Lutterkort  <lutter@redhat.com>

	Version 0.4.1

	* configure.ac: make default warning level 'maximum'
	Using 'error' here is too unfriendly on weird platforms, since builds can
	fail, e.g. because of broken system headers. When doing actual development,
	set this to 'error'.

	* src/pathx.c: function label() returning the label of the ctx node

	* src/pathx.c: make sure ['foo' != 'foo'] is false

	* src/pathx.c: handle names with '.' properly
	Make sure that a component ina path expression like '.bar' is parsed as a
	single step (name), and not as the self axis '.' followed by some
	garbage.

	Bug reported by Jan Kupec

	* src/pathx.c: it is an error if we don't consume the whole expression

2009-02-27  David Lutterkort  <lutter@redhat.com>

	* tests/test-event-saved.sh: make sure fuiles are writable by owner

2009-02-25  David Lutterkort  <lutter@redhat.com>

	Plug a few memory leaks

	Remove files whose tree under /files was deleted
	When doing rm /files/etc/hosts, we now delete the file /etc/hosts
	on save

	Move path formatting functions around
	Move path_expand and format_path to internal.c
	Rename format_path to path_of_tree

	* src/augeas.c (tree_find): helper for getting a tree node

	* src/augeas.c: erase /augeas/events/saved only once
	tree_save is called recursively; /augeas/events/saved must be reset
	in aug_save, not tree_save

	Record saved files in transform_save, not tree_save

	* src/augeas.c (tree_unlink): remove and free a subtree

	* src/transform.h: move transform decls out of syntax.h

2009-02-24  David Lutterkort  <lutter@redhat.com>

	Util.stdexcl: exclude .augsave and .augnew files

2009-02-21  David Lutterkort  <lutter@redhat.com>

	* src/lexer.l: correct location info for strings and regexps

	* src/get.c: check for valid match before calling token()

2009-02-20  David Lutterkort  <lutter@redhat.com>

	* src/parser.y: do not allow epsilon as a tree constant
	This grammar mistake made epsilon a valid expression

2009-02-19  David Lutterkort  <lutter@redhat.com>

	* src/fa.c: cache hash values in the state
	This gives about a 15% performance improvement in typechecking
	the logrotate lens

2009-02-18  David Lutterkort  <lutter@redhat.com>

	* src/pathx.c: allow '(' Expr ')'

	* src/pathx.c: add 'and' and 'or' operators

	* src/pathx.c: add relational expressions '>', '<', '>=', '<='

	* src/pathx.c: add count() function

	* src/pathx.c (parse_name): do not allow ')' in names
	Names can not contain ')', otherwise we will run beyond the end of
	arguments in a function call like 'f(name)'

	* src/pathx.c: add position() function

	* src/pathx.c: allow '=' and '!=' of numbers

	* src/pathx.c: fix matching multiple predicates
	We used to evaluate /path[pred1][last()] wrong - last() must match the last
	node in the nodeset /path[pred1], not the last node in the nodeset /path.

	This requires that we compute nodesets explicitly.

	Logrotate: small fixes
	* recognize 'yearly' schedule
	* allow whitespaces around { and }

2009-02-17  David Lutterkort  <lutter@redhat.com>

	* src/get.c: speed up initial match
	Avoid matching the entire input string, since it can be _very_ slow.
	Since it is very common that the toplevel lens is (l)*, optimize for
	that.

	* src/get.c: reduce the number of calls to regexp_match
	Only call the regexp matcher at the very beginning of get/parse, and once
	for every match inside an iteration. Use re_registers to keep track of the
	substrings being worked on in favor of 'struct split'

	Always do REGS_REALLOCATE for regexp match registers

	* src/regexp.c: clean up syntax options

	* src/put.c: remove outdated debug msgs and comments

	* src/internal.h: Remove bogus DEBUG define

	Ntp: enhance lens
	These enhancements are needed to make the Ntp.lns process the default
	/etc/ntp.conf on Fedora

2009-02-16  David Lutterkort  <lutter@redhat.com>

	* src/syntax.c: print tests results in the same form we read them

2009-02-13  David Lutterkort  <lutter@redhat.com>

	Allow passing NULL regexps in some regexp routines

2009-02-13  Raphael Pinson  <raphink@gmail.com>

	Xorg: new lens and tests

2009-02-11  David Lutterkort  <lutter@redhat.com>

	Test that an invalid regexp makes module loading fail

	Services: various small fixes to process Fedora's /etc/services

	* tests/test-get.sh: print all error info on failure

	Better error mesages when re match fails during get/put

	* src/lens.c: throw exception on regexp syntax errors

	* src/fa.c: test for invalid ranges like [z-a]

2009-02-11  Raphael Pinson  <raphink@gmail.com>

	Lens and test for /etc/services

2009-02-11  David Lutterkort  <lutter@redhat.com>

	* src/augtool.c (cmd_match): check return from aug_match more defensively

2009-02-07  David Lutterkort  <lutter@redhat.com>

	Version 0.4.0

	Use printf instead of 'echo -e' in tests
	Printf is more portable

	Fix compilation on OpenSolaris
	* src/pathx.c (position): assert not marked as noreturn

2009-02-06  David Lutterkort  <lutter@redhat.com>

	* tests/test-xpath.c (run_one_test): allow results in   arbitrary order. Files on Fedora and Debian are enumerated   in different order, leading to spurious test failures

	* src/pathx.c: remove the value() function, it's redundant with '.'

	* pathx.c: when comparing strings consider NULL == ""

	Change how names are parsed in path expressions
	Names can not contain any of the characters [][=/ \t\n] - to include
	them in a name, they need to be escaped with a '\', so that 'foo\=bar'
	matches a node with literal label 'foo=bar'.

	* tests/grub-rm-entry.rb: fix test failure

	* tests/augtest: do not typecheck everything
	The typecheck is redundant (we already do that when running lens tests) and
	really slow

	Grub: process 'savedefault' in boot stanza
	Also, allow keywords to be preceded by whitespace

	Fixes ticket #36

	Minor whitespace cleanup

2009-02-02  Free Ekanayaka  <free@64studio.com>

	Lens and tests for DarkIce
	See http://darkice.tyrell.hu/

2009-02-02  David Lutterkort  <lutter@redhat.com>

	* src/augeas.c: use ALLOC instead of CALLOC

	* augeas.c (aug_init): check an allocation failure

	* src/internal.c (escape, unescape): check allocation failures

	* src/pathx.c (free_state): allow NULL state

	* src/augeas.c (init_root): check for failure of strdup

2009-01-31  David Lutterkort  <lutter@redhat.com>

	* src/pathx.c: factor test if a step matches into step_matches
	This also fixes a problem matching, test also included

	* src/pathx.c: use bool for boolean values

2009-01-30  David Lutterkort  <lutter@redhat.com>

	Build changes so that 'make' on Opensolaris 5.11 works
	The tests ('make check') still fail, because of trouble with
	some of the shell scripts

	* src/transform.c: use POSIX conform FNM_PATHNAME, nut GNU alias

	* src/get.c: remove braindead use of alloca

	* tests/test-get.sh: use new descendant syntax to find errors

	Remove unneeded call to pathx_parse in aug_match

	Introduce parse_user_pathx to report errors
	If user-supplied path expressions have errors, report them in
	/augeas/pathx/error

	Move parsing of path expressions into public API methods
	For path expressions that are passed through the API, we need to report
	errors. This change lays the groundwork, so that we can distinguish between
	parsing user-supplied path expressions and internally generated path
	expressions.

	Rename aug_tree_replace to tree_replace
	We reserve the aug_ prefix for public functions. There is also no need to
	pass struct augeas here, a tree root is enough.

	More xpath tests; allow ... in tests

	Simplify internal API's
	* pass origin, not root to pathx_parse
	* pathx_next does not need an explicit argument for the current
	  tree node any more

	Expand the grammar for path expressions
	* add predicates based on labels and values
	* allow path expressions in predicates, e.g. '/foo/bar[../baz = "7"]'
	* add explicit axes and some abbreviations thereof

	This requires a rewrite of the interpreter of path expressions; the
	interpreter is now based on a more explicit representation of the abstract
	syntax of the path expression and is statically type checked.

	Also add tests to check path expression evaluation

	Use absolute paths in lens tests when manipulating the tree
	Paths that start with a number (like '1/ipaddr') are ambiguous in the new
	path expression grammar and will confuse the parser; to make it clear that
	they are paths, and not just a number, use absolute paths.

	Notes on new XPath grammar

	Rename struct path to struct pathx
	Also rename path_* functions to pathx_*; rename make_pathx to pathx_parse
	and change its signature to allow cleaner error reporting

2009-01-29  David Lutterkort  <lutter@redhat.com>

	Grub: support color directive

2009-01-26  David Lutterkort  <lutter@redhat.com>

	Version 0.3.6

2009-01-26  Dominique Dumont  <dominique.dumont@hp.com>

	Sshd: add documentation on usage

2009-01-25  David Lutterkort  <lutter@redhat.com>

	Add indented puppet.conf to test root

2009-01-22  David Lutterkort  <lutter@redhat.com>

	Fix bug #25 - allow indented entries in puppet.conf
	* lenses/inifile.aug: add new indented_entry and indented_title
	  lenses
	* lenses/puppet.aug: use the indented_* lenses
	* lenses/tests/test_puppet.aug: test with indented entries

2009-01-19  David Lutterkort  <lutter@redhat.com>

	Report version and legal save modes in /augeas/version

2009-01-17  David Lutterkort  <lutter@redhat.com>

	* ref.h: include limits.h, since we use UINT_MAX

2009-01-16  David Lutterkort  <lutter@redhat.com>

	Mark up code in documentation comments for Dpkg and Exports

2009-01-16  Robin Lee Powell  <rlpowell@digitalkingdom.org>

	Documentation for Exports and Dpkg

2009-01-13  David Lutterkort  <lutter@redhat.com>

	Minor changes to handling of save flag
	* complain if /augeas/save is missing or has an invalid value
	* do not clobber non-save flags when updating from /augeas/save
	* add a test

2009-01-13  Bryan Kearney  <bkearney@redhat.com>

	Dynamically change behavior of aug_save; add noop save mode
	* control behavior of aug_save through changing /augeas/save
	* noop mode allows checking if changes will be written, without
	  changing file system

2009-01-08  Jim Meyering  <meyering@redhat.com>

	comment typos

	plug a leak
	24 bytes in 1 blocks are definitely lost in loss record 1 of 1
	   at 0x4021BDE: calloc (vg_replace_malloc.c:397)
	   by 0x4029379: make_tree (augeas.c:316)
	   by 0x403AC70: get_lens (get.c:592)
	   by 0x403ACB6: get_lens (get.c:523)
	   by 0x403AB4F: get_lens (get.c:474)
	   by 0x403ACDE: get_lens (get.c:523)
	   by 0x403AB4F: get_lens (get.c:474)
	   by 0x403AF20: lns_get (get.c:684)
	   by 0x4034E81: lens_get (builtin.c:124)
	   by 0x402CDC7: native_call (syntax.c:967)
	   by 0x402F4C9: compile_exp (syntax.c:1574)
	   by 0x402EF17: compile_exp (syntax.c:1487)
	   by 0x402FEEC: __aug_load_module_file (syntax.c:1600)
	   by 0x80489AE: main (augparse.c:86)

	test ls output more portably in face of SELinux differences
	* test-preserve.sh: Use cut -b1-10 to get mode from ls -l output.
	Use ls -lZ (not ls -Z, which is not portable) to get SELinux context.

2009-01-04  Arnaud Gomes-do-Vale  <arnaud.gomes@ircam.fr>

	* src/Makefile.am: fix bz #478619 - do not use abspath

2009-01-04  Robin Lee Powell  <rlpowell@digitalkingdom.org>

	Dpkg: new lens and test

2009-01-04  David Lutterkort  <lutter@redhat.com>

	Php: expand filter slightly
	Suggested by Robin Lee Powell <rlpowell@digitalkingdom.org>

2008-12-30  David Lutterkort  <lutter@redhat.com>

	Fix segfault when branch in a union does not have a ktype
	* src/lens.c (lns_key_regexp): check for NULL ktype of branch
	* tests/modules/pass_union_nokey.aug: test the fix

	Bug reported by Robin Lee Powell <rlpowell@digitalkingdom.org>

2008-12-28  Free Ekanayaka  <free@64studio.com>

	Add soma lens and test

	Add limits lens and test

2008-12-25  David Lutterkort  <lutter@redhat.com>

	* autogen.sh: remove bogus argument to configure

2008-12-24  Marc Fournier  <marc.fournier@camptocamp.com>

	Php, Gdm: exclude literal ".anon" from title, not regexp /.anon/

2008-12-24  Free Ekanayaka  <free@64studio.com>

	Phpvars: allow whitespaces before the \n in the <?php head line

2008-12-24  David Lutterkort  <lutter@redhat.com>

	Version 0.3.5

	* transform.c (transfer_file_attrs): ignore SELinux failures if filesystem   does not support extended attributes

2008-12-23  David Lutterkort  <lutter@redhat.com>

	* transform.c (clone_file): fix #32; only copy if   /augeas/save/copy_if_rename_fails exists

	Group: split list of users, make it optional
	The list of users in a group is now split into individual 'user/'
	nodes. If a group has no members, no user/ nodes are produced.

2008-12-23  Free Ekanayaka  <free@64studio.com>

	Add lens and test for /etc/group

2008-12-23  David Lutterkort  <lutter@redhat.com>

	Simpler interface and implementation for path_find_one

	Add path_expand_tree
	Instead of calling path_find_one/tree_create

	Move implementation dealing with path expressions into separate file

	Simplify searching in the tree by using parent pointers
	Segments do not need to track the tree node where they matched anymore,
	since we can get the same information by following parent pointers.

	Make finding the parent and siblings of a node uniform
	All nodes (including the root) now have a parent node, so
	that the start of the list of siblings can be found as
	tree->parent->children for any node.

	All 'standalone' trees now have a fake root, called 'origin' whose
	children are the real root nodes. Another way to look at this is
	that the tree is now edge-labeled.

	Rename seg_siblings to tree_siblings

	Add an explicit parent pointer to the tree

2008-12-23  Free Ekanayaka  <free@64studio.com>

	Lens and test for config files using PHP-style variables
	Process /etc/squirrelmail/config.php

2008-12-23  Marc Fournier  <marc.fournier@camptocamp.com>

	New lens and tests for /etc/rsyncd.conf
	rsyncd.conf is an ini file which allows indented
	parameters (like smb.conf) as well as entries outside
	any section (like php.ini).

2008-12-23  David Lutterkort  <lutter@redhat.com>

	* fa.c: mark '.' as a special character that needs to be escaped

2008-12-22  David Lutterkort  <lutter@redhat.com>

	Notes on the expanded XPath notation

2008-12-22  Free Ekanayaka  <free@64studio.com>

	Add lens and test for /etc/passwd

	Shellvars: process two more files on Debian
	Add /etc/arno-iptables-firewall/debconf.cfg and /etc/cron-apt/config

	Add lenses and tests for postfix's main.cf and master.cf

	Squid: new lens for squid.conf

	Webmin: new lens

2008-12-16  David Lutterkort  <lutter@redhat.com>

	Shellvars: load /etc/sysconfig/sendmail

2008-12-03  David Lutterkort  <lutter@redhat.com>

	Xinetd: make sure equal sign is surrounded by spaces
	Fix ticket #30

	* lenses/xinetd.aug: make sure new equal signs have a space before
	  and after them; indent attributes with a tab by default
	* lenses/tests/test_xinetd.aug: add test

2008-11-20  David Lutterkort  <lutter@redhat.com>

	Sshd: change the structure of Condition subtrees
	The conditions for a match block are now a single subtree, instead of
	one subtree per condition.

2008-11-19  David Lutterkort  <lutter@redhat.com>

	Only try to save backup file if original exists
	* transform.c (transform_save): check that original exists before
	creating backup

	Fix saving of files where backup/new and target are on different devices
	* transform.c (clone_file): new function
	* transform.c (transform_save): if rename fails because new/backup file
	  and target file are on different devices, copy the files

2008-11-05  David Lutterkort  <lutter@redhat.com>

	* Makefile.maint: add target tag-release

	Version 0.3.4

	* test-preserve.sh: check that augtool -b produces a backup

2008-10-30  David Lutterkort  <lutter@redhat.com>

	Fix problem with transferring file attributes during save
	* src/transform.c(transform_save): transfer attributes from the original to
	  the new file as soon as the new file is created; create a .augsave file
	  as a hardlink, not by renaming
	* src/transform.c(file_replace): pull out the code to transfer attributes
	  into new function transfer_file_attrs; rename of new file to original is
	  now done in transform_save

2008-10-24  David Lutterkort  <lutter@redhat.com>

	Version 0.3.3

	* Makefile.maint: add upload target

	Modest beginnings of a maiintainer Makefile
	* Makefile.maint: new file

	Undo API breakage introduced in commit 48c285c
	* src/augeas.c (aug_save): return 0 on success, instead of the number of
	  files changed
	* src/augtool.c (cmd_save): get the number of files changed from aug_match

	build: use LIB_SELINUX as set by gnulib
	* configure.ac: do not set up LIB_SELINUX, gnulib does that

2008-10-22  Sylvain Baubeau  <bob@glumol.com>

	Grub: support "rootnoverify" and "chainloader" directives

2008-10-21  David Lutterkort  <lutter@redhat.com>

	Version 0.3.2

	test-preserve.sh: do not check SELinux context on non-SELinux systems

	test-events-saved.sh: sort the list of saved files

	aug_save: report saved files in /augeas/events/saved
	aug_save now reports which files were changed on disk underneath
	/augeas/events/saved; if multiple files are changed in one save operation,
	there will be multiple /augeas/events/saved entries in the tree. The value
	of each is the path to the file prefixed with /files.

	Generate ChangeLog from git history

	file_replace: preserve SELinux context
	Copy the SELinux context from the existing file.

	transform_save: preserve file owner/group and mode when saving
	Take the file owner/group and mode from the existing file and set it on the
	newly created file during save. When a file is created from scratch, we
	still create the file with whatever default user/group/mode the current
	user has set.

2008-10-20  David Lutterkort  <lutter@redhat.com>

	aug_save: report the number of files that were changed
	When the tree is saved, keep track of the number of files that were
	actually changed and return that number.

	transform_save: make saving idempotent
	When a file needs to be saved, its contents are first generated in a temp
	file which is then moved over the original file. Between generating the
	temp file and moving it in its final place, read its contents back in and
	compare with the contents of the original file. Only move the tempfile over
	the original if the contents do indeed differ. This avoids spurious changes
	in mtime.

	Formatting changes

2008-10-16  Jim Meyering  <jim@meyering.net>

	Include <config.h> early, so its _GNU_SOURCE definition takes effect.
	* src/lexer.l (%top{...}): Include <config.h> here, not in %{...}.
	Otherwise, the flex-emitted inclusion of <string.h> would
	precede the definition of _GNU_SOURCE, rendering it useless.
	This also avoids warnings about strndup being undeclared.
	Don't include <string.h> explicitly, since flex already does that.

2008-10-13  Joel Nimety  <jnimety@perimeterusa.com>

	Grub: add support for password directive

2008-10-06  Free Ekanayaka  <free@64studio.com>

	Samba: Change default indentation and separation
	Match indentation of the example configuration file shipped by the upstream
	authors

	Add gdm lens and associated test

2008-10-02  David Lutterkort  <lutter@redhat.com>

	Ignore files based on .hgignore

2008-10-01  David Lutterkort  <lutter@redhat.com>

	Complain when nodes in the tree can not be put
	When nodes are added to the tree that do not match the appropriate
	key/label lens, we used to silently drop them if the key/label was inside a
	repetition inside a concat.

	Now, we check when we split the tree for a concat that we have used all the
	nodes in the tree that we were supposed to, and complain otherwise.

	This also uncovered that the test rec-hosts-add.rb was broken, but still
	passed.

2008-10-01  David Lutterkort  <dlutter@redhat.com>

	Pass --nostdinc properly when running under gdb

	Logrotate: parse tabooext into list; add processing of a number of options
	Patch by Sean E. Millichamp

2008-09-22  David Lutterkort  <dlutter@redhat.com>

	Grub: add support for 'serial' and 'terminal'
	Patch by Sean E. Millichamp

	Add backlinks to main site

	Remove some italics

	Logrotate: add dateext flag
	Patch by Sean E. Millichamp

	Various changes to the NaturalDocs support
	This patch changes a few things around in the NaturalDocs support:

	- There is no explicit --with-naturaldocs option anymore; instead,
	  configure.ac looks for a program that's either called 'naturaldocs' or
	  'NaturalDocs' and enables support for doc generation depending on whether
	  that program is found or not.

	  This works in any of the following situations:
	  (1) NaturalDocs is installed from an RPM, and therefore on the default
	      PATH, with its Perl modules installed on the standard Perl library
	      path
	  (2) NaturalDocs is installed in a random directory, and both PATH and
	      PERL5LIB are set accordingly
	  (3) A wrapper script that sets the path is on PATH

	- Various fixes to make 'make distcheck' work

2008-09-12  David Lutterkort  <dlutter@redhat.com>

	Properly include test modules

2008-09-11  Raphael Pinson  <raphink@gmail.com>

	Add naturaldocs support Build pdf docs

2008-09-09  Raphael Pinson  <raphink@gmail.com>

	Adapt comments for NaturalDocs parsing

	Add comments for NaturalDocs parsing

	Add comments for NaturalDocs parsing

	Add comments for NaturalDocs parsing Reorganize a bit

	Adapt sudoers.aug for NaturalDocs parsing

	Adapt augeas.h for NaturalDocs parsing

2008-09-08  David Lutterkort  <dlutter@redhat.com>

	Sshd: better handling of match blocks
	Split match conditions into individual 'Condition' entries. Store the
	settings for a match block inside 'Settings' entries.

2008-09-08  Free Ekanayaka  <free@64studio.com>

	Add monit lens and test

2008-09-06  Free Ekanayaka  <free@64studio.com>

	Ldap: merge with Spacevars. Spacevars: process havp.config
	Adapt Test_ldap, since there is no Ldap.lns anymore

2008-09-08  David Lutterkort  <dlutter@redhat.com>

	Use --nostdinc in tests
	We never want to use installed lenses in the tests; they should only be
	read from the directories that are specified explicitly

	augtool, augparse: add --nostdinc option

	augtool, augparse: allow long options

2008-09-06  Free Ekanayaka  <free@64studio.com>

	Shellvars: merge Sysconfig, Ifcfg; support /etc/default
	Merge Sysconfig and Ifcfg into Shellvars

	Add /etc/default/* to the list of supported configuration files

2008-09-05  David Lutterkort  <dlutter@redhat.com>

	transform: append missing newlines
	If a file does not end with a newline, append one automatically. Most
	lenses require that a file ends with a newline, and files that are missing
	them are quite common.

	Shellvars: use Util.eol for eol

	test/modules: only distribute .aug files

	Shellvars: handle space at the end of a line

2008-09-04  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.3.1 for changeset 803c17b1833a

	Release 0.3.1

	Sysctl: lens for sysctl.conf
	Contributed by Sean Millichamp

2008-09-04  Free Ekanayaka  <free@64studio.com>

	Add lens and test for dnsmasq.conf

2008-09-02  Free Ekanayaka  <free@64studio.com>

	Add slapd.aug and test modules

	Spacevars: Allow passing the entry keyword as a parameter
	Modify Ldap.lns and Test_spacevars accordingly

2008-08-30  Free Ekanayaka  <free@64studio.com>

	Add samba.aug and associated test

2008-08-27  Free Ekanayaka  <free@64studio.com>

	Inifile: support empty comments
	Empty comments are lines beginning with ";" or "#" but without any more text

2008-08-29  Raphael Pinson  <raphink@gmail.com>

	Map entries outside of sections inside a ".anon" section
	Clean regexp for entry key
	Remove /.anon/ from record key regexp
	Modify test_php.aug according to new mapping policy
	entry_re is standard in php.aug

2008-09-03  David Lutterkort  <dlutter@redhat.com>

	typecheck_maybe: less convoluted check for empty match
	There's no need to construct an FA to check if a regular expression matches
	the empty string.

	Properly typecheck the '?' operator
	The '?' operator was completely missing a typecheck for the atype. The
	check must make sure that neither the ctype nor the atype match the empty
	word.

	To allow constructs like (store re)?, we allow the atype to match the empty
	word, as long as the lens inside the '?' consumes the value of the current
	node, since that also tells as whether to use the inner lens or not.

	Various existing lenses failed to typecheck after this change and have been
	adapted; this also fixes a bug in the Fstab.lns where existing whitespace
	was being replaced with a default tab. The Interfaces.lns needed a fairly
	invasive change, and as a consequence produces way more (too many?)
	anonymous tree nodes.

	Added tests to verify the typechecking of '?'

2008-09-02  David Lutterkort  <dlutter@redhat.com>

	Minor error message improvements
	- Include information about the lens that produced the error if it's
	  available
	- When a union during 'put' does not match, produce an error instead of
	  aborting

2008-08-29  David Lutterkort  <dlutter@redhat.com>

	Fix a bug with transferring skeletons
	It is possible for a skeleton to move from one subtree lens to another, if
	both use the same key; since the lenses might have different skeleton
	types, we need to detect this and discard the skeleton if its type does not
	match the lens that is used during put.

	skel_instance_of: fix bad check for regexp match
	The return value of regexp_match was interpreted incorrectly, making it
	seem that the skel_instance_of test should fail if we ever tried to match
	an empty string.

2008-08-27  David Lutterkort  <dlutter@redhat.com>

	Some files for the test root

	A test for the del typecheck

	Script to run lens tests through Valgrind
	We don't run this as part of 'make check' since it's _very_ slow.

	Dhclient: change some defaults for del
	This is really a bug in how string literals are unescaped by the lexer, but
	we can sidestep the problem here.

	The lexer bug is https://fedorahosted.org/augeas/ticket/12

2008-08-27  Free Ekanayaka  <free@64studio.com>

	Dhclient lens

2008-08-26  Raphael Pinson  <raphink@gmail.com>

	Add OpenVPN lens and associated test

2008-08-27  Free Ekanayaka  <free@64studio.com>

	Dput: add allowed_distributions entry
	See man dput.cf(5) from a recent dput version (Ubuntu/hardy or
	Debian/lenny)

2008-08-26  David Lutterkort  <dlutter@redhat.com>

	Typecheck del lens
	The builtin lens 'del RE STR' was missing a typecheck: the default string
	STR must match the regular expression RE, otherwise we might produce text
	that we cant parse back in.

	This patch fixes that, adds a test that the check is performed, and fixes
	all the places in existing lenses where a use of 'del' failed the
	typecheck.

2008-08-18  Nahum Shalman  <nshalman elys com>

	Shellvars: fix arrays so that saving works properly  * based on an IRC conversation with raphink

2008-08-25  David Lutterkort  <dlutter@redhat.com>

	Acknowledge Free Ekanayaka

2008-08-25  Free Ekanayaka  <free@64studio.com>

	Ldap lens

	Spacevars lens

2008-08-24  Free Ekanayaka  <free@64studio.com>

	Interfaces: new lens to process Debian's /etc/network/interfaces

2008-08-25  David Lutterkort  <dlutter@redhat.com>

	Util.comment: produce #comment nodes

2008-08-14  Raphael Pinson  <raphink@gmail.com>

	Inifile: complete rewrite. Also rewrite lenses using Inifile
	Adapt Php, Dput, Puppet and the corresponding tests to use the new Inifile
	module.

	Php: allow entries outside of sections
	Adapt php.aug to support entries outside of sections and still map sections
	as labels (Fix #9)

2008-08-16  David Lutterkort  <dlutter@redhat.com>

	Shellvars: one more cornercase with double quoted strings

2008-08-15  David Lutterkort  <dlutter@redhat.com>

	Shellvars: much improved handling
	- handle single and double quoted strings correctly
	- parse arrays into a subtree

	Inspired by a chat and preliminary work by nahamu

	skel_instance_of: remove pointless check
	There is no point in trying to match against skel->text for a store lens
	since that is always NULL.

	Fix syntax error in test

	augl_error: Initialize info

	aug_mv: fix bug when moving at the root level
	When moving from the root level, the source node needs to be removed from
	aug->tree, not aug->tree->children. In addition, the list_remove macro must
	be passed aug->tree and not a local variable holding that value, since we
	might have to remove the list entry that aug->tree is pointing to.

	Added test in test-mv.sh to test that moving at the root level works.

2008-08-14  David Lutterkort  <dlutter@redhat.com>

	Module names are treated case-insensitively
	Before, if you had a module 'Mod' in file 'mod.aug' and requested variable
	'MoD.var' from another module, the interpreter would throw itself into a
	loop where it kept loading 'mod.aug', but never found 'MoD.var' because the
	comparison of module names 'MoD' and 'Mod' was case sensitive.

2008-08-13  Raphael Pinson  <raphink@gmail.com>

	Add puppet.aug and associated test

	test_php.aug: make a nice test for PHP

	Php: simplified and based on Inifile
	"Slightly" simplify php.aug now that the comment issue is fixed in
	inifile.aug

	Inifile: use #comment for comment fields
	Adapt test_dput.aug and test_inifile.aug

	Inifile: no space around seps by default

	Inifile: reformat inifile.aug, ignore empty comments
	Reformat inifile.aug :
	  - improve readability
	  - limit line width to 80 chars
	  - change a few var names
	Ignore empty comments
	Adapt test_dput.aug to ignore empty comments

	Fstab: map comments and support empty lines

	Sudoers: clean up comment definition

2008-08-12  David Lutterkort  <dlutter@redhat.com>

	Hosts: handle comments at the end of a host entry
	Comments are put into the tree as part of that host node, i.e. will live as
	long as the host entry.

	Based on an initial patch by Kjetil Torgrim Homme <kjetilho@linpro.no>

2008-08-12  Raphael Pinson  <raphink@gmail.com>

	Pam: Use eol, indent, comment and empty from Util

	Util: add eol, indent, comment and empty

	Pam: allow comments at the end of lines and leading spaces

	Xinetd: better handling of whitespace
	- allow indented comments
	- allow spaces around "}" to close a service

2008-08-12  David Lutterkort  <dlutter@redhat.com>

	Exports: fix failing test
	Exports.lns uses Hosts.comment .. since that changed, we also need to
	change Exports.lns

2008-08-12  Raphael Pinson  <raphink@gmail.com>

	Hosts: put comments into tree and better whitespace handling
	- allow spaces at the end of the line
	- allow indentation at the beginning of entries
	- allow indented comments
	- show comments as fields and ignore empty lines and empty comments

	Handle indentation for Sudoers
	Allow indentation for every field
	cmnd_spec: use sto_to_com_cmnd (allows spaces)
	Add a test with new tricky commands in spec

	Various small fixes for Sudoers
	Deal with empty comments in empty.
	Add "!" as a valid parameter delimiter in Defaults.
	Make tests a bit more interesting in test_sudoers.aug.

	Sudoers: fix Runas_Spec
	sep_cont is not mandatory after runas_spec.
	Remove a space after a runas_spec in the test.

	Sudoers: various fixes for Defaults
	Do not allow "Defaults.*" as user name for spec (instead of "Defaults").
	Simplify Defaults type from (@|:|>) into [@:>].
	Make a specific regexp for Defaults value to allow spaces.
	Add a test line in test_sudoers.aug to test a more complex Defaults line.

	Add sudoers lens and associated test

2008-08-11  David Lutterkort  <dlutter@redhat.com>

	Test for continuation lines

	Posix ERE compliant escaping
	Posix extended regular expressions treat a backslash outside of a character
	class always as an escape character, with the character sequence '\\x'
	being identical to 'x', even if 'x' is a special char like '['.

	Inside character classes, the backslash does not escape anything, and is
	treated as an ordianry character.

	See regex(7) or
	http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04

2008-08-10  David Lutterkort  <dlutter@redhat.com>

	Revamp the dict data structure
	Dicts were simple linked lists of key/value pairs, and appending and
	searching on those lists caused serious slowdown when the dicts became
	large, for example when writing an /etc/hosts file with > 2000 lines.

	Dicts are now organized as arrays that are kept sorted by the key, and
	lookup is done through binary search. Though this is still quadratic in
	theory, it behaves linearly in practice even for a very large /etc/hosts
	file (~ 60k lines); when keys appear in order (e.g. when they are generated
	by a sequence) or when all entries fall under one key, adding an entry to a
	dict is O(log n).

	Don't use registers in split_iter
	The data in the registers was never used, calculating it causes some
	overhead in the matcher.

2008-08-08  David Lutterkort  <dlutter@redhat.com>

	Eliminate unneeded calls to regexp_match in split_iter

	Don't call regexp_match when we know that there is no match
	It is common in the put direction that we try and split when we're already
	inside a leaf node. In that case, we know that there is no possible split,
	and therefore can save the trouble of calling regexp_match.

	Avoid O(n^2) runtime by appending to lists in constant time
	The data structure used to keep track of successive matches of an iterated
	lens, a split list, was being appended to by traversing the list for each
	new element. Now, we remember the last element on the list and append in
	constant time.

	The same was true in a few other places: the building of a tree and of
	skeletons suffered from the same problem.

	Dicts still have that problem - they need to be changed to hash tables to
	address this issue.

	Add list_reverse and list_tail_cons
	list_reverse reverses a list in place. list_tail_cons appends to a list in
	constant time, since it is given a pointer to the tail of the list.

2008-08-07  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.3.0 for changeset 60f2a13c2528

	Release 0.3.0

	Mention the exit status

	Version libfa and libaugeas
	Use libtool's version support to properly version these two libraries. For
	libaugeas, we also bump the minor version, since we just added aug_mv to
	the interface.

	Check that 'put' fails when invalid tree entries are present
	put_quant_star and create_quant_star did not compare the part of the tree
	they should transform against the part of the tree they actually
	transformed. This lead to parts of the tree getting ignored during 'put' if
	the tree contained invalid nodes, and ultimately to files getting
	truncated.

	This is now checked and causes a 'Short iteration' error, avoiding file
	truncation. The fix also uncovered an error in the test for Aptsources.lns,
	where an invalid tree node was put into the tree, but did not lead to a
	test failure.

	Fixes bug https://fedorahosted.org/augeas/ticket/1

	Return an exit status from augtool
	augtool will return a non-zero exit status if any command issued
	failed. This is useful when piping multiple commands into augtool to check
	that they all succeeded.

2008-07-29  David Lutterkort  <dlutter@redhat.com>

	Fix failures on FreeBSD
	(1) Point augtool at the lenses in the source dir (not FreeBSD problem,
	    happens whenever Augeas is not installed yet)
	(2) Remove bashism 'echo $"..."' with 'echo -e "..."'

	Quiet the test

2008-07-29  Raphael Pinson  <raphink@gmail.com>

	Use regexp union instead of lens union in php.aug
	Using a union of regexps is much faster than a union of lenses, since the
	regular expressions that are constructed internally are much simpler.

2008-07-25  Raphael Pinson  <raphink@gmail.com>

	Fix php.aug now that inifile.aug supports spaces in values

	Add PHP module and associated (basic) test file

2008-07-29  Raphael Pinson  <raphink@gmail.com>

	Use regexp union instead of lens union in dput.aug
	Using a union of regexps is much faster than a union of lenses, since the
	regular expressions that are constructed internally are much simpler.

2008-07-25  Raphael Pinson  <raphink@gmail.com>

	Rewrite dput.aug using inifile.aug Add a few keywords from man dput.cf Fix test file after rewrite

	Allow spaces in entry values

	Allow spaces in titles

	Fix empty comments in INI file

2008-07-29  David Lutterkort  <dlutter@redhat.com>

	Include canonicalize.h
	On non-glibc systems, we need to make sure canonicalize_file_name is
	declared from gnulib.

	Fail the whole test if one of the lens tests fails

2008-07-28  David Lutterkort  <dlutter@redhat.com>

	Add a call to move a subtree to the public API

2008-07-26  David Lutterkort  <dlutter@redhat.com>

	Refactor tree_create

	Don't run the typechecker by default from try

2008-07-24  David Lutterkort  <dlutter@redhat.com>

	Flatten the tree of lenses
	For union and concat, we used to store multiple unions/concats in a binary
	tree. Now, the tree is flattened and a string of concats is stored as one
	lens.

	Allow a key and store in each branch of a union

	lns_key_regexp: store does not do anything about the key
	We used to generate tree nodes with a NULL label for a STORE, but that is
	no longer the case, and therefore the STORE lens should not produce any key
	regexp.

	Correctly handle saving to nonexistant files

	Store system errors
	When encountering system errors while reading or writing a file, extract
	the full error message corresponding to errno and store it in error/message

2008-07-23  Raphael Pinson  <raphink@gmail.com>

	Add AptPreferences module and associated test

	Add bbhosts module and associated test

	Add ntp module and associated test

	Add logrotate and associated test

	Add support for end of line comments in entry* Add new entry* lenses for comments_nosharp Make more generic entry and comment lenses Update test_inifile.aug to test end of line comments

	Add inifile generic module and associated test module

2008-07-22  David Lutterkort  <dlutter@redhat.com>

	Fix segfault when running 'augtool print'

2008-07-21  David Lutterkort  <dlutter@redhat.com>

	Canonicalize file names before writing
	We used to clobber symlinks because writing a file consists of writing to
	an intermediate .augnew file, and then moving that over the target file. To
	keep target files that are symlinks intact, we now canonicalize the target
	filename and then move the intermediate file to the canonicalized target
	file.

	Avoid picking '\0' in examples.
	Now, we only pick '\0' as the example character for a transition if it is
	the only char for that transition.

2008-07-18  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.2.2 for changeset e7f6d16e75df

	Release 0.2.2

	Rename rule because FreeBSD's make chokes on it
	Rename the rule .FORCE-datadir.h to FORCE-datadir.h

	Sample dput.cf for dput lens

	Lens for Debian's dput files
	Contributed by Raphael Pinson

	augtool: Print '(none)' when getting a path with no value
	The output used to be mangled. Now it is 'path = value' if hte path has a
	non-NULL value, 'path (none)' if the path exists but has a NULL value, and
	'path (o)' if an error occurred.

2008-07-17  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.2.1 for changeset 13fdcd9bb18a

	aliases.aug: Do not require whitespace after commas
	It's perfectly fine to have an alias like 'alias: target1,target2'

	Bug reported by Greg Swift

2008-07-16  David Lutterkort  <dlutter@redhat.com>

	Fix insertion before the first child
	Inserting a node as the new first child was completely broken.

	Bug reported by Raphael Pinson.

	Add support for 'insert' in unit tests
	Two new primitives 'insa' (insert after) and 'insb' (insert before) are
	added so that unit tests can modify the tree through insert, as in

	  test lns put str after
	    insa label path = str2

	It would be nice to kill insert with one primitive, but that would have
	either required special syntax (like 'ins STR before/after STR') or some
	addition to the type system to make it syntactically reasonable.

2008-07-09  David Lutterkort  <dlutter@redhat.com>

	Test that putting into an empty string works

	Initialize state->pos in lns_parse and lns_get
	Otherwise, get and parse on an empty string will produce a 'short
	iteration' error, even if the empty string is acceptable for that lens.

2008-07-07  David Lutterkort  <dlutter@redhat.com>

	Put the default dir for lenses into DATADIR (the real fix)
	Reworks 527:14602e2757dd in a way that actually works and conforms to the
	GNU coding standards.

	Most of this fix suggested by Jim Meyering, I only touched it up a little
	(and no doubt introduced all the bugs).

	Check for NULL values in the put direction of store
	This is now flagged as an error instead of causing a segfault.

2008-07-04  David Lutterkort  <dlutter@redhat.com>

	Lens for /etc/exports

2008-07-01  David Lutterkort  <dlutter@redhat.com>

	Release 0.2.1

	distclean-local: Do not clobber build/aux

	Suppress generated manpages

2008-06-30  David Lutterkort  <dlutter@redhat.com>

	Put the default dir for lenses into DATADIR
	Instead of hardcoding the default dir for lenses to somewhere in '/usr',
	look in DATADIR - that's after all where the default lenses are installed
	if DATADIR (or PREFIX) is changed.

	Man page for augparse

	Put Augeas version into footer

2008-06-23  David Lutterkort  <dlutter@redhat.com>

	Auto-generate the ChangeLog file from mercurial logs
	Reviewed-by: David Lutterkort <dlutter@redhat.com>

2008-06-13  David Lutterkort  <dlutter@redhat.com>

	Fix two problems in the grub lens
	(1) The grub lens did not handle blank lines
	(2) Ubuntu uses 'quiet' in its boot stanzas, which we didn't know about

	Reported by Jason Dobies

	Produce more helpful errors
	The previous check whether we could proces the entire input was too crude
	and produced the unhelpful error message "Get could not process entire
	input", pointing to the start of the string, even if the problem was much
	farther down the line.

	With this change, error messages contain an indication to where the error
	happened that is a little closer to the actual trouble spot.

2008-06-12  David Lutterkort  <dlutter@redhat.com>

	Check that we take the right branch in a union

	Process /etc/sysconfig/selinux
	Patch by Alan Pevec

	Fix segfault when aug_init/close are called multiple times
	The way we cached the regexp '[0-9]+/' was totally botched. We now allocate
	the pattern statically in memory and pin it to protect it from being freed,
	ever.

	Reported by Harald Hoyer

2008-06-06  David Lutterkort  <dlutter@redhat.com>

	Initialize out parameters

	Change struct fields of type (const char *) to (char *)
	There were many places where struct fields were declared (const char *) but
	then used as (char *) - mostly to free them. Remove the 'const' from those
	fields.

	I would really appreciate if somebody could look over these and make sure I
	don't throw away constness in too many places. It seems strange to declare a
	field as non-const, even if the string referenced by it is never modified,
	and only ever free'd when the enclosing struct is free'd.

2008-06-05  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.2.0 for changeset d23f95cd13f3

	Release 0.2.0

2008-06-03  David Lutterkort  <dlutter@redhat.com>

	Remove bashisms from test scripts
	Make tests scripts work with plain old sh; also, don't hardcode location of
	Ruby interpreter to /usr/bin/ruby.

	Work around a problem with Bison on FreeBSD
	Bison looks for _STDLIB_H to see if stdlib.h has been included, but the
	system includes use _STDLIB_H_; that makes Bison think malloc/free have not
	been declared yet and it goes and does that. gcc then complains about the
	duplicate declaration.

	Infrastructure and import of gnulib modules
	We do not keep the gnulib sources in our own repo. Instead, autogen.sh now
	calls out to bootstrap to pull in needed files from gnulib.

	The bootstrap script was copied from libvirt.

2008-06-02  David Lutterkort  <dlutter@redhat.com>

	Use a build aux dir (in build/aux)

	Use autoheader and generate config.h

	Work around lack of open_memstream on non-GNU systems
	Since open_memstream is only available with glibc, wrap its use and fall
	back to writing to a tempfile on other platforms.

	Remove src/config.h
	It was a bad idea to begin with; fold the contents into internal.h and make
	room for a generated config.h

	Support the @include syntax
	Debian uses lines of the form '@include module' to reference other pam
	configs. The official PAM docs don't mention it, but obviously it works.

	Handle trailing whitespace in pam.d; split module-arguments

	Allow multiple comma-separated fs types in fstab
	On Debian Etch, the CDROM has fs type 'udf,iso9660'

	Handle blank lines in /etc/hosts

	Fix missing ref on an info struct in syntax.c(compile_minus)

2008-05-30  Jim Meyering  <meyering@redhat.com>

	* tests/test-lenses.sh: more quotes, protect against space in abs_srcdir

	don't conflate top_srcdir and abs_top_srcdir
	* tests/Makefile.am: Use $(var), rather than obsolete @var@ notation.
	(TESTS_ENVIRONMENT): Rename LHS to match RHS to help avoid (my) confusion:
	s/top_builddir/abs_top_builddir/ and s/top_srcdir/abs_top_srcdir/.
	* tests/augtest: Reflect renamings.
	* tests/test-interpreter.sh: Likewise.
	* tests/test-get.sh: Likewise, and remove unused top_builddir= assignment.
	* tests/test-lenses.sh: Likewise; remove unnecessary braces, add quotes
	to protect against pathological $TMPDIR.

2008-05-29  David Lutterkort  <dlutter@redhat.com>

	Make distcheck work again
	Restore top_builddir and top_srcdir so that augtest passes during make
	distcheck.

	Fix memory leak in make_exn_lns_error

2008-05-29  Jim Meyering  <meyering@redhat.com>

	Remove some absolute paths for binaries.
	* tests/Makefile.am [TESTS_ENVIRONMENT]: Add a PATH definition that
	lets tests invoke "augtool" and "augparse" without any absolute prefix.
	Remove top_builddir and top_srcdir definitions; no longer needed.
	* tests/augtest: Remove definition of AUGTOOL.  Update use.
	* tests/test-lenses.sh: Likewise for AUGPARSE.
	* tests/test-interpreter.sh: Likewise.
	* tests/rec-initdefault.rb: Use 'augtool -n' in place of #{AUGTOOL}.

2008-05-23  David Lutterkort  <dlutter@redhat.com>

	Fix use of possibly uninitialized variable
	* get.c(lns_parse): initialize skel; gcc complains about possible
	  uninitialized use

2008-05-28  David Lutterkort  <dlutter@redhat.com>

	Check that augtool reads all of tests/root/ without error

2008-05-23  David Lutterkort  <dlutter@redhat.com>

	Add a test to check we take the right branch
	This does essentially the same as the test Pass_prefix_union introduced
	with cset 489:3f4414038a30, but in a real world lens.

	Escape | when turning a string into a regexp

	Add source statements in shell scripts as '.source' nodes

	Escape label strings when creating the key regexp for them

	Allow lower case characters in shell vars

2008-05-23  Jim Meyering  <meyering@redhat.com>

	"echo get /|augtool -n" would read one past end of malloc'd buffer * src/augeas.c (make_path): Avoid buffer overrun.

2008-05-23  David Lutterkort  <dlutter@redhat.com>

	Fix a major bug in the get implementation of lenses
	We used to process the input from left to right, matching the regular
	expressions of lenses with the input successively. That is very wrong, in
	particular, it leads to lens union choosing the wrong branch: in the union
	l1|l2, union would always choose l1 if l1 matched a prefix of l2.

	We now process the input in a top-down fashion, splitting the string into
	parts as we descend in the tree of lenses. As evidenced by the test
	pass_prefix_union, that fixes the bad behavior.

	Incidentally, it also uncovered another bug in the test_hosts.aug, where a
	test passed, even though the string we were using did not end with the
	newline that is mandatory for Hosts.record.

	This change also does away with pasing flags and a FILE* for logging
	details about hte parse process; they don't really make sense anymore, nor
	is that behavior very useful in a library.

2008-05-22  David Lutterkort  <dlutter@redhat.com>

	Fix use of uninitialized pointer
	ERR must be initialized, since it is later passed to free_lns_error

	Lens for vsftpd.conf
	The lens is very tight, in that it only allows actual options, and knows
	what kind of value each option accepts.

2008-05-21  James Antill  <james@code.and.org>

	 Fix for the joy that is the glibc asprintf API.

2008-05-21  James Antill  <james@and.org>

	 Minor fix to not use bad memory.

	 Remove strcat's for stpcpy's

	 Fix escaping strings that end in \  Fix escaping of unprintable bytes

	 Fix buffer overflow on strings ending in \

2008-05-21  David Lutterkort  <dlutter@redhat.com>

	Use glibtoolize on OSX
	Patch provided by Rizwan Kassim

2008-05-21  Jim Meyering  <meyering@redhat.com>

	Make a file-scoped static array "const".

2008-05-18  Jim Meyering  <meyering@redhat.com>

	* src/augtool.c (cleanpath): Don't access path[-1].

	* src/transform.c (transform_save): Detect pre-fclose write failure.

	* src/internal.c (read_file): Rewrite, plugging a file descriptor leak.

2008-05-16  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.1.1 for changeset fae07193655a

	Release 0.1.1

	Add dependency on ref.h

	Get rid of compiled regexps earlier
	After we're done with a transform, release the memory used by compiled
	regexps; storage for compiled regexps accounts for the lion's share of
	Augeas' memory needs.

	Before this patch, augtool run against the files in tests/root/ used more
	than 10MB of memory; with this patch, that is done to 250 kB after the
	initial load, with a spike of about 6MB during loading.

2008-05-15  David Lutterkort  <dlutter@redhat.com>

	Misc leak fixes in the interpreter
	* Do not ref the old binding in bind_type, ownership is transferred from
	  the caller to the new list head
	* Unref the argument of an apply and the func computed in compile_compose
	* Unref the value after it is bound in the context in compile_decl
	* Unref various things in define_native_intl

	Don't leak the key when appending dict entries

	Free the actual struct exn when freeing an exn value
	Factor freeing a struct exn into free_exn; previously, the code did not
	free the storage for the struct exn itself.

	Don't leak key/value in parse on error

	Do not leak the split on error
	put_subtree has to free the split it computes; previously, it leaked that
	if an error inside the subtree occurred.

	Free loadpath
	Although not strictly necessary, it makes it easier to run augparse through
	valgrind and get meaningful results.

	Free path

	Don't leak SNAME

	Free the lns_error in lens_put

	Cleanly free regexp patterns; put empty_pattern into ro storage

	Ref the returned tree
	The tree that tree_set_glue and tree_rm_glue return needs to have its ref
	increased, as the calling conventions for builtin functions stipulate that
	the returned value is owned by the caller

2008-05-14  David Lutterkort  <dlutter@redhat.com>

	Report errors more clearly in the tree
	When an error happens during get/put, store additional info in the tree:
	for get errors, store the position in the file where the error occured, for
	put errors, the path of the node. In both cases, also store the
	human-readable message.

	For a file F, all this information is stored underneath /augeas/F/error,
	with the value associated with /augeas/F/error giving some indication about
	the kind of error encountered.

2008-05-13  David Lutterkort  <dlutter@redhat.com>

	Report errors during put

	Check that values match the regexp for the corresponding store during put

	Lens and transform for /etc/fstab
	The lens could be further refined by distinguishing between the legal
	values in the first field (LABEL=xxx vs special file system vs device) and
	by trying to model more of the vfs/option dependencies, but that's more of
	a v2 feature.

	Remove bad assertions
	It is perfectly legal for create_* functions to be called with a non-NULL
	skeleton; that happens for example when the union combinator puts a tree
	that "jumped branches", i.e. whose get used one branch of the union, and
	the put uses the other branch because of changes to the tree.

	Reduce the number of calls to collect
	We were calling collect way too often, which was slowing things down. Also
	broke collect into separate subfunctions so we can see better when one of
	them becomes a bottleneck.

	Stricter skeleton instance check for del and store
	Besides having the right tag, del and store match a skeleton only if the
	text for that skeleton also matches their regexp.

	Weaken the check for key, label, seq, and counter a tiny bit.

2008-05-12  David Lutterkort  <dlutter@redhat.com>

	Proper typecheck for lens unions
	Check that lenses have disjoint ctypes and atypes in a union.

	Fix up the existing lenses that violate that.

2008-05-09  David Lutterkort  <dlutter@redhat.com>

	Keep re_cset_as_string from including an explicit '\0'
	We use NUL delimited strings; that means we can not use a CSET
	representation that mentions '\0' explicitly.

	Use the new '-' operator for key_re

	Add subtraction of regular expressions to the language
	It is now possible to say something like

	  let re = /[a-z]+/ - "baseurl"

	The '-' operator is only defined between regexps.

	Add REGEXP_MINUS; move REGEXP_TO_FA to regexp.c

	Refactor typechecking for union/concat
	The typechecking for union and concat is incredibly similar, but was
	implemented with too much code duplication.

	Store character sets as bitsets
	Also clean up the definition of the bitset type and make the bitset_*
	functions const correct

	Add fa_as_regexp that converts an automaton back to a regexp
	During conversion from FA to regexp, our FA mutates into a 'generalized
	transition graph' where transitions aren't labelled with character
	intervals, but with regular expressions.

	There are lots of gyrations to keep the generated regexp reasonably short
	(and syntactically correct)

	Check for (some) allocation failures

	Reference count 'struct re' instances

	Split ref counting macros into separate header

2008-05-08  David Lutterkort  <dlutter@redhat.com>

	Remove use of bad REALLOC macro.
	The old REALLOC macro caused an automatic memory leak when REALLOC
	failed. Use of REALLOC_N instead also forces checking of more allocation
	failures.

	Safer memory allocation from libvirt

	Fix a rather embarrassing #ifdef problem
	When __GNUC__ was not defined, a big chunk of internal.h was suppressed
	that is not compiler dependent.

	Also, add ATTRIBUTE_PURE macro.

	Switch to using unsigned char internally
	Since we use chars as indices into arrays in some cases, it is simpler to
	treat characters as unsigned. This also addresses passing possibly signed
	chars to is* functions - by using unsigned char, we avoid possible silent
	conversion problems when going from char -> int.

	There were also cases where we iterated over chars using a char, which was
	prone to silent overflow.

	Fix mistaken assignments in asserts
	Reported by Jeff Johnson

2008-05-06  David Lutterkort  <dlutter@redhat.com>

	Cleaner way of turning off expensive asserts
	Avoid littering everything with #ifdef's, define an 'expensive_assert'
	instead that expands to nothing unless HASH_DEBUG_VERIFY is defined.

	Patch by Jim Meyering

	Small fixes to the specfile
	Suggested by Michael Schwendt

2008-05-05  David Lutterkort  <dlutter@redhat.com>

	Lens and transform for xinetd.conf

	Enclose the regexp for a key in (..) before adding a /

	Properly determine if segment needs qualifier
	For segments with label NULL, we didn't qualify the first sibling with the
	NULL label since we were comparing NULL to the result of seg_label, which
	was "(none)"

	Be more consistent in how NULL labels are printed

	Suppress assert of hash_verify
	Doing the assert(hash_verify(hash)) at various places in hash.c is very
	expensive and slows things down considerably when assertions are turned
	on.

	Rather than turning assertions off globally, only do the hash_verify
	asserts when they are explicitly requested by defining HASH_DEBUG_VERIFY

	Do not minimize freshly created regexps
	The minimization imposes a serious performance penalty, and is generally
	not needed.

	This also exposes a bug in fa_overlap; for acceptToAccept to work properly,
	it needs to be passed a deterministic automaton.

	Fix containment check
	Checking for FA2\FA1 being empty was plain silly; this check is a little
	better, but still not the correct disjointness check.

2008-05-02  David Lutterkort  <dlutter@redhat.com>

	Spec file fixes

2008-05-01  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.1.0 for changeset c032a957c316

	Version 0.1.0

	Rename parameter 'glob' to 'glb'
	gcc on RHEL4 gets confused and thinks that that shadows the global 'glob'
	function.

2008-04-30  David Lutterkort  <dlutter@redhat.com>

	Process lots of files in /etc/sysconfig
	Load all those shell-script style config files from /etc/sysconfig using
	the generic Shellvars lens.

	Ultimately, it would be better if we definedfor each of them which
	variables are actually going to be looked at (together with some
	restrictions on possible values)

	Test files for various /etc/sysconfig files
	The next commit will add a lens for handling shell var style files in
	/etc/sysconfig. These are simply test/sample files. No functionality.

	Refactor ifcfg.aug
	This puts the bits that are generally useful for processing /etc/sysconfig
	files into shell.aug

2008-04-30  Jim Meyering  <meyering@redhat.com>

	check for a few failed memory allocations
	* src/augtool.c: check for a few failed memory allocations

2008-04-30  Harald Hoyer  <harald@redhat.com>

	do ldconfig in post/postun of the libs subpackage

2008-04-28  David Lutterkort  <dlutter@redhat.com>

	Free the value when freeing a tree node

	Plug another memory leak

2008-04-25  David Lutterkort  <dlutter@redhat.com>

	Fix segfault when aug_get was passed a "/"
	In that case, make_path returns NULL, which must be checked.

	The bigger question, why "/" is not a valid path is a little more subtle:
	the tree is really edge-labeled, not node-labeled, i.e. a label applies to
	the edge going from a parent to its child, but root has no parent, and
	therefore "/" does not really make sense.

	Split multiple baseurl's in a yum file into multiple baseurl nodes
	With this, the schema for yum config files may now contain nodes like
	  { "section"
	     ... other key/value pairs ...
	     { "baseurl" = "url1" }
	     { "baseurl" = "url2" }
	     ...
	     { "baseurl" = "urlN" }
	     ... other key/value pairs ...
	  }

	Note that the baseurl nodes have to be consecutive; otherwise, put will
	fail.

	Fix lens selection in union
	The logic in put to select the appropriate branch in unions got it wrong if
	the first branch matched the empty word, because applies only checked that
	the atype for the sublens matched some of the tree. It has to check for a
	complete match of its tree.

	This change fixes that and adds a test to demonstrate the problem.

2008-04-24  David Lutterkort  <dlutter@redhat.com>

	Fix ref counting error in lns_make_plus
	We burnt the passed-in ownership of L when constructing STAR; also, since
	we unref STAR at the end, we need to take ownership of STAR->LENS when
	constructing the concat of L and STAR->LENS

	* src/fa.c (string_extend): Handle realloc failure.
	Patch by Jim Meyering

	Update AUTHORS/NEWS

	Processing of Apt's sources files
	Contributed by Dean Wilson

	Make sure install preserves timestamps
	Avoids getting into trouble with the .aug files in augeas-libs on multilib
	when installing more than one arch.

	See http://fedoraproject.org/wiki/PackagingDrafts/MultilibTricks

	Remove trailing whitespace from the end of lines
	No functional change, only formatting.

2008-04-23  David Lutterkort  <dlutter@redhat.com>

	Remove aug_exists - it does not exist anymore

	Delete old, outdated notes

	Some repo files for yum

	Add todo file for low-level tasks that don't make sense on the website

	Split libraries into a -libs package
	This also includes the files in /usr/share/augeas, since they are read by
	the library and control how configuration files are processed.

	Patch provided by Harald Hoyer

	Include the augtool manpage as doc in the RPM

	Don't die on NULL entries in args
	There is no guarantee that parseline will fill all of args with strings,
	empty or otherwise; chk_args needs to be prepared that any entry in args
	can be NULL.

	Also, parseline initializes all args as NULL now to guard against garbage
	pointers accumulating from previous uses.

	Don't complain about missing optional args
	For example, both 'print' and 'print PATH' are legal. Make sure we accept
	either.

	Properly handle lines with spaces
	The lines read in through readline can now have spaces in their arguments,
	if those arguments are enclosed in single or double quotes.

	Revised help texts

	Man page
	Provided by Dean Wilson

2008-04-22  David Lutterkort  <dlutter@redhat.com>

	Fix two memory leaks in the interpreter

	Plug more memory leaks

	Fix memory leak from not freeing hash table entries

	Clean up the error path in load_file; free the loaded text in transform_load

	Use fread_file_lim to read entire files
	The function is taken verbatim from libvirt's util.c, and due to show up in
	gnulib soon.

	Also, make read_file return a char * instead of the silly const char *.

	Check the return value from hash_create

	More const-correctness fixes
	Patch provided by Jim Meyering

	File needed for running the tests

	Stick more closely to what the shell accepts as assignments

	Properly escape/unescape quotes in strings
	Patch provided by Alan Pevec

2008-04-21  David Lutterkort  <dlutter@redhat.com>

	Updated for 0.0.8 and upcoming 0.1.0 release

	Remove aug_exists from public API
	aug_get now combines the functionality of the old aug_exists and aug_get
	calls, so that callers can retrieve a value and check whether a path
	expression matches exactly one node in a single call.

	Make creation of new files work
	When a subtree is created that corresponds to a brandnew file, create the
	underlying file properly.

	Propagate failure of transform_save up

	Sync compiler warnings with latest from libvirt
	This should avoid build failures seen on Debian, caused by
	-fstack-protector

	Also fix build failure caused by addition of -Wformat-security

	Mention people who sent patches

	Parse network configs in /etc/sysconfig/ifcfg-*
	Patch provided by Alan Pevec

	Don't mark ROOT for MAKE_PATH as const - it's not always true

	Cap file reads (arbitrarily) at 32MB

	Don't ever try to read a directory
	Suggested by Jim Meyering.

	Return int from aug_print to indicate errors
	Check for failures during printing and return an indication whether printing
	succeeded or not.

	Don't hide pointer in typedef; const correctness
	The type for the Augeas handle is now called 'augeas' insteda of
	'augeas_t', and is a struct, not a pointer to a struct.

	Mark the places where the passed-in struct augeas is readonly in the API.

	Patch provided by Jim Meyering

	Change names of macros used to guard against double-inclusion
	Change the names from __NAME_H to NAME_H_ since __* macros are reserved.

	Suggested by Jim Meyering.

	Add "2008" to the copyright in the headers

2008-04-19  David Lutterkort  <dlutter@redhat.com>

	Remove dependency on glib and use kazlib's hash table instead
	The dependency on glib was only there for the hash tables used by
	libfa. Rather than requiring all of glib just for that, use the hash table
	implementation in hash.[ch] taken from kazlib.

2008-04-18  David Lutterkort  <dlutter@redhat.com>

	Hashtable from Kazlib 1.20
	Available from http://users.footprints.net/~kaz/kazlib.html

	Abort if failing assertions are not used

2008-04-19  David Lutterkort  <dlutter@redhat.com>

	Remove pathsplit symbol

2008-04-16  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.0.8 for changeset cb00aa18e518

	Release 0.0.8

	Remove unused function

	Install lens tests in lenses/tests/ not lenses/

	Use the right path expression to print the whole tree

	Don't segfault when a test fails without producing any tree

2008-04-15  David Lutterkort  <dlutter@redhat.com>

	Call the node for a boot entry 'title'

2008-04-14  David Lutterkort  <dlutter@redhat.com>

	Remove the use in sequences in some places
	Where indentation isn't important, we can flatten and simplify the tree by
	not using seqs. Instead of something like aliases/1, aliases/2, ... we now
	have alias[1], alias[2] etc.

	Start sequences at 1, in symmetry with the element[N] counting

	Consolidate tree allocation into one make_tree function

	Change the ins syntax to support insert before/after
	This reflects the change to the aug_insert API

	Handle searching for the last() element properly
	path_first didn't find anything when looking for 'element[last()]'

	Process grub.conf

	Don't delete too many siblings
	When a path specified a node that had siblings with the same name, tree_rm
	was deleting that node and all the siblings after it (because the name
	label[3] would ssuccessively refer to its later siblings as label[3] was
	deleted)

	Now, first generate a list of nodes to delete before removing anything.

	Fix put test - it was checking for hte wrong result

	Running a failing test fails loading the whole module

2008-04-12  David Lutterkort  <dlutter@redhat.com>

	Add path expressions allowing XPath-like path matching
	Path expressions passed in through the public API can now contain indices
	to denote a specific sibling (including [last()]) amongst siblings with
	multiple labels, and use '*' to match nodes with any label.

	Syntax and semantics follow XPath.

2008-04-11  David Lutterkort  <dlutter@redhat.com>

	Run all tests - don't abort after the first failure

2008-04-10  David Lutterkort  <dlutter@redhat.com>

	Escape values and enclose them in quotes when printing

	Typecheck only on the first test
	It's enough to pass -c to augtool on the first test we run; doing it again
	in later tests is completely redundant and just slows the test run down.

2008-04-09  David Lutterkort  <dlutter@redhat.com>

	Complain if a transform is built from a lens orphaning a key/value
	Such a transform would lose information when applied and can't be
	valid. Ideally, this check would be in the typechecker, but requires
	dependant types, too much of a complication right now.

	Clean up some confusion around the semantics of store
	Store does not create a tree; instead it puts a value in place where the
	enclosing subtree will find it.

	During lens building, there is now a check to make sure the key and value
	are set in at most one place in each subtree. Ideally, this check would
	happen in the typechecker, but it would require that we parametrize the
	lens type, considerably complicating matters.

	When get encounters an error during a test, include hte tree in the exn
	lns_get now returns a tree even if the full input was not consumed. To
	check whether get succeeded, the ERR parameter needs to be checked.

	Update README

	Remove 'spec' files and tests that don't make sense any longer

	Fail test scripts on _any_ unexpected error

	Distribute lens tests

	Suppress .rpmnew/save files

	Obey AUG_TYPE_CHECK flag
	Do not do the expensive lens type checks if AUG_TYPE_CHECK is not set. Run
	augtool with -c in tests to ensure tests do type checks.

	Update augtool round-trip tests and add them to 'make check'
	Update the tests to the new layout of the tree.

	augtest allows marking tests to skip (by putting 'skip=true' into the
	test) and sets the exit status properly so that 'make check' will fail if
	one of the augtool tests fails

	Fix underallocation

	Only attempt to save if there are dirty files

	Reread the original file from the same root on save

	Pass the children of the right tree

	Fix some errors that made aug_save fail

	Mark a freshly loaded tree as clean

	Check the return value of asprintf
	Handling of asprintf failures (and allocation failures in general) needs a
	lot more work.

	Small touchup - needs much more work

	Fix segfault if a qualified name references the module it is in
	Now explicitly referencing the enclosing module works properly: if the name
	is already defined locally, everything works, and if it is not, an error is
	produced.

2008-04-08  David Lutterkort  <dlutter@redhat.com>

	Typecheck the atype of concat and iter

	Typecheck the atype of union

	Change the typecheck on union
	Typecheck unions l1|l2 less strictly (and less annoyingly) by requiring
	that l2 has a chance of ever being used, and not the stricter criterion of
	disjoint ctypes for l1 and l2

	Port of the lenses for inittab and sshd_config tothe new syntax

	Curb the repeated printing of exceptions

	Clearer error message

	Processing of pam.d

	Pull some useful space deleters into Util

	Check that let expressions work

	Fix problem in concating filters
	The check whether we fully own a filter in compile_concat, and therefore
	can modify it destructively, was wrong. Besides holding the only reference
	to the filter, we also need to be holding the only reference to the value
	wrapping the filter.

	Mark hosts and aliases for autoloading

	Load from the new ../lenses dir

	Obey setting of an explicit root directory

	Don't segfault when there is no filter arg for a match
	Before, running "augtool match '/augeas/files/*/error'" would result in a
	segfault. Now it prints all matching entries, regardless of their value.

	Handle continuation lines; more thorough tests

	Check that labels and keys do not contain a '/'
	We rely on that fact in various places when handling paths; '/' is the
	separator of path components and can never appear in a path component.

	Print a newline on EOF

	Autoloading of files for augtool
	Autoload is indicated by putting a 'autoload ...' statement as the first
	expression in a module. Currently, there can only be one autoload; the
	identifier mentioned in the autoload must be defined in the enclosing
	module.

2008-04-07  David Lutterkort  <dlutter@redhat.com>

	Builtins for filters and transforms
	Three simple builtins to construct transforms:

	- incl : string -> filter includes all files matching a glob
	- excl : string -> filter -> filter excludes all files matching a glob
	- transform: lens -> filter -> transform

2008-04-08  David Lutterkort  <dlutter@redhat.com>

	Implement free_lens

2008-04-07  David Lutterkort  <dlutter@redhat.com>

	A lens for yum

	Fix bad free

	Add Util.split

	Local let expressions
	Add syntax for
	  let a =
	    let b = exp in
	      exp

	Plug two more memory leaks
	- require_exp_type is sometimes called with a term that already has
	  a type. Don't typecheck such terms again
	- compile_compose should not run the full typechecker on the closure it is
	  building, since parts of it have been typechecked already. Instead,
	  manually create types for the new terms. Also, don't evaluate the
	  subexpressions since their values are not used at all

	Add a 'gensym' builtin

	More ref ocunting fixes
	- aug_close now releases the list of modules
	- compile_bracket cleans up the arg
	- augparse closes the augeas connection, mostly so that we can see leaks
	  in valgrind better

2008-04-05  David Lutterkort  <dlutter@redhat.com>

	Fix major brainfart in ref counting lists
	The way lists were reference counted (and particularly unref'd) was just
	plain stupid wrong. A list 'next' pointer is no different from any other
	pointer when it comes to ref counting.

2008-04-04  David Lutterkort  <dlutter@redhat.com>

	Initialize *err properly, even if there is no tree

	Fix bug with nested subtrees
	There was no clear indication if a subtree was a leaf (and should therefore
	not grow any tree returned by its child) or was an interior subtree (so
	that any returned tree needs to become a child of a new tree)

	Kludge around an inconsistency with print_tree

	Beginnings of tests for the interpreter

	Exceptions during compilation countas failure

	Fix how the key regexp for unions is calculated
	Union would produce spurious empty keys, for example in the expression
	  [ key /a/ . ([ l1 ] | [ l2 ]) ]
	the union would get an atype of '//' which is wrong, since the subtree []
	does not contribute to an atype.

	Start a util module with some common functions

	Run lens tests during 'make check'

	Fix bug introduced in 292:5123e63e004b
	Don't compare with the whole path if there is a parent, only the last
	component of that path.

	Handle trailing slashes on loadpath components cleanly

	/etc/aliases processing in the new syntax with tests

	Allow rm from toplevel of tree
	The only issue with this is that the dirty flag can not be set properly
	when deleting from the toplevel of the tree since the flag has to be set on
	the parent, which we don't have.

	This is really only an issue if (a) we delete the whole tree (b) the next
	sibling of the node we delete is semantically different from the deleted
	node (e.g. because it goes into a different file)

	Either way, this only happens during tests; in the 'real' tree, toplevel
	nodes are fixed, like /files and /augeas, and we don't really have an issue
	there.

	Small tweaks

	Produce exn when tree_rm/tree_set fail

	Update yylloc for string/regexp constants

	When compile_exp produces an exn, bind it anyway
	This avoids lots of trouble with NULL values

	Desugar (lens)+
	The construct (lens)+ is now processed as lens . lens*

	Fix segv on repetition of regexps

	Clearer error messages from typechecking lenses

	Fix key regexp for union; throw exception on subtrees with multiple keys

	Have lens constructors return exns on failure
	Also refactor exception generation.

2008-04-03  David Lutterkort  <dlutter@redhat.com>

	Add a test that produces an exception

	Allow '*' as a test result indicating an expected exception

	Error propagation from lns_put
	Record a lns_error if things don't work out during put. Generate an
	exception on error.

	A very first lens in the new syntax, with tests

	Use the default string for a del lens, really.

	Module names must be consistent with the name of the file they are in
	The basename of the file must be the name of the module, lowercased and
	with ".aug" appended

	Add explicit loadpath
	augtool and augparse now take an explicit loadpath with the -I option,
	which can be repeated multiple times.

	aug_init takes a loadpath as a new argument

	Load needed modules
	When the module for a qualified identifier Mod.name is not loaded yet,
	automatically load it by looking for a file mod.aug on the module load
	path.

	Rename struct env to struct module

	Separate function composition from concatenation
	Function composition is now written as 'f ; g' instead of 'f . g'

	Allow tree constants with NULL labels

	Clean up printing of empty trees

	Clarify the reference counting terminology

	Free the skel that lns_put creates initially

	Make sure free_dict frees the whole dict

	Fix reference problem
	The wrong type was being unref'd

2008-04-02  David Lutterkort  <dlutter@redhat.com>

	Free the whole dictionary
	While entries are looked up, dict->entry changes; dict->mark is the head of
	the list of all entries that were ever in the dict.

	Clear skel and dict in state so assertions in create_ don't trip

	Always split the full tree
	There's no need to support splitting a partial tree for now. This means
	that lns_put will put TREE and all its siblings.

	Fix incorrect usage of size parameter for re_match

	Add missing break in get/parse_union
	Without it, it acts like a concat that drops trees on the floor

	Allow printing of hidden tree nodes
	When printing test results, we want to see the full tree

	Pass lns_error to parse; free dicts and skels

	Report errors from get as exceptions
	Adds a value kind 'EXN'. When the interpreter gets such a value, it bails
	out immediately.

	lns_get now reports parse errors in an lns_error struct, which is turned
	into an exception in the interpreter.

	Added tag ml-syntax-start for changeset fcd6c04a1eed

	A subtree without a key matches "/"

	Print \n after test result

	Allocate enough bytes for string in unescape

	Free regexps cleanly

	Fill in subtree->atype with empty regexp

2008-04-01  David Lutterkort  <dlutter@redhat.com>

	Interpreter for the new file description syntax
	This is by no means done, but done enough to allow incremental fixes from
	now on. This checkin still contains lots of FIXME's and bugs. Very simple
	unit tests do work though.

	The syntax for describing files is now a very simple OCaml-like functional
	language; the file syntax.c implements an interpreter for that language.

2008-03-25  David Lutterkort  <dlutter@redhat.com>

	Revamp the language

2008-03-14  David Lutterkort  <dlutter@redhat.com>

	Remove comment about fa_overlap/fa_ambig_example
	I don't really have the data to support preferring one over the other that.

	Rename parse_* functions to get_*

	Rename parser.c to get.c

	Add bcprules (by Benjamin Pierce); needed by lenses.tex

	Added tag release-0.0.7 for changeset 93563112907c

	Release 0.0.7

	Expose typechecking in augtool
	Run 'augtool -c' to get typechecking. Very useful during
	development. (Though augparse is even more useful when writing new lenses)

	Be a little more restrictive on when to dump the whole grammar

	Fix lenses so that they pass type checking.
	There were several subtle amibuities in the lenses previously, which the
	typechecker nicely discovers now.

	When splitting the tree, check that we are atthe right subtree
	Without the check, spliting at a subtree just gobbles up trees without any
	regard for what that tree is. This becmoes a problem in a sequence like
	  [ COMMENT ] * . [ key FOO . store BAR ] *
	when there is no comment, and therefore no subtree witha NULL label. A tree
	with a single node matching FOO is wrongly split as if there was a COMMENT
	(which, if it were there would have to have a NULL label)

2008-03-13  David Lutterkort  <dlutter@redhat.com>

	Defer allocating storage for a state_set as long as possible

	Rename constants state_set_* to array_*
	We use state_set_initial_size and state_set_max_stride for both state_set
	and transitions arrays. Rename them to array_initial_size and
	array_max_expansion

	Speed up FA_MINUS by checking for some simple cases with fixed results

	Speed up fa_contains by not determinizing FA1

	Speed up intersection
	(1) Do not determinize before intersecting
	(2) Check if one of the automata is the empty language, and return the
	    empty language if so

	Store transitions in an array
	Brings about a 10% performance gain since we don't allocate each transition
	individually, and since traversing and accessing transitions is a wee bit
	faster.

	Remove unused macro

	Clean up fa_iter some
	Now both cases (max == -1 for unbounded iteration) and max >=0 use the same
	code to generate the automaton (fa){min}

	Compute union and concat in place internally
	Reduces the number of times we clone an fa for internal purposes, and
	therefore the memory management overhead.

	Rejigger the weights assigned by chr_score to make fa_example more predictable

	Minor optimization for fa_example

	Keep the list of states for clone in a sorted set
	This speeds up things enormously (for cmfm.aug, augparse goes from 17s to 6s)

	Store that pairs of states for intersection in a hash table

	Sorted state sets
	When order of states in a set doesn't matter, allow the set to be kept
	sorted so that search can use binary search.

2008-03-12  David Lutterkort  <dlutter@redhat.com>

	Fix two memory leaks

	Remove the last uses of FA_MAP
	Use STATE_SET instead, since it's faster and lighterweight

	Rename structs fa_state and fa_trans to state and trans

	[mq]: min_hopcroft.patch

	Sort transitions before generating examples
	Otherwise, examples depend on the order in which transitions appear for
	each state.

	Add state sets at head of state_set_list

	Use state_set in fa_clone
	To speed up fa_clone, keep the correspondence between old and new states in
	a state_set to reduce allocation overhead.

	Reverse transitions in place in fa_reverse

	Improve the performance of fa_intersect with better data structures
	Store the map of (s1, s2) -> s for intersection in nested state sets
	instead of a linked list.

	Faster data structures for sets of states and a list of sets of states
	Store the list of sets of states for determinize in a hash table. Since I
	don't feel like implementing my own, pull in glib and use GHashTable.

	Store sets of states in an array rather than in a linked list. This greatly
	reducs the overhead from memory allocations, since the array is expanded by
	doubling its size (up to some threshold)

2008-03-11  David Lutterkort  <dlutter@redhat.com>

	fa_star added a spurious epstrans loop on new initial

	Mark live and reachable states
	Performance improvement. Instead of allocating temporary lists for live and
	reachable states, use one bit each in the state to mark them for that
	purpose.

	Add typechecking of lenses
	Concatenation and iteration of lenses is now checked for ambiguity. Union
	is checked for disjointness, but that is only flagged as a warning, since
	it's mostly a harmless problem, and fixing it requires writing nasty
	regexps in the spec files.

	Fix existing specs to pass typeckecking. Typechecking is extremely slow
	right now, some of that will be addressed shortly. For now, augtool does
	not do typechecking, but augparse does by default.

2008-03-10  David Lutterkort  <dlutter@redhat.com>

	Fix subtle bug in determinize
	Fix a bug that would only hit if '\0' is ever in points.

2008-03-06  David Lutterkort  <dlutter@redhat.com>

	Add fa_ambig_example to generate ambiguous words
	Generate an ambiguous string upv given two languages and directions on how
	to split that string into u.pv and up.v. Algorithm from Anders Moeller from
	the dk.brics.grammar package.

	Fix example generation, it was completely broken
	The previous algorithm was way too simplistic, and failed on more
	complicated languages.

	fa_example now generates a relatively short word, subject to certain
	preferences, so that for example, alnum characters are preferred over
	printable ones, and those over nonprintable ones.

	Fix some cornercases in fa_example

2008-03-05  David Lutterkort  <dlutter@redhat.com>

	Add generators and tests for some basic languages
	Basic languages are the empty language, the language containing only the
	empty word, and the total language \Sigma^*

	Fix tyops

	Added tag release-0.0.6 for changeset 9a4f846673ac

	Released version 0.0.6

	Allow influencing the behavior of save
	By passing one of the flags AUG_SAVE_BACKUP or AUG_SAVE_NEWFILE to
	aug_init, it is possible to influence the behavior of aug_save to either
	overwrite files in palce, save originals with extension .augsave, or put
	changes into files with extension .augnew.

	Also added switches to augtool to set this from the command line, and to
	set the filesystem root.

	Added tag release-0.0.5 for changeset 0efe2a620e39

	Mark print_re as unused

	Release 0.0.5

	Make aug_close public

	Public API change: include a reference to an augeas_t in all calls
	To make Augeas threadsafe, we need to move away from keeping stuff in
	global variables.

2008-03-04  David Lutterkort  <dlutter@redhat.com>

	Add fa_example which produces an example string from a regular language

	Add a test that performs Anders Moeller's ambiguity algorithm manually

	Two bug fixes
	(1) fa_make_char_set would never create transitions with min == max
	(2) fa_intersect got things wrong when t2 had an interval that overlapped
	    several intervals on t1

	Also added tests to check these two problems.

	Fix handling of negated charsets
	Negated charsets where handled entirely wrong. A character set is now
	represented as a map from char -> {0, 1}. That map is rather big (one byte
	per character)

	Fix order in which libraries are installed
	libaugeas must be installed after libfa, since it depends on it.

	Remove old sketch of interface; not needed anymore

	Compute the complement, set difference and overlap of two languages

	Fix a bug in how '.' is being handled
	The '.' was treated the same as [\n] instead of [^\n] by mistake.

	Also fixes a small bug in fa_contains.

	Add deciding unambiguously iterable based on ua concatenable

2008-03-03  David Lutterkort  <dlutter@redhat.com>

	Automatically free all automata allocated during a test

	Cleanup the returned FA in fa_intersect

	Add a target to run fatest through valgrind

	Add fa_intersect: intersection of regular languages

	Comment the uses of FA_MAP better and rename some internal helper functions

	Clean up management of state lists
	Centralise allocating new states for a fa in add_state; that makes sure
	that all states appear on the list of states in fa->initial.

	Do not rely on gcc >= 4.0 for restricting symbol exports
	Use a linker script instead. The visibility pragma is only available in gcc
	>= 4.0, and thus imposes a pretty high burden to build Augeas.

2008-03-01  David Lutterkort  <dlutter@redhat.com>

	Reign in the number of symbols exported from libaugeas
	Use visibility=hidden to keep most local symbols to ourselves. Still needs
	some work for augparse/augtool

2008-02-29  David Lutterkort  <dlutter@redhat.com>

	Performance improvements
	(1) Don't minimize the automaton quite so often. Now, only fa_compile minimizes
	    by default.
	(2) Instead of full-on minimization, clean up the automaton before
	    returning to the user by removing dead transitions/states.

	Remove gratuitous list traversals
	Replace list_append with list_cons (adds at the head of a list) where order
	of the list does not matter.

	Add tests for language subsets and equality

	The beginnings of a finite automata library
	The code is heavily based on the Java package dk.brics.automaton by Anders
	Moeller (http://www.brics.dk/automaton/)

	Eventually, this should becomea standalone library, seeing how there does
	not seem to be any open-source, maintained finite automata library.

	Some unit testing help
	This is an adapted version of CuTest
	(http://sourceforge.net/projects/cutest/) written by Asim Jalis

	Minimal docs for aug_save and aug_print

2008-02-26  David Lutterkort  <dlutter@redhat.com>

	Ignore more stuff

	Fix segfault in aug_ls
	When skipping nodes with NULL label, don't segfault if the whole tail of
	the list has NULL labels

2008-02-25  David Lutterkort  <dlutter@redhat.com>

	Added tag release-0.0.4 for changeset d8e750d82f97

	Version 0.0.4

	Some NEWS

	Package as RPM

	Turn off warnings-as-errors when building spec-lex.l
	We need -Wno-error, otherwise the CFLAGS passed during mock builds turn
	checking for unused parameters back on; flex doesn't provide an easy way to
	generate code that passes those checks (that's the reason for building the
	liblexer.la convenience lib)

	Only define print_dict when it is used

	Added tag release-0.0.3 for changeset 56cb08f222a3

	Version 0.0.3

	Test for readline in a way that works on RHEL5

	Some build/install tweaks
	(1) Rename spec in $(datadir)/augeas/spec to lenses
	(2) Add pkgconfig info for libaugeas
	(3) Install augeas.h as a header

	Rename AUGEAS_SPECLIB to AUGEAS_LENS_LIB

	Added tag release-0.0.2 for changeset f981ccccb0ab

	Include the try script in the distribution

	Bump version to 0.0.2

	Fix things up so that 'make distcheck' works
	(1) make test runs work when when top_builddir != top_srcdir
	(2) Include spec/ files in distribution
	(3) disable test-grammars.sh since the test grammars are busted right now

	Fix warnings about uninitialized variables

	Add config.h to libaugeas.la

	Stricter types for some combinators. List needed reg lang operations

2008-02-21  David Lutterkort  <dlutter@redhat.com>

	Some changes to the yum description
	(1) Use a yum.conf that is actually shipping
	(2) Make COMMENT match blank lines
	(3) Fix tests to work with updated yum.conf

	Only create /tmp/augcmds.txt if it doesn't exist
	Nothing deep; just trying to keep Mercurial from marking the file as
	modified as I change the commands that try runs

	Make aug_ls return all the children for a given path
	aug_ls did not handle entries that were split across several nodes
	properly. Now, we find all the nodes for the given path and list their
	children.

	Fix splitting of AcceptEnv
	The list of env vars for AcceptEnv was not being split into individual
	pieces

2008-02-20  David Lutterkort  <dlutter@redhat.com>

	A (pretty kludgy) description for cmfm.conf

	Make printing of skel/dict optional

	Print test results a tad prettier

	Use GNU regex instead of PCRE
	Use the GNU regex functions from glibc instead of PCRE, as glibc uses a DFA
	implementation that does not suffer the limitations of PCRE's backtracking
	implementation.

	The syntax for regular expressions is now RE_SYNTAX_POSIX_MINIMAL_EXTENDED,
	essentially extended POSIX regular expressions, except that '.' does not
	match newlines.

	Clean up regexps for POSIX
	Various small fixes to regexps to make them work properly as POSIX regexps.

	Added tag remove-any-first-follow for changeset 0d22160e9494

	Remove any matches ... and ..? from the language. Remove first/follow sets
	They currently require lookahead assertions from the underlying regexp
	engine.

	Since any matches were the only reason to compute first/follow sets, remove
	those, too.

	Remove the use of the any operators '...' and '..?'
	These operators inherently require lookahead assertions, but we need to
	switch to a regexp engine that does not support them.

	Don't segfault when parsing fails

2008-02-19  David Lutterkort  <dlutter@redhat.com>

	Drop CF-oriented check for ambiguity through looking at first sets

	Allow escaping of a slash in tegular expressions

2008-02-18  David Lutterkort  <dlutter@redhat.com>

	Base parsing completely off regexp matching.
	Parsing now uses regexp matching, and not the CFG-style parsing based on
	first sets previously used. This actually makes it easier to write specs,
	since parsing decisions are made based on the complete string, not just the
	first 'token'.

	The downside is that rules can not be recursive anymore, as that would
	make the matched language non-regular.

	The main motivator for this change is that it makes it possible to do
	stricter checking of the input spec using type checking similar to
	boomerang's string lenses based on operations on regular languages.

	Unfortunately, we have to keep first/follow computations to construct the
	fairly tricky regexps that are used for ANY patterns.

	Remove unused token T_FIELD

	Rename match.xaction to match.action
	The field was named initially to avoid a clash with another 'action' field,
	but that field is gone now.

	Add Match blocks

	Remove leading whitespace inside Match directives

	Fix nested splits
	For a lens like a . (b . c)*, tree_split used to return a split that looked
	like [a; b; c; b; c] That is wrong: when we split on the outer '.', we need
	to produce a split with exactly two entries: [a; b] (where b stands as the
	first entry in the tree that '*' will act on.

	split_tree_car cleans up recursively computed splits in this manner; those
	subsplits are mostly computed for their sideeffect, particularly for the
	fact that they change state->tree.

	Properly print split nodes

	Lenses for sshd_config
	This is interesting because of the treatment of AcceptEnv and similar
	constructs

	For split nodes, append entries at the last occurence
	It is possible that one logical node is split across several physical
	nodes to accomodate settings that are spread across several lines like
	'AcceptEnv' for sshd_config. Such lines lead to multiple nodes
	/system/config/sshd/AcceptEnv (all siblings of each other)

	When a call to aug_set creates a new entry underneath such a split node,
	make sure that that the new node is put under the last such node. This
	helps maintain the illusion for users that the split node is really just
	one node.

2008-02-15  David Lutterkort  <dlutter@redhat.com>

	Report some information underneath /augeas
	The root directory and information about how files were loaded into the
	tree are kept in the /augeas hierarchy now

	Fix very bad use of realloc

	Adjust expected diff
	Do not allow comments to disappear

	Fix test
	The old diff was bogus (it expected a comment to be removed that has to
	stay there)

	Cleanly handle comments

	Default COLON to ':' plus tab. Simple tests for aliases

	Informal survey of files in /etc

	Ignore intermediate Latex files

	Store comments in subtrees so they are restored properly

	Turn into a test on a legal tree and make it pass

	Fix split of QUANT_MAYBE. Add create_quant_maybe

	Make aliases work

	Free the results of split_tree

	Properly split an empty * as an empty list

	Try to make putting QUANT_MAYBE work
	This is still kinda suspect

	parse_subtree must always generates a tree
	We have to have a subtree, no matter what, even if it is completely
	empty. If the subtree doesn't contain any key and store instructions, we
	still need to have a tree [ NULL -> NULL ]

	Modified yum spec that seems to work

	Script to ease testing of augtool

	Enable parsing of pam

	Remove bogus reset of 'record' counter

	Fix print problem
	Print did not generate paths right; it would print children of a node with
	a path that did not contain the label of that node.

	Add clear command

	Properly handle a NULL value in aug_set. Make aug_insert deal with NULL labels.

	Fixed, nicely working tests

	Readline completion
	Complete command names and tree paths.

	Also cleans up the path entered by the user so that it doesn't have
	trailing spaces or '/'. Cleaning should probably be done by the public
	API.

2008-02-14  David Lutterkort  <dlutter@redhat.com>

	Major rework
	Code still unbelievably buggy and segfaults in lots of places, but it is
	fairly clean and works for choice examples.

	The reworked code is based fairly closely of boomerang and
	lenses. doc/lenses.tex describes some of the background.

2008-02-13  David Lutterkort  <dlutter@redhat.com>

	Cleaner syntax
	The spec language now contains instructions on how to build the tree inline
	with the grammar.

	This change is majorly broken.

2008-02-12  David Lutterkort  <dlutter@redhat.com>

	Better description of lenses

	Different representation of the tree
	The tree is now represented as a tree data structure, where each node in
	the tree stores only a path component (label).

2008-02-08  David Lutterkort  <dlutter@redhat.com>

	Beginnings of a formal writeup

2008-01-30  David Lutterkort  <dlutter@redhat.com>

	Remove field references as a match
	It used to be possible to have a rule like
	  rule: RE '=' $1
	with the meaning that $1 would match the same thing as RE. That hasn't been
	used yet; unclear if it ever will.

	When deleting, only mark AST changed when leaf was deleted
	This is really a kludge to work around the fact that we might construct
	incomplete AST's.

	Slightly mroe helpful error message during parsing

	Don't segfault when the parse matches nothing

2008-01-29  David Lutterkort  <dlutter@redhat.com>

	Another yum test

	Remove more unneeded cruft

	Remove unneeded safe_free, TRUE and FALSE

	Remove unneeded ROOT_DIR and update augtool help

	Remove dead code and misleading comment

	Remove files not needed any longer

	Update NEWS

	Run all the augtest tests by default and from make check

	Test key/value parsing with yum
	The test file also nicely illustrates some shortcomings of the way comments
	are associated with tree entries. There's not enough flexibility to let the
	user cleanly indicate what a comment goes with (e.g., an entire section,
	the next key/value pair etc.)

	Initialize fields used as path components
	When a field is used in a path component, initialize its value from the
	path. Since it is not possible to change an existing path, this operation
	is only needed when new parts of the AST are created.

	The code assumes that the leaf for the path component is in the subtree
	where the leaf's value is used. That is not necessarily true; at least,
	it's not being checked from the grammar.

	Test that reordering of subtrees works

	Set the root of the tree from include

	Respect ordering of nodes in the config tree.
	Previously, reordering of branches in the config tree did not lead to a
	corresponding reordering of elements in the file. Branches in the AST are
	now reordered in such a way that their ordering reflects the ordering in
	the config tree.

	Iterator nodes with a $seq action need to be treated special: they do not
	change the path for the current (iterator) node, only for the child nodes.
	That is terribly ugly.

	Fix bug in creating sequence subtrees

	Distribute enters so we have one per match
	Simultaneous traversal of the AST and the config tree is much simpler if
	any match will only go at most one level deeper. That guarantees that
	entering a child in the config tree corresponds to entering an AST node
	(possibly followed by entering some more AST nodes labelled with the same
	path)

	To this end, split actions with multiple enters into fake SEQUENCE matches
	(followed by the match that held the initial action). The fake SEQUENCE
	matches all have exactly one child in their matches field, and one of the
	enter instructions from the action for them.

	Actions are also lifted up in the grammar as far as possible; in
	particular, this pulls constants (but not $seq) out of iterators. This
	ensures that the children of an AST node differ in exactly one path
	component.

	Push stores to the matches they store in the tree
	In an assignment, the value being stored can only be a field
	reference. Push the corresponding action for the store to that field. This
	simplifies both getting and putting the tree.

	As a byproduct, a number of questionable constructs are spotted and
	rejected:
	  (1) Assignments that move the value out of the current tree
	  (2) Storing the same value in more than one place in the tree (which
	      would make it possible to change one copy, but not both)
	  (3) Useless enter instructions; they don't cause harm but probably
	      indicate some other problem in the grammar. They are only spotted
	      if they get in the way of a store, but should probably be checked for
	      the whole grammar

	Produce dot files for the grammar

	Various changes to the tests to make them (almost) work
	(1) Adjust to the fact that the root dir is now a variable
	(2) Mark tests as failing if augtool exits with an error exit status
	(3) Use numbers matching [0-9]+ where the grammar uses $seq, otherwise
	    augtool will (rightly) report an impossible path

	Some of the tests are still failing.

	aug_ls: Fix bad parent comparison
	Before /foo/1000 was listed as a child of /foo/1

	Docs

2008-01-24  David Lutterkort  <dlutter@redhat.com>

	Rough thoughts about emit

2008-01-21  David Lutterkort  <dlutter@redhat.com>

	For quantified groups, count the quantifier as the group
	Previously, for a match like '(A)*' A was counted as a group, which meant
	that if an action was attached to the group, all the children of the '*'
	node in the AST had the same path. By counting the '*' as the group, not
	'A', the children will have different name if different subtrees are
	produced in the group.

	This ensures that in the AST, the children of '*' and '+' have different
	names and simplifies the 'put' direction of the transformation
	considerably.

	Some config settings - most of them need to be exposed through configure.ac

2008-01-18  David Lutterkort  <dlutter@redhat.com>

	Global filename does not exist. Use basename

	Only increment $seq when it has been used
	With this change, $seq goes structly sequential in the generated tree
	nodes. Before, things like comments that don't lead to changes in the tree
	increased the counter, too.

	Spec files needed by the tests

	Don't segfault in ast_dot on NULL ast

	Only save files with actual changes
	Split emitting into two parts: updating the AST from the config tree and
	actually writing the AST to file. do_insertion and do_deletion now report
	if they made any changes to the tree so that the provider can decide
	whether to save the file or not.

	As a byproduct, parts of the AST that are no longer needed are actually
	freed.

	Handle null values/tokens when storing

	Detect association of values with impossible paths

2008-01-17  David Lutterkort  <dlutter@redhat.com>

	Make augtest set AUGEAS_ROOT and AUGEAS_SPECLIB before running augtool.
	augtest now copies test files into a separate subdirectory and points
	augtool to that as its root. It also points augtool to ../spec for the spec
	files.

	Add the spec provider.
	The provider should have been committed in 57:9e439a136787, but
	wasn't. Unfortunately, versions of prov_spec.c that would compile with that
	version have been lost. Therefore, builds between 57:9e439a136787 and this
	revision will fail.

	Emit a the current tree into a file
	Based on the AST, generate the file that lead to that AST. Changes to the
	config tree are mirrored by corresponding changes in the AST before it is
	written to disk.

	This is a first version that works for some restricted set of grammars, but
	needs a lot more testing.

	Compute tree handles for each match
	The handle of a match is a set of regular expressions that indicate which
	subtrees are generated by that match. Handles are computed based on the
	actions in the grammar and propagated.

	The handle of an action is a regular expression matching the path generated
	by that action.

	Build an explicit AST
	Instead of representing the parsed file by a simple list of tokens, build a
	fullblown AST for that file. The AST is actually not very abstract, and is
	directly the parse tree from parsing a file with a certain grammar.

	Split parsing and evaluating into to passes; references to fields
	are too hard to resolve with a partially constructed AST.

	Also adds a routine (ast_dot) to output the AST as a dot file; this eases
	debugging tremendously. augparse will now produce dot files when given '-P
	ast'

	Remove aug_token and any mention of it - that has been replaced by struct
	ast.

	Represent quantifiers in their own match nodes
	Instead of using a field in struct match for quantifiers '*', '+', '?',
	represent quantified expressions by their own struct match, with a matches
	field pointing to the quantified expression.

	This leads to a cleaner parser and makes constructing an explicit AST
	simpler.

	Prefer comments over kv

	Print first sets for every match
	Factor printing of a literal_set into print_literal_set and use it for
	printing both first and follow sets.

	Remove debug printing in augparse about loaded maps

2008-01-07  David Lutterkort  <dlutter@redhat.com>

	Free tokens entirely when freeing file

	Set action in all path components

2008-01-03  David Lutterkort  <dlutter@redhat.com>

	Provider that uses specs
	The spec provider is hooked into libaugeas and loaded. It reads spec files
	from /usr/share/augeas/spec and paths mentioned on AUGEAS_SPECLIB. Files
	are parsed according to the specs loaded, and values are written into the
	tree after parsing those files.

	Still missing is saving of the tree back to file, and in particular adding
	new entries in the tree to such files.

	Move hosts and inittab under /etc

	Always set the passed-in grammars and maps to NULL
	Without that, it's too easy to pass an invalid pointer in from random
	nonsense on the stack. And since we do not append to anything the user may
	pass in, setting to NULL is safe.

	Compile regexps for multiline matching

2008-01-02  David Lutterkort  <dlutter@redhat.com>

	Fix syntax error; we want to test that missing defaults are noticed

	Add filemappings to the language
	The map construct specifies a grammar and a list of glob patterns that this
	grammar should be applied to.

	Print the filename in errors about tokens (abbrevs)

	Add name to grammars

	Add -v switch for printing errors

	Two more test grammars

	Execute actions (not writing to tree yet)
	Actions are executed at the right points during the parse, and a stack of
	paths is maintained. References to values work with the exception of
	references to rules.

2007-12-21  David Lutterkort  <dlutter@redhat.com>

	Check grammar acceptance/rejection

	More precise syntax for where actions attach in a rule
	Previously, it was not clear how far into a rule the current path would be
	modified during parsing. This syntax defines some clear rules for that:
	  - if the rule applies to a parenthesized group (@n), the
	    path is in effect until the end of the group
	  - if the rule applies to a field (@$n), the new path is used during
	    parsing of that field
	  - the assignment part of the action is done after the field/group
	    has been parsed

	Snapshot before changing the syntax of rule actions

2007-12-20  David Lutterkort  <dlutter@redhat.com>

	Remove unused keyword and token 'default'

	Fix field number computation

	Two more rejection tests

	Add a simple test for rejecting bad grammars

	Don't try to dump a NULL grammar

	Introduce SUBMATCH_P macro; cleanup unnecessary switch statements.

	Statically number all matches in a rule. Check for illegal field refs.

	Collect unprocessed tokens in the parser state.

	Print quantifier after rule reference

	Remove unneeded debug print

	Produce tokens during parsing.
	Also, nicer printing of the tokens read.

	Stricter checking for ambiguous rules
	Check that all items in alternatives have non-overlapping first sets. Two
	sets are overlapping if they both contain an entry pointing to the same
	struct literal or if the contain entries where the literals have the same
	patterns (as strings)

	This still misses the case where literals have equivalent regular
	expresions (e.g. /[ab]/ in one and /[ba]/ in the other) but that seems very
	hard to determine.

	Print first/follow sets prettier, print control characters escaped with ~
	Literals from first/follow sets are now reduced back to the abbrev they
	belong to if that exists.

	Add options to control grammar printing

	Set match->owner for _all_ matches

	Two more sample/test grammars

	First step towards a specification for config files
	Definition of a simple language for describing the syntax of config files
	and how they are to be mapped to a tree. Lexer/parser for the language and
	data structures to hold the specification. Parses files defined by the
	grammar - processing of the parse is missing though.

2007-12-14  David Lutterkort  <dlutter@redhat.com>

	Factor aug_make_file into internal.c

2007-12-02  David Lutterkort  <dlutter@redhat.com>

	Be more verbose about which tests were run

	Do not include unused util.h

	Mention language bindings

	Added tag release-0.0.1 for changeset 69688020bb1b

	Some news

	Disribute tests and doc/examples.txt

	Some pseudo-code examples

	Explain yourself

2007-11-30  David Lutterkort  <dlutter@redhat.com>

	Add a test that shows how to change the initdefault

	Add help texts and a help command

	Add aug_match as a simple query facility

	Handle /etc/inittab

	Make the ROOT_DIR a constant instead of hardcoding it everywhere

	Test deleting everything from /etc/hosts

	Describe what a test description looks like

	Add a provider for /etc/hosts and reorganize how providers are loaded/saved a little

	aug_rec_save: Check input parameters

	Major overhaul of record parsing
	Use PCRE to split records with regexps, and abstract a major chunk of
	functionality out so it is independent of parsing pam config files

	Translate changes in the tree into changes in files (change/insert/delete
	of nodes are translated into changing fields and insert/delete of fields
	and records/lines)

	Root filesys that tests pass against

	Basic tests for record parsing

2007-11-26  David Lutterkort  <dlutter@redhat.com>

	Trim trailing slashes from paths

	Keep /system and /system/config around at all times

	Access aug_insert from the command line; do better error checking for aug_insert

	Autotools support for building

	Very simplistic key store with a public API in augeas.h
	The implementation is braindead and slow, but good enough to experiment
	with the actual difficulty for augeas: parsing and editing different config
	files

	augtool gives a basic mean to inspect the keystore from the command line

	Ignore some files
