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

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

	* 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-28  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-15  David Lutterkort  <dlutter@redhat.com>

	Shellvars: one more cornercase with double quoted strings

	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

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

	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.

	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-09  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

2008-07-17  David Lutterkort  <dlutter@redhat.com>

	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.

	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-03  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)

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

	Check for (some) allocation failures

	Reference count 'struct re' instances

	Split ref counting macros into separate header

	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.

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

	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.

	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-11  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.

	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-04  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.

	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

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

	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.

	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-02-29  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

	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.

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

	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.

	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-01  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
