2010-07-24  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs: Collect and dump timing information.

2010-07-24  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs: Honor LoggerVerbosity.Quiet .

2010-07-22  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs: Add support for parameter 'NoItemAndPropertyList'.

2010-07-22  Ankit Jain  <jankit@novell.com>

	* Project.cs: Add reserved properties MSBuildProjectFullPath
	and MSBuildProjectExtension .

2010-07-09  Ankit Jain  <jankit@novell.com>

	Correctly handle precedence of ToolsVersion value coming
	from various points.
	* BuildEngine.cs (BuildProjectFile): Restore project.ToolsVersion .
	* Engine.cs: Likewise. Also validate DefaultToolsVersion .
	* Project.cs: Handle invalid tools version specified in the project
	file, and fall back to engine's version.
	* MSBuild.cs: Fix the precedence order, and validate.
	* UnknownToolsVersionException.cs: New.

2010-06-23  Ankit Jain  <jankit@novell.com>

	* TargetBatchingImpl.cs (BuildTargetNeeded): Fix var names to
	correctly reflect what they track. Log messages when skipping
	or building a target.

2010-06-04  Ankit Jain  <jankit@novell.com>

	* Import.cs (EvaluateProjectPath): Add a hack to support multiple
	msbuild extension paths. Paths can be specified via the environment
	variable - $MSBuildExtensionsPath . ~/.config/xbuild/tasks is also
	checked for extensions, besides the default location.
	This explicitly looks for a "$(MSBuildExtensionsPath)" in the import
	expression and tries to replace that with possible paths, till it
	finds the file. In rest of the project, the property would resolve
	to its single default value.

2010-06-03  Ankit Jain  <jankit@novell.com>

	* Engine.cs (GetLoadedProject): Return null if project not found.
	Based on a patch by Dale Ragan <dale.ragan@sinesignal.com> .

2010-05-28  Ankit Jain  <jankit@novell.com>

	Fix bug #485841.
	* DirectoryScanner.cs (ProcessInclude): Set %(RecursiveDir) only if
	the '**' wildcard was found in the original Include.

2010-04-10  Ankit Jain  <jankit@novell.com>

	* Project.cs (InitializeProperties): Set MSBuildBinPath to the current
	tools path.

2010-04-10  Ankit Jain  <jankit@novell.com>

	* TaskEngine.cs (Prepare): Throw InvalidProjectFileException instead of a generic
	Exception.

2010-04-10  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs (EventsToString): If the target being executed is
	from an imported file, then show that.

2010-04-10  Ankit Jain  <jankit@novell.com>

	* Project.cs: Add property MSBuildExtensionsPath32, used by silverlight
	projects.

2010-04-07  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs: Dump items and properties when a project starts
	to build. Useful for debugging.
	* Engine.cs (LogProjectStarted): Set the properties and items also,
	for the project started event.
	* Project.cs (EvaluatedPropertiesAsDictionaryEntries): New.
	(EvaluatedItemsByNameAsDictionaryEntries): New. Required for
	ProjectStartedEvent .

2010-04-03  Ankit Jain  <jankit@novell.com>

	* BuildEngine.cs: Implement IBuildEngine2 instead of
	IBuildEngine.
	* BuildTasks.cs: Use the new extension methods for logging.
	(InitializeTask): Emit a message informing about the assembly
	from which the task is being loaded. Emit a useful debug message
	incase of a InvalidCastException.
	* Engine.cs: Add missing methods, constructors and properties related
	to ToolsVersion support. Setup a default set of Toolsets.
	Keep separate taskdbs' per ToolsVersion. The common tasks
	would come from different *.tasks file, and use different
	task assemblies.
	(DefaultToolsVersion): Correctly set this based on the profile.
	* LogExtensions.cs: New. Extension methods on Engine, for logging.
	* Project.cs: Add missing methods/contructors/properties related
	to ToolsVersion support. Add reserved properties -
	MSBuildToolsPath and MSBuildToolsVersion .
	* Toolset.cs: New.
	* ToolsetCollection.cs: New.
	* ToolsetDefinitionLocations.cs: New.

2010-03-04  Ankit Jain  <jankit@novell.com>

	* BuildEngine.cs (LogErrorEvent): Log as warning, if
	ContinueOnError==true, and log a corresponding message.
	* TargetBatchingImpl.cs: Refactor to share code between the
	batched and unbatched case. If a task fails and
	ContinueOnError==true, then ignore the failed state.

2010-02-19  Ankit Jain  <jankit@novell.com>

	* BuildItem.cs: Track api changes.
	(SetMetadata): Allow RecursiveDir to be set, this is set by
	DirectoryScanner.
	* DirectoryScanner.cs (ProcessInclude): Set RecursiveDir metadata.

2010-02-19  Ankit Jain  <jankit@novell.com>

	* Import.cs (Evaluate): Add param @ignoreMissingImports.
	* Project.cs (Load*): Add overloads with param @projectLoadSettings.
	(Log*): Mark internal.
	* ProjectLoadSettings.cs: New.

2010-02-04  Ankit Jain  <jankit@novell.com>

	Fix bug #576589.
	* ConditionFunctionExpression.cs (Exists): Check for directory also.

2009-12-22  Ankit Jain  <jankit@novell.com>

	Fix bug #565849.
	* DirectoryScanner.cs (Excludes): Change from string to ITaskItem[] .
	* BuildItem.cs: Track api changes.

2009-12-02  Ankit Jain  <jankit@novell.com>

	Fix bug #559990.
	* Engine.cs (UnloadAllProjects): Don't remove items from the collection
	being iterated over. Patch by Laurent Etiemble
	<laurent.etiemble@gmail.com>

2009-11-28  Ankit Jain  <jankit@novell.com>

	Fix bug #547753.
	* BatchingImplBase.cs (DumpBucket*): New. Useful for debugging.
	* Project.cs (Batch): New. Contains the perBatchItems and the
	commonItems for the batch.
	Use a stack of batches, instead of directly setting the current
	batch items.
	(PushBatch): New.
	(PopBatch): New.
	(SetBatchedItems): Make this private.
	(GlobalProperties.set): Re-evaluating the project is not required
	for this.
	* TargetBatchingImpl.cs: Use the new Push/PopBatch instead of directly
	setting the batches.
	* TaskBatchingImpl.cs: Likewise. Refactor slightly to PopBatch in
	finally block.
	* Target.cs (Build): Reset the current batch to nil before evaluating
	and building this target.

2009-11-28  Ankit Jain  <jankit@novell.com>

	* Project.cs (TryGetEvaluatedItemByNameBatched): Item could be
	available in either perBatchItemsByName or commonItemsByName
	or the evaluatedItemsByName collection. Allows the use of
	items which are not batched, but are consumed in case of batching.

2009-11-26  Ankit Jain  <jankit@novell.com>

	* TargetBatchingImpl.cs (BuildTargetNeeded): Expand metadata
	refs also, for Inputs and Outputs.

2009-10-13  Ankit Jain  <jankit@novell.com>

	* DirectoryScanner.cs:
	* ExpressionCollection.cs:
	* GroupingCollection.cs:
	* Project.cs:
	* Target.cs: Fix warnings.

2009-10-12  Ankit Jain  <jankit@novell.com>

	* Target.cs (TargetFile): New. Gives the name of the file
	containing the target definition.
	* BuildEngine.cs (.ctor): Add a 'taskfile' parameters, and
	return this for ProjectFileOfTaskNode.
	* BuildTask.cs (LogTaskStarted):
	(LogTaskFinished): Use parentTarget.ProjectFileOfTaskNode for
	the event.
	(InitializeTask): Set BuildEngine's task file to parent target's
	TargetFile.
	* Engine.cs (LogProjectStarted): Incase of default targets, set
	TargetNames to String.Empty .
	* TargetBatchingImpl.cs (LogTargetStarted):
	(LogTargetFinished): Use target.TargetFile for the event.

	* ConsoleLogger.cs: Keep a stack of project/target/task being
	executed. And corresponding list of errors and warnings.
	(EventsToString): Stringifies the current "stack", to be used
	as key to the table of errors/warnings and for show messages
	at the end of the build.

2009-10-12  Ankit Jain  <jankit@novell.com>

	* Project.cs (Load): Add argument checks.

2009-10-11  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs (no_colors): Rename to ..
	(use_colors): .. this. Fix the case when XBUILD_COLORS
	is not set.

2009-10-11  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs: Use ColorSetter and ColorResetter .
	Support 'XBUILD_COLORS' to set colors for errors, warnings,
	events and messages.

2009-10-10  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs (ProjectFinishedHandler): Once projectFailed
	becomes true, don't reset it. We are looking for "atleast one
	project failed".

2009-10-08  Ankit Jain  <jankit@novell.com>

	* DirectoryScanner.cs: Use Path.GetPathRoot, instead of
	directly using DirectoryInfo ("z:"), that doesn't return
	a dir info for "z:".

2009-10-08  Ankit Jain  <jankit@novell.com>

	* DirectoryScanner.cs: Handle absolute paths. Fix to work
	correctly on windows. Change order of adding paths to match
	msbuild, useful to have.

2009-10-08  Ankit Jain  <jankit@novell.com>

	* TaskBatchingImpl.cs (ParseTaskAttributes): Parse attributes
	of the 'Output' element also.
	* TaskEngine.cs (PublishOutput): Honor condition on 'Output' also.

2009-10-07  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs: Mark build as failed, if any project failed.

2009-10-06  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger: Improve error reporting. Don't count failed task,
	target or project as another error. Show "errors" after "warnings",
	more useful to the user.
	* Project.cs (BuildTarget): Log error instead of using CWL.

2009-10-03  Ankit Jain  <jankit@novell.com>

	* Project.cs (OS): New.
	(InitializeProperties): Set 'OS' as a pre-defined property, set to
	'Windows_NT', 'Unix' or 'OSX' depending on the platform.

2009-10-02  Ankit Jain  <jankit@novell.com>

	* Expression.cs (Parse): Don't change '/' to '\\', not required.

2009-10-01  Ankit Jain  <jankit@novell.com>

	* Project.cs (AddImport): Show the correct source file name, when
	the import is in the main project file.

2009-10-01  Ankit Jain  <jankit@novell.com>

	Fix bug #543299.
	* Import.cs (.ctor): Evaluate and set EvaluatedProjectPath to
	the full path of the imported project here itself, instead of ..
	(Evaluate): .. here.
	* ImportCollection.cs (Add): Use import.EvaluatedProjectPath .
	(Contains): New.
	* Project.cs (AddImport): Don't process if condition is false.
	Warn if a circular reference is detected, and ignore the import.

2009-09-29  Ankit Jain  <jankit@novell.com>

	* GroupingCollection.cs (Evaluate): Mark internal.
	* Project.cs (AddImport): Only evaluate the properties,
	till before the import.

2009-09-29  Ankit Jain  <jankit@novell.com>

	* Project.cs (DoLoad): Don't use XmlReader.Create, for loading
	the project xml, as returned Xml*Reader normalizes the newlines.
	Instead directly use the TextReader with XmlDocument.Load ().

2009-09-27  Ankit Jain  <jankit@novell.com>

	* ConditionParser.cs: Show the condition being parsed in the
	exception message.

2009-09-26  Ankit Jain  <jankit@novell.com>

	* Expression.cs: Allow '-' in item, property and metadata names.

2009-09-26  Ankit Jain  <jankit@novell.com>

	* Project.cs (Evaluate): Split into this and ..
	(PrepareForEvaluate): .. this.
	(AddImport): Evaluate the current set of properties/items etc,
	before processing the imported project. Honor the Condition
	for the Import.
	(ProcessProjectAttributes): Update MSBuildProjectDefaultTargets
	property.
	* GroupingCollection.cs (Evaluate): Don't evaluate Imports here.
	* BuildItemGroup.cs (Evaluate): Evaluate only once.
	* BuildPropertyGroup.cs (Evaluate): Evaluate only once.

2009-09-26  Ankit Jain  <jankit@novell.com>

	* Project.cs: Get InitialTargets from the imported projects also.
	The combined list of targets are executed, in the order they were
	found.
	DefaultTargets are also read in from imported projects, and the first
	non-empty DefaultTargets found is used.

2009-09-25  Ankit Jain  <jankit@novell.com>

	* Project.cs (BuildTarget): Handle skipped targets.

2009-09-25  Ankit Jain  <jankit@novell.com>

	* Project.cs (DoLoad): If a VS2003 project is detected, then throw
	InvalidProjectFileException with useful error.

2009-09-24  Ankit Jain  <jankit@novell.com>

	* Project.cs (Load): Emit the .sln.proj file only if env var
	XBUILD_EMIT_SOLUTION is set.

2009-09-24  Ankit Jain  <jankit@novell.com>

	* Project.cs (GetKeyForTarget): Make target name, case insensitive.

2009-09-24  Ankit Jain  <jankit@novell.com>

	* Project.cs (InitializeProperties): Set 'MSBuildProjectDefaultTargets'
	reserved property.

2009-09-10  Ankit Jain  <jankit@novell.com>

	* BuildItem.cs (Evaluate): Metadata from "Include" should be,
	preserved, so use ConvertTo ITaskItem, rather than string.
	Ensure that the new items have the metadata from references _in_
	Include, and the metadata of _this_ builditem.
	* DirectoryScanner.cs (Includes): Change to a array of ITaskItem.
	(MatchedFilenames): Rename to ..
	(MatchedItems): .. this, and change type of array of ITaskItem.
	Ensure that metadata of items in Includes are retained in the
	final matched items.

	* BuildItemGroup.cs (ConvertoToITaskItemArray): Add 'separator'
	param. If separator is present, then just return a "Join'ed"
	string as the single task item.
	* ItemReference.cs: Track api changes.

	* BuildProperty.cs (ConvertToITaskItemArray): Split the value,
	as we need separate task items.

2009-09-01  Ankit Jain  <jankit@novell.com>

	Fix bug #534965.
	* Project.cs (BuildTarget): Move caching of target outputs to ..
	* Target.cs: .. here. Move LogTargetSkipped also here.
	Ensure that caching happens for target dependencies also.

2009-09-01  Ankit Jain  <jankit@novell.com>

	* DirectoryScanner.cs (Scan): Ignore empty entries in includes and
	excludes.

2009-09-01  Ankit Jain  <jankit@novell.com>

	* Expression.cs (ParseOptions): New enum. Replace the bool params
	of exression.Parse with this. Add option to control expansion of
	metadata references.
	(CopyToExpressionCollection): Track api changes.
	
	Update all expr.Parse calls to use the new enum.
	* BuildItem.cs, BuildProperty.cs, BuildTask.cs, Import.cs,
	Target.cs, TargetBatchingImpl.cs, UsingTask.cs: Track api changes.

	* BatchingImplBase.cs: Track api changes. Allow metadata refs
	in task attributes.
	* ConditionFactorExpression.cs: Allow metadata refs in conditions.
	* ItemReference.cs: Allow metadata in transforms.
	* TaskEngine.cs: Allow metadata refs.

	* MetadataReference.cs (.ctor): Add a 'original string' param.

2009-08-29  Ankit Jain  <jankit@novell.com>

	* Expression.cs (ExpressionOptions): New.

	Introduce a ExpressionOptions argument to all ConvertTo*
	methods. Implement the rule: in evaluation phase, expand
	all items completely, but dont expand item refs in properties.
	At other times, expand the item refs in the properties.
	See comments in Expression.cs, for a full explanation.
	* BuildItem.cs: Track api changes.
	* BuildItemGroup.cs: Likewise.
	* BuildProperty.cs: Track api changes. Handle self-references.
	* BuildTask.cs: Track api changes.
	* IReference.cs: Add ExpressionOptions param.
	* ItemReference.cs: Track api changes.
	* PropertyReference.cs: Likewise.
	* MetadataReference.cs: Likewise.
	* ExpressionCollection.cs: Track api changes. Add support for
	converting all primitive types and DateTime, instead of a fixed
	few.
	* Project.cs (GetMetadataBatched): Use the evaluated metadata.
	* TaskBatchingImpl.cs: Handle the case when batching is required,
	but no items are available.

	* TaskEngine.cs: Throw on unsupported types. Correctly handle
	properties in case of empty values.

2009-08-26  Ankit Jain  <jankit@novell.com>

	* Expression.cs: Correctly handle a item reference with transform
	when allowItems is false. If item ref is ignored, then the transform
	will get incorrectly matched as a metadata ref.
	* ItemReference.cs (.ctor): Add a @original_string param.

2009-08-26  Ankit Jain  <jankit@novell.com>

	* Utilities.cs (UnescapeFromXml): New. From md.
	* BuildProperty.cs (.ctor): Unescape xml codes from the InnerXml
	of the property element.

2009-08-26  Ankit Jain  <jankit@novell.com>

	* BuildProperty.cs (ConvertToString): New.
	(ConvertoToITaskItemArray): New. Parse the property value.
	* PropertyReference.cs (ConvertToString): Use BuildProperty's
	ConvertToString.
	(ConvertoToITaskItemArray): Likewise.	

2009-08-21  Ankit Jain  <jankit@novell.com>

	* Engine.cs (EndProjectBuild): Use the @succeeded argument
	instead of hardcoding 'true'.
	* Target.cs (Build): Add an overload to return executeOnErrors
	value for the target executed. If building dependencies fails,
	and executeOnErrors is true, then execute OnError tasks.
	Add the new param to ..
	(BuildDependencies): this, ..
	(DoBuild): and this.
	(GetDependencies): Improve error message and variable name.
	(ExecuteOnErrors): Honor OnError tag's Condition also.
	* TaskBatchingImpl.cs (Run): Correctly set executeOnErrors param.

2009-08-20  Ankit Jain  <jankit@novell.com>

	Fix bug #532264
	* Project.cs (Load): Add support for loading .sln files.

2009-08-20  Ankit Jain  <jankit@novell.com>

	* BuildTask.cs (Execute): Use task_logger only after the task
	has been initialized. Catch and report task loading errors.
	* Target.cs (DoBuild): Dont rethrow the exception, and emit
	the stacktrace as a low importance message.

2009-08-18  Ankit Jain  <jankit@novell.com>

	* BatchingImplBase.cs: Make the item name lookups and metadata be case
	insensitive.
	* TaskDatabase.cs: Likewise.
	* TaskEngine.cs: Make property name looks, case insensitive.

2009-08-09  Miguel de Icaza  <miguel@novell.com>

	* ConsoleLogger.cs: Change the format of the error and warnings
	strings to work when invoked inside Emacs by not rendering the
	column if available, by using lowercase "error"/"warning" strings
	instead of camelcased versions and to not have unnecessary padding.

2009-07-31  Ankit Jain  <jankit@novell.com>

	* ConsoleLogger.cs: Keep track of all the errors and warnings
	and show them at the end.

2009-07-31  Ankit Jain  <jankit@novell.com>

	* Target.cs (Build): Log a message if a target is skipped.
	(LogMessage): New.
	* BuildTask.cs (Execute): Log error if task execution fails.

2009-07-30  Ankit Jain  <jankit@novell.com>

	* Engine.cs (.ctor): Set default BinPath. Currently this assumes
	v2.0, this will change when multi-targeting lands.

2009-07-30  Ankit Jain  <jankit@novell.com>

	* Project.cs (InitializeProperties) Set 'MSBuildProjectFile' and
	'MSBuildProjectName' properties.

2009-07-28  Ankit Jain  <jankit@novell.com>

	* TaskEngine.cs (Prepare): Fix formatting mistake.
	* ConsoleLogger.cs: Emit "-- FAILED" also when project/target building
	fails. Also, emit result of project at Normal verbosity level.

2009-07-23  Ankit Jain  <jankit@novell.com>

	Fix bug #511370.
	* Project.cs (ExtensionsPath): New.
	(InitializeProperties): Set "MSBuildExtensionsPath" property.

2009-06-12  Ankit Jain  <jankit@novell.com>

	Fix bug #512535.
	* ExpressionCollection.cs (ConvertToITaskItemArray): Whitespace around a
	itemref is allowed if the prev/next element is ";".

2009-06-12  Ankit Jain  <jankit@novell.com>

	* Utilities.cs (FromMSBuildPath): Return null if the path contains
	"drive:" only on windows.

2009-06-07  Ankit Jain  <jankit@novell.com>

	* Target.cs (Outputs): Use ITaskItem[] for conversion, to retain
	the metadata.

2009-05-29  Ankit Jain  <jankit@novell.com>

	Correctly handle global properties. Correctly log
	project/build events.

	* BuildPropertyGroup.cs (Clone): Implement.
	* Engine.cs (globalProperties): Rename to ..
	(global_properties): .. this.
	(currentlyBuildingProjectsStack): New. Used to correctly
	log and raise project/build start/finish events.
	(BuildProjectFile): Override any project global properties
	with explicitly specified ones, here in the param @globalProperties.
	Mark project for reevaluation, which will update the engine's
	global properties also.
	Reset both engine and project's old global properties at the end.
	(UnregisterAllLoggers): Log build finished only if we are currently
	building.
	(StartBuild): Rename to ..
	(StartProjectBuild): .. this. Keeps track of the projects being built
	in the new stack, and logs project and build events accordingly.
	(EndProjectBuild): New. Uses the stack to keep track of projects
	finishing builds, and raises project and build events accordingly.
	(LogProjectStarted): Move here from Project.cs
	(LogProjectFinished): Likewise.

	* Project.cs (Build): Log start of project build.
	Set current directory to the project file's dir, and reset at end.
	(BuildInternal): Don't log here, its done in Build.
	(BuildTarget): Already built targets are keyed by the set of global
	properties that they were built with.
	(GlobalPropertiesToString): New.
	(ResetBuildStatus): 'building' must be true to allow built targets to be reset.
	(RemoveBuiltTargets): Initialize builtTargetKeys in .ctor
	(Evaluate): Remove built targets only if we are currently building and
	build settings are None.
	Merge project's global properties with those of the parent engine.
	Add missing properties from engine's global properties.
	(LogTargetSkipped): Fix format string, add the reqd argument.

2009-05-29  Ankit Jain  <jankit@novell.com>

	* ConditionFunctionExpression.cs: Add 'HasTrailingSlash' function.
	(HasTrailingSlash): New.

2009-05-12  Ankit Jain  <jankit@novell.com>

	* Project.cs (.ctor): Init timeOfLastDirty.

2009-05-05  Miguel de Icaza  <miguel@novell.com>

	* Contribution from Martin Brenn to fix #498154.

2009-04-27  Ankit Jain  <jankit@novell.com>

	Fix bug #497839.
	* Engine.cs (BuildProjectFile): Set project's GlobalProperties to the
	one passed as argument.

2009-04-27  Ankit Jain  <jankit@novell.com>

	* TaskEngine.cs (Prepare): Emit a useful error message property value
	can't be converted to required type.

2009-04-27  Ankit Jain  <jankit@novell.com>

	* ExpressionCollection.cs (ConvertToObject): Allow true/on/yes
	as valid true values for bool, and corresponding for false.

2009-03-27  Jonathan Chambers  <joncham@gmail.com>

	* BuildWhen.cs: Add basic implementation.
	* BuildChoose.cs: Add basic implementation.
	* BuildItem.cs (AddEvaluatedItem): Add BuiltItem to 
	EvaluatedItemsIgnoringCondition.
	* GroupingCollection.cs: Add evaluation of BuildChoose items.

2009-03-26  Jonathan Chambers  <joncham@gmail.com>

	* TaskDatabase.cs (RegisterTask): Search for class by name
	if task was not found using GetType (which uses namespace). 

2009-02-26  Ankit Jain  <jankit@novell.com>

	* Target.cs: Handle target with no tasks. Log errors.

2009-02-24  Ankit Jain  <jankit@novell.com>

	Lazily load UsingTask tasks.
	* UsingTask.cs (Evaluate): Register 'this' with task database,
	but don't load it yet. Register only if condition evaluates to true.
	Move the load logic to ..
	(Load): .. here. Register with the specified task database.
	* TaskDatabase.cs (RegisterUsingTask): Store the UsingTask instance
	in a table keyed by task name, but don't load it yet.
	(GetTypeFromClassName): Try to load UsingTask if task is not already
	loaded. Move loading logic to ..
	(GetTypeFromClassNameInternal): .. here.
	(CopyTasks): Copy the usingTasks table also.

2009-02-23  Ankit Jain  <jankit@novell.com>

	* BuildItem.cs (AddMetadata): Allow overwriting older values.

2009-02-22  Ankit Jain  <jankit@novell.com>

	* BuildItem.cs: Iterate over XmlElements childnodes with XmlNode
	instead of XmlElement. Eg. XmlComment

2009-02-21  Ankit Jain  <jankit@novell.com>

	* Utilities.cs (FromMSBuildPath): Copy from monodevelop.
	* Project.cs (Load): Use FromMSBuildPath on the path.
	(InitializeProperties): Set "MSBuildToolsPath" also.

2009-02-20  Ankit Jain  <jankit@novell.com>

	Fix #449683.
	* ConditionTokenizer.cs: Handle unquoted item references (with or w/o
	transforms) in conditions.
	* ConditionParser.cs: Parse unquoted item, property references.
	eg. Condition = " @(Foo->'%(Extension)') == '.exe' "
	* Token.cs (Token.ToString): Override.
	(TokenType.Transform): Uncomment.

2009-02-12  Jonathan Chambers  <joncham@gmail.com>

	* BuildProperty.cs: Value corresponds to XmlElement.InnerXml
	no XmlElement.InnerText. This allows properties to be additional 
	xml elements.

2009-02-01  Ankit Jain  <jankit@novell.com>

	* BuildEngine.cs (BuildProjectFile): Use
	BuildSettings.DoNotResetPreviouslyBuiltTargets for building projects.
	* Engine.cs (BuiltTargetsOutputByName): New. Table of targets already
	built. Move logging of project start/finish to ..
	* Project.cs: .. here. Build a target only if hasn't been built already.
	Keep track of target outputs, and return those even if an already built
	target has been invoked again.
	Honor BuildSettings.None and DoNotResetPreviouslyBuiltTargets .

2009-01-31  Ankit Jain  <jankit@novell.com>

	* BatchingImpl.cs: Split into ..
	* BatchingImplBase.cs: .. this,
	* TaskBatchingImpl.cs: .. this ..
	* TargetBatchingImpl.cs: .. and this. Implement target batching here.

	* Target.cs (DoBuild): Use TargetBatchingImpl for building.
	(Log*): Move to TargetBatchingImpl .
	(BuildTasks): New.
	(Engine): New.

2009-01-30  Ankit Jain  <jankit@novell.com>

	* TaskEngine.cs (GetObjectFromString): Empty value is allowed only for
	arrays.

2009-01-29  Ankit Jain  <jankit@novell.com>

	* BuildItem.cs (child_items): Change type from BuildItemGroup to
	List<BuildItem>.
	(HasParent): Rename to ..
	(HasParentItem): .. this.
	(ParentItemGroup): Add setter.

	* BuildItemGroup.cs (.ctor): Add overload with @project param.
	(AddNewItem):
	(AddItem): Correctly set the ParentItemGroup for new build items.
	(ParentProject): Add setter.
	* Project.cs: Set the project for new BuildItemGroup instances.
	* TaskEngine.cs (PublishItemGroup): Likewise.

2009-01-06  Ankit Jain  <jankit@novell.com>

	* Project.cs (Build): Honor InitialTargets list.

2009-01-06  Ankit Jain  <jankit@novell.com>

	* BuildEngine.cs (BuildProjectFile): Use AddProperty method to specify
	the property type also.
	* MSBuild.cs (Execute): Parse 'Properties' task param to set global
	properties.

2009-01-06  Ankit Jain  <jankit@novell.com>

	* Project.cs (Build): Correctly handle null targetNames argument.

2009-01-06  Ankit Jain  <jankit@novell.com>

	* Engine.cs (LogProjectStarted): Add a null check.

2009-01-01  Ankit Jain  <jankit@novell.com>

	* IReference.cs: New. Interface for Item/Metadata/PropertyReference.
	* ChangeType (ToBuildItemGroup): Add 'split' param.
	Track api changes.
	* Expression.cs (Parse): Add a new overload with a 'split' param.
	* ExpressionCollection.cs (Add): Add new overload for IReference,
	remove the ones for Item/Metadata/PropertyReference.
	(ConvertToArray): Implement correctly.
	(ConvertToString): Track api changes.
	(ConvertToITaskItem): Implement with ConvertToITaskItemArray.
	(ConvertToITaskItemArray): Implement support for concat'ing expressions.
	(AddItemsToArray): New.
	(ConvertToITaskItemArrayFromString): Refactor a bit.
	(ThrowCantConcatError): New.
	* ItemReference.cs: Update.
	* MetadataReference.cs: Update.
	* PropertyReference.cs (ConvertToITaskItemArray): Implement.
	(GetValue): New.
	* BuildPropertyGroup.cs: Track api changes.
	* TaskEngine.cs (PublishOutput): Improve exception message.
	* Project.cs (DoLoad): Improve exception message. Add a null check.

2008-12-30  Ankit Jain  <jankit@novell.com>

	* MetadataReference.cs (BuildItemGroupToITaskItems): Return unique
	metadata values for unqualified references.
	(BuildItemGroupToITaskItemArray): Rename to ..
	(BuildItemGroupToITaskItems): .. this.
	(HasTaskItem): New.

2008-12-18  Ankit Jain  <jankit@novell.com>

	* BuildTask.cs (Execute): PublishOutput only if task runs successfully.

2008-12-17  Ankit Jain  <jankit@novell.com>

	* MetadataReference.cs (ConvertToITaskItemArray): In case of batching,
	only one instance of unique metadata value is required.

2008-11-22  Ankit Jain  <jankit@novell.com>

	* ExpressionCollection.cs (ConvertToITaskItemArray): Add support for
	MetadataReference.
	* MetadataReference.cs (ConvertToITaskItemArray): New.
	* Project.cs (GetAllItemGroups): New.

2008-11-21  Ankit Jain  <jankit@novell.com>

	* BatchingImpl.cs: Add task batching implementation.
	* BuildItem.cs (GetEvaluatedMetadata): Handle built-in metadata names.
	* ExpressionCollection.cs (Count): New.
	(ConvertToString): Handle MetadataReference.
	* ItemReference.cs (ConvertToString):
	(ConvertToITaskItemArray): Use the batching api.
	(ToString): New.
	* MetadataReference.cs (ConvertToString): New.
	(ToString): New.
	* Project.cs: Add api for accessing batched items and metadata.
	* TaskEngine.cs (PublishItemGroup): Don't clear existing values from
	item group.

2008-10-01  Ankit Jain  <jankit@novell.com>

	* BuildEngine.cs (.ctor): Replace 'projectFile' param with 'project'.
	(BuildProjectFile): If filename is null (project.LoadXml) then use
	engine.BuildProject
	* BuildTask.cs (InitializeTask): Track api change.
	* Expression.cs (Parse): Skip empty entries in the expression.

2008-09-24  Ankit Jain  <jankit@novell.com>

	* Engine.cs: Add argument checks.
	* Project.cs: Likewise.

2007-03-06  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Project.cs (Build): Add outputs to targetOutputs.

2007-03-06  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ExpressionCollection.cs (ConvertToArray): Simplify.

2007-03-05  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskEngine.cs, ChangeType.cs: Moved Collect* to ChangeType and
	simplified. It still needs tests and refactoring.

2007-02-22  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildEngine.cs (BuildProjectFile): Don't crash on null
	globalProperties.

	* Target.cs: Add Outputs property.

2007-02-20  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs (Build): Split to GetDependencies () and BuildDependencies
	(). Support condition.
	
	* BatchingImpl.cs (BatchBuildTask): Simplify.

2007-02-18  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ExpressionCollection.cs (ConvertToITaskItemArrayFromString):
	Simplified.

	* ConditionFunctionExpression.cs: Removed warnings.

	* BuildTask.cs (Execute): Write exceptions to std err (they should be
	logged but it's better than swallowing).

2007-02-03  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ConditionTokenizer.cs: Add Putback ().

	* ConditionParser.cs: Add parsing of functions.

	* ConditionFunctionExpression.cs: Add.

2007-02-03  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildPropertyGroup (SetProperty): Throw an exception when trying to
	set property in persisted property group.

2007-01-29  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildTask.cs (Execute): Log errors that happen when invoking ITask
	.ctor.

	* ConsoleLogger.cs (TargetFinishedHandler)
	(TaskFinishedHandler): Increment error count.

2007-01-28  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItem.cs (RemoveMetadata): Remove from XML.
	(SetMetadata): Trigger project reevaluation.

2007-01-26  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildPropertyGroup.cs (SetProperty): Made it work with persisted
	properties.

2007-01-23  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildTask.cs, ConditionFactorExpression.cs, Target.cs,
	TaskEngine.cs, UsingTask.cs, ItemReference.cs, BuildItem.cs,
	BatchingImpl.cs, BuildProperty.cs: Track API changes.

	* Expression.cs (Parse): Added allowItems parameter and made regexes
	static.

	* Import.cs (Evaluate): Moved hack from tools/xbuild/Makefile here. It
	will try to import a.ext when given a.EXT.

2007-01-21  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItemGroup.cs: Store information saying what is the last item
	group that contains build item name.

	* Project.cs (Build): Pass empty array (build default targets).

2007-01-19  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Token.cs: Commented Transform and LiteralSubExpression and added
	FunctionName token.

	* ConditionParser.cs: Removed redundant casts, rewrote
	ParseFactorExpression () and added parsing of '!'.

	* ConditionTokenizer.cs: Always skip whitespaces when getting next
	token (no IgnoreWhiteSpace property). Don't create a token from '->'.
	Moved ReadChar () in front of all ifs.

2007-01-16  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItem.cs (SetMetadata): Escape when we get virtual item or item
	from XML. (not to escape items that have parents twice).

2007-01-16  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItemGroup.cs (AddNewItem): Add XML and mark project as dirty.
	(Project): Renamed to ParentProject.

	* BuildItem.cs (ctor)
	(CopyCustomMetadata): Add null check.

	* BuildPropertyGroup.cs (AddNewProperty): Reorganized.
	(RemoveProperty): Added null check.

	* TargetCollection.cs (RemoveTarget): Added null check.

	* Engine.cs (UnloadProject): Added null check.

	* GroupingCollection.cs (Remove): Check if removed group belongs to
	current project.

	* Project.cs (AddNewItem): Implemented.
	(RemoveItem): Reorganized.
	(SetProjectExtensions): Added null check.

2007-01-14  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItemGroup.cs (Detach): Added.
	(RemoveItem)
	(RemoveItemAt): Used Detach ().

	* BuildItem.cs: Made FromXml and HasParent internal and added
	ParentItem and ParentItemGroup properties (internal).
	(Detach): Added.

	* GroupingCollection.cs (Remove): Used Detach ().

	* Project.cs (ctor): Added PreserveWhitespace = false to get formatted
	text on Save ().
	(GetEvaluatedItemsByNameIgnoringCondition)
	(GetEvaluatedItemsByName)
	(GetEvaluatedProperty): Reevaluate if needed.
	(RemoveItem)
	(RemoveAllItemGroups)
	(RemoveAllPropertyGroups): Implemented.
	(DoLoad): Added closing of TextReader.

2007-01-12  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildPropertyGroup.cs: Don't trigger reevaluation just after a
	change but just mark that it needs it.

	* Project.cs: Reevaluate when it needs reevaluation and one of
	Evaluated* properties is used.

2007-01-12  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs: Throw an exception when <OnError> is not last element in
	target.

	* BuildPropertyGroup.cs (RemoveProperty): Remove from XML.

	* TargetCollection.cs: If a target is already there replace it with
	new target.

	* BuildProperty.cs: Added XmlElement property.

2007-01-12  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ImportCollection.cs: Don't add imports that are already added.

	* BuildItemGroup.cs: MonoTODOs.

	* ConditionParser.cs (ParseAndEvaluate): Throw an exception when
	condition can't be evaluated to bool.

	* BuildPropertyGroup.cs (Evaluate): Simplify.

2007-01-10  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildWhen.cs: Moved BindToXml () code to ctor.

	* BuildItemGroup.cs, BuildPropertyGroup.cs: Added XmlElement internal
	property needed for removing groups.

	* Engine.cs: Added StartBuild () that logs build start when Build ()
	was first called.

	* GroupingCollection.cs: Added Remove () for item and property groups.

	* Project.cs (AddNewImport): Implemented.
	(AddNewItemGroup): Implemented.
	(AddNewPropertyGroup): Implemented.
	(AddNewUsingTaskFromAssemblyFile): Implemented.
	(AddNewUsingTaskFromAssemblyName): Implemented.
	(RemoveItemGroup): Implemented.
	(RemovePropertyGroup): Implemented.

2007-01-10  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItemGroup.cs (Clear): Remove from XML.

	* BuildPropertyGroup.cs (AddNewProperty): Use right namespace and add
	to Project.EvaluatedProperties.
	(Clear): Remove from XML.

2007-01-09  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Project.cs (InitializeProperties): Added $(MSBuildProjectDirectory)
	reserved property.

2007-01-08  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* GroupingCollection.cs: Use 2 iterators: add_iterator that is used by
	Add () calls when processing a project from Import and
	evaluate_iterator for evaluation.

2007-01-08  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Import.cs (GetFullPath): Avoid exceptions from Path.GetDirectoryName
	and prepend relative directory of importing project to full path of
	imported project.

2007-01-08  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildWhen.cs, BuildPropertyGroupCollection.cs,
	BuildItemGroupCollection.cs, Project.cs: Track API changes.

	* GroupingCollection.cs: Now it needs Project reference so added it.

	* BuildTask.cs: Formatting.

	* InvalidProjectFileException.cs: Use MS' names in GetObjectData ().

	* ConditionParser.cs (ParseAndEvaluate): Added.

	* BuildItem.cs: Changed exception message.

2007-01-02  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildWhen.cs, BuildPropertyGroupCollection.cs,
	BuildItemGroupCollection.cs, Project.cs, GroupingCollection.cs:
	GroupingCollection doesn't need Project reference.

	* BuildTask.cs, Target.cs, TaskEngine.cs, BatchingImpl.cs: Formatting

	* BuildItemGroup.cs: Added new readOnly parameter to ctor.
	(Project.EvaluatedItems is a read only item group.)
	(ReplaceWith): Added.

	* BuildPropertyGroup.cs (IsGlobal): Added. Setting a property in
	global property group causes reevaluation of its project.

	* Project.cs: ProcessXml () is internal and can be "safely" invoked by
	other classes.

	* OldExpression.cs: Removed.

	* BuildProperty.cs (Evaluate): Simplified.

	* ChangeType.cs (TemporaryTransform): Simplified.

	* BuildItem.cs: There are now 3 types of build items: from XML, having
	parent from XML, virtual. Added SplitParentItem ().

2006-12-20  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Utilities.cs: Added Unescape ().

	* BuildItemGroup.cs, BuildItem.cs: Pass null project to
	BuildItem.Evaluate () to "evaluate" virtual items added to virtual item
	groups (at the moment just unescape).

	* Expression.cs (CopyToExpressionList): Unescape strings.

2006-12-19  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs (ctor): Added ImportedProject argument and removed
	set_IsImported.
	(AddNewTask): Implemented.

	* TargetCollection.cs (AddNewTarget): Implemented.

	* Project.cs: Track API changes.

2006-12-19  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs (Build): Don't throw anything in case of error, just
	return false.

	* BuildItemGroup.cs (set_Condition): Throw an exception if group is
	not from XML.

	* BuildItem.cs: More meaningfull messages in RemoveMetadata () and
	SetMetadata ().

	* BuildProperty.cs (ToString): Throw an exception if property is not
	from XML.
	(op_Explicit): Added a null check.

	* Engine.cs: Better error message.

	* BuildItemGroupCollection.cs (CopyTo): Changed ArgumentException to
	IndexOutOfRangeException.

	* Project.cs (DoLoad, Load): Move try/catch to DoLoad ().
	(MarkProjectAsDirty): Set time.

2006-12-18  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItemGroup.cs (Clone): Throw exception.

	* Project.cs (Load): Throw InvalidProjectFileException if anything
	goes wrong.

2006-12-16  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ItemReference.cs: Avoid KeyNotFoundException in ConvertToString ()
	and ConvertToITaskItemArray ().

2006-12-16  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ItemPropertyGroupingBase.cs, TaskEngineAssemblyResolver.cs: Removed
	classes that were public in Beta 2 and aren't used.

	* Expression.cs: Added replacement for parsing expressions char by
	char. It uses regexes to find item/property/metadata references in
	given text.

	* ExpressionCollection.cs, BuildTask.cs, ConditionFactorExpression.cs,
	Target.cs, TaskEngine.cs, BuildItemGroup.cs, UsingTask.cs, Import.cs,
	BuildItem.cs, BatchingImpl.cs, BuildProperty.cs: Track API changes.

	* ConditionRelationalExpression.cs: Formatting.

	* OldExpression.cs: Commented everything.

	* MetadataReference.cs, ItemReference.cs, PropertyReference.cs: Moved
	parsing to Expression.

	* BuildItem.cs: Check if project is from XML in set_Condition and
	set_Exclude.

	* BuildPropertyGroup.cs, Project.cs: Add ImportedProject to
	Project.ctor.

	* ConditionNotExpression.cs, ConditionAndExpression.cs: Check if we
	can evaluate expression in CanEvaluateToBool ().

2006-12-12  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItemGroup.cs (ctor): Add reference to ImportedProject from
	which item group is imported.

	* BuildItem.cs, Project.cs: Use new BuildItemGroup.ctor ().

2006-12-11  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildWhen.cs, BuildPropertyGroupCollection.cs,
	BuildItemGroupCollection.cs: Little changes related to
	GroupingCollection.

	* ImportCollection.cs: Use GroupingCollection not an internal list.

	* Import.cs (Evaluate): Split to functions and check if
	EvaluatedProjectPath is empty.

	* GroupingCollection.cs, Project.cs: Move evaluation to
	GroupingCollection. Change algorithm to use 2 passes: first for property
	groups and imports and second for item groups.

2006-12-11  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskEngine.cs, ItemReference.cs: Use IDictionary <string,
	BuildItemGroup> not IDictionary.

	* BuildItemGroup.cs, BuildItem.cs: Evaluate even if condition was
	evaluated to false because we want to add every item to
	Project.EvaluatedItemsByNameIgnoringCondition.

	* Project.cs (Build): Don't throw an exception just return false.
	(GetEvaluatedProperty): Avoid NullReferenceException.
	(SetProjectExtensions): Implemented.

2006-12-08  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskElement.cs, Xml.cs, ProcessingPass.cs: Removed.

	* Utilities.cs, HostLogger.cs, Target.cs, TaskDatabase.cs,
	BuildItemGroup.cs, BuildPropertyGroup.cs, TargetCollection.cs,
	Engine.cs, GroupingCollection.cs, Project.cs: Reformatted.
	
	* ImportCollection.cs: Added a note.

2006-12-07  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildTask.cs: Implemented AddOutputItem () and AddOutputProperty ().

	* UsingTaskCollection.cs: Removed [MonoTODO] and used CopyTo in CopyTo
	(UsingTask[] array, int index)

	* TaskEngine.cs: Reformatted PublishOutput () and added copying of
	items to Project.EvaluatedItems in PublishItemGroup ();

	* BuildItemGroup.cs: Added [MonoTODO].

	* UsingTask.cs: Used expression for AssemblyFile to get around
	problems with '\' and '/'.

	* BuildItem.cs (ctor): Added null checks.
	(GetMetadata): Return unevaluatedMetadata not evaluatedMetadata.
	(SetMetadata): Don't escape evaluatedMetadata and escape
	unevaluatedMetadata only when treatPropertyValueAsLiteral.

	* BuildPropertyGroup.cs (GetEnumerator, Evaluate, RemoveProperty): Use
	FromXml () instead of null checks.
	(SetProperty): Escape propertyValue when it is literal.

	* BuildProperty.cs: Changed exception message.

	* Project.cs: Added XmlNamespaceManager and XmlNamespace internal
	properties.
	(GetProjectExtensions): Implemented.

2006-12-05  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildTask.cs: Remove [MonoTODO], add exception throwing in
	GetParameterValue (), use expressions in ContinueOnError.
	* ConditionFactorException.cs: Throw InvalidProjectFileException ()
	instead of InvalidOperationException ().
	* ImportCollection.cs: Implement CopyTo ().
	* Target.cs: Remove redundant variables (XmlAttributes), return
	String.Empty in DependsOnTargets, add a null check in RemoveTask ().
	* BuildItemGroup.cs, BuildPropertyGroup.cs: Remove [MonoTODO].
	* Import.cs: Throw an exception when file does not exist.
	* Target.cs: Use StringComparer.InvariantCultureIgnoreCase.
	* ConditionTokenizer.cs: Treat '-' as beginning of a number. We'll
	need to treat item as a token probably

2006-12-04  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Import.cs: Check for project.FullFileName (Path.DirectoryName would
	throw an exception).
	* BuildItemGroupCollection.cs: Changed exception types.

2006-10-14  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Engine.cs: Removed redundant cast.
	* BuildWhen.cs:
	* UsingTaskCollection.cs:
	* ImportCollection:
	* BuildChoose.cs:
	* BuildItem.cs:
	* TargetCollection.cs: Comment unused variable.
	* ConditionTokenizer.cs: Simplified checking if current token is a
	keyword.
	* Target.cs: Removed old code.

2006-10-08  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs: Changed "" to String.Empty.
	* TaskEngine.cs: Don't try to convert a parameter to specific type if
	string was evaluated to String.Empty.
	* InternalLoggerException.cs:
	* InvalidProjectFileException.cs: Added LinkDemand before
	GetObjectData ().
	* ConsoleLogger.cs: Changed "" to String.Empty.
	* TargetCollection.cs: Fixed GetEnumerator () (stupid bug introduced
	with change to generics).
	* Project.cs: Made Build () throw more meaningful exception.

2006-10-06  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs: Reformatted.
	* TaskEngine.cs: Removed redundant code.
	* BuildPropertyGroup.cs: Fixed Clear () and AddNewProperty ().
	* Engine.cs: Made BuildProjectFile () load project file if it's not
	loaded yet.

2006-09-21  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ConditionRelationalExpression.cs: Change comparers to case
	insensitive.
	* ImportCollection.cs: Add NotImplementedExceptions.
	* BuildPropertyGroup.cs: Reformatted a bit.
	* BuildProperty.cs: The same.
	* Project.cs: Moved evaluation of imports before evaluation of
	properties. This may "work" until importing projects is redesigned but
	probably isn't correct.

2006-09-20  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildPropertyGroup.cs: Check for XmlNodes that aren't XmlElements
	(like comments)
	* BuildItemGroup.cs: Change return to continue.

2006-09-20  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ConditionParser.cs: Copyright note.
	* ExpressionCollection.cs: Fixed arrays passing.

2006-08-06  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildTask.cs, UsingTaskCollection.cs, ImportCollection.cs,
	Target.cs, TaskDatabase.cs, TaskEngine.cs, BuildItemGroup.cs,
	BuildChoose.cs, DirectoryScanner.cs, BuildPropertyGroup.cs,
	TargetCollection.cs, Engine.cs, Project.cs: Started to use generics.

2006-06-25  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Token.cs: Changed names: removed "than".
	* ConditionRelationalExpression.cs: Added.
	* ConditionFactorExpression.cs: Added.
	* BuildItemGroup.cs: Changed Condition property return value to return
	String.Empty instead of null.
	* ConditionParser.cs: Added support for parsing relational expressions
	and factors.
	* ConditionExpression.cs: Removed Evaluate (). Added 2 sets of
	abstract functions: BoolEvaluate (), NumberEvaluate () and StringEvaluate ()
	and CanEvaluateToBool (), CanEvaluateToNumber () and
	CanEvaluateToString ().
	* ConditionOrExpression.cs, ConditionAndExpression.cs: Changed
	appropriately to ConditionExpression base class.
	* ConditionTokenizer.cs: Added null check and changed names in enums:
	removed "than".
	* ConditionNotExpression.cs: Added.
	* BatchingImpl.cs: Changed to use BoolEvaluate ().
	* Project.cs: Added checks for condition.

2006-06-22  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ConditionalTokenizer.cs, ConditionalExpression.cs,
	ConditionalParser.cs: Changed name,
	removed -al.
	* ConditionExpression.cs: Added Evaluate ().
	* ConditionOrExpression.cs, ConditionAndExpression.cs: Added.
	* BatchingImpl.cs: Added check if task should be executed.

2006-06-14  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* UsingTask.cs: Changed properties to return null on empty attribute.
	* UsingTaskCollection.cs: Added object to SyncRoot.
	* BuildPropertyGroup.cs: Added NotImplementedException throwing.

2006-06-02  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItem.cs, BuildProperty.cs, BuildPropertyGroup.cs,
	BuildPropertyGroupCollection.cs: Fixed to match the tests.

2006-05-27  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Utilities.cs: Implemented Escape ().
	* BuildItem.cs: Added null checks.
	* BuildPropertyGroup.cs, BuildProperty.cs: Moved FromXml property.
	* Project.cs: Commented out redundant Evaluate ().
	* BuildChoose.cs: Minor changes.

2006-05-22  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Token: Added new few missing tokens.
	* Target.cs, Project.cs: Patch from Matthew Metnesky.
	* BuildItemGroup.cs, OldExpression.cs, MetadataReference.cs,
	ItemReference.cs, PropertyReference.cs, ConditionalTokenizer.cs,
	ConditionalParser.cs, Tokenizer.cs, LiteralExpression.cs,
	LiteralTokenizer.cs:
	Removed literal expression parsing based on tokenizer and
	parser. It needs to be done by regex.
	
	Moved tokenizer to ConditionalTokenizer.cs.

2006-05-05  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ExpressionCollection.cs, BuildItemGroup.cs, BuildItem.cs,
	ItemReference.cs, PropertyReference.cs: Changed name of *Reference
	methods converting reference to string from ToString () to
	ConvertToString () to avoid mistakes like using ToString () provided
	by default.

2006-05-03  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs, TaskEngine.cs, BuildItemGroup.cs, MetadataReference.cs,
	Import.cs, ItemReference.cs, BuildItem.cs, BatchingImpl.cs,
	PropertyReference.cs, BuildProperty.cs: Changed Expression to
	OldExpression and changed To* functions to one ConvertTo ().
	* TaskEngine.cs: Fixed PublishOutput ().
	* OldExpression.cs: Added. It will be temporarily used before
	LiteralExpression will be written using Tokenizer.
	* Tokenizer.cs, Token.cs, ExpressionCollection.cs,
	ExpressionParseException.cs, LiteralExpression.cs: Added.

2006-04-24  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* ImportedProject.cs: Removed warning.
	* Engine.cs, Project.cs, TaskDatabase.cs: Added registration of
	default tasks.

2006-04-24  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Project.cs: Removed unnecessary variable.
	* Engine.cs: Added fixme.

2006-04-14  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItem.cs: Moved checking if metadata name is reserved to internal
	class (Mono.XBuild.Utilities.ReservedNameUtils).
		
2006-04-14  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildTask.cs: Removed unnecessary variable.
	* Engine.cs: Added logging of the build start.
	* Project.cs: Removed unnecessary variable.

2006-04-07  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* GlobalEngineAccessor.cs, ProjectFileEncoding.cs: Removed.

2006-03-29  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildItem.cs, BuildItemGroup.cs: Coding style fixes.

2006-03-29  Crestez Leonard  <cdleonard@gmail.com>
	
	* BuildItem.cs: Fix typo?

2006-03-29  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* InternalLoggerException.cs, InvalidProjectFileException.cs,
	Engine.cs, Project.cs: Coding style fixes.

2006-03-29  Crestez Leonard  <cdleonard@gmail.com>
	
	* BuildItem.cs, BuildItemGroup.cs: Cleaned up build items.

2006-03-29  Crestez Leonard  <cdleonard@gmail.com>
	
	* InternalLoggerException.cs, InvalidProjectFileException.cs: Fixed
	to pass tests. Wrote serialization constructor.
	* Engine.cs, Project.cs: Global engine and project unloading, test and
	formatting fixes.

2006-03-28  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* UsingTask.cs: Formatting changes.

2006-03-27  Crestez Leonard  <cdleonard@gmail.com>

	* ImportCollection.cs, UsingTaskCollection.cs: Cleaned up, switched
	to lists instead of hashtables.
	* Import.cs: Cleaned up, moved importing from Project.cs
	* BuildProperty.cs, BuildPropertyGroup.cs: Minor fixes.
	* Engine.cs: Cleaned up properties.
	* Project.cs: Moved importing to Import.cs, cleaned up properties,
	Separated evaluation and loading.
	
2006-03-21  Crestez Leonard  <cdleonard@gmail.com>

	* Target.cs, TaskEngine.cs, BuildItemGroup.cs, BuildItem.cs,
	BuildPropertyGroup.cs, TargetCollection.cs, BuildProperty.cs,
	Engine.cs, Project.cs, BuildTask.cs, UsingTask.cs: Separate xml
	binding and evaluation, merge xml binding in constructors.
	* DirectoryScanner.cs: Includes CAN be empty.
	* BuildChoose.cs, ItemReference.cs, ChangeType.cs: Newline at EOF.
	* ConsoleLogger.cs: Fix compilation warning.

2006-03-19  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildPropertyGroup.cs, Expression.cs: Coding style fixed.

2006-03-18  Marek Sieradzki  <marek.sieradzki@gmail.com> 

	* Engine.cs: API cleanup.

2006-03-18  Crestez Leonard  <cdleonard@gmail.com>

	* Project.cs: Cleaned up add.
	* Expression.cs: Hacked to transform \ and / to path separators.
	* BuildPropertyGroup.cs: Small cleanup.
	* BuildTask.cs, TaskEngine.cs: Fix TaskEngine not getting a Project
	reference.
	
2006-03-11  Marek Sieradzki  <marek.sieradzki@gmail.com> 

	* BatchingImpl.cs: Updated with BuildTask instead of TaskElement.
	* BuildItem.cs: Updated for new API and fixed crashing on non-existent
	files.
	* BuildItemGroup.cs, BuildItemGroupCollection.cs, BuildProperty.cs,
	BuildPropertyGroup.cs, BuildPropertyGroupCollection.cs, ConsoleLogger.cs,
	Engine.cs, Project.cs, Target.cs, TargetCollection.cs: Updated for new
	API.
	* DirectoryScanner.cs: Fixed ordering and crashing on duplicated items.
	* TaskElement.cs: Temporarily removed.
	* Xml.cs: Changed to static.

2006-02-26  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* IBuildProperty.cs, ICultureStringUtilities.cs, IProject.cs,
	IGlobalEngineAccessor.cs, ITaskElement.cs, IBuildPropertyGroup.cs,
	ITargetCollection.cs, IEngine.cs, IBuildItemGroupCollection.cs,
	IHostLogger.cs, IBuildItem.cs, IHostFeedback.cs,
	ILangSecurityLevelChecker.cs, ITarget.cs, IBuildItemGroup.cs,
	IBuildPropertyGroupCollection.cs: Removed.

2006-02-26  Marek Sieradzki  <marek.sieradzki@gmail.com> 

	* BuildItem.cs: Removed IBuildItem references.
	* BuildItemGroup.cs: Removed ItemPropertyGroupingBase and
	IBuildItemGroup references. Changed Evaluate to internal.
	* BuildItemGroupCollection.cs. Removed IBuildItemGroupCollection
	reference and hidden constructors.
	* BuildProperty.cs: Removed IBuildProperty reference.
	* BuildPropertyGroup.cs: Removed ItemPropertyGroupingBase and
	IBuildPropertyGroup references. Changed Evaluate to internal.
	* BuildPropertyGroupCollection.cs: Removed IBuildPropertyGroupCollection
	reference and hidden constructors.
	* ConsoleLogger.cs: Updated names of event handlers.
	* Engine.cs: Removed IEngine reference. Removed ClearAllProjects and
	Escape. Added UnloadAllProjects () and UnloadProject ().
	* FileLogger.cs: Removed ApplyParameter ().
	* GroupingCollection.cs: Hidden.
	* InvalidProjectFileException.cs: Removed HasBeenLogged property.
	* ItemPropertyGroupingBase.cs: Commented.
	* ProcessingPass.cs: Hidden.
	* Project.cs: Removed IProject reference. Changed CurrentEncoding to
	Encoding.
	* Target.cs: Removed ITarget reference.
	* TargetCollection.cs: Removed ITargetCollection reference.
	* TaskElement.cs: Removed ITaskElement reference.
	* TaskEngineAssemblyResolver.cs: Hidden.
	* Utilities.cs: Made static class, removed CheckPath (),
	ValidateCulture (), GetSupportedCultures () and added Escape ().

2006-02-24  Marek Sieradzki <marek.sieradzki@gmail.com> 

	* ConsoleLogger.cs, Engine.cs: Quick hacks to make it compile with new
	API.

2005-09-22  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Project.cs: Added MonoTODO attributes.
	* Utilities.cs, TaskElement.cs, IBuildProperty.cs, HostLogger.cs,
	ProjectFileEncoding.cs, ICultureStringUtilities.cs, FileLogger.cs,
	IProject.cs, BuildSettings.cs, BuildWhen.cs, IGlobalEngineAccessor.cs,
	BuildEngine.cs, ITaskElement.cs, Target.cs, TaskDatabase.cs,
	SolutionParser.cs, IBuildPropertyGroup.cs, InternalLoggerException.cs,
	BuildItemGroup.cs, InvalidProjectFileException.cs,
	BuildPropertyGroupCollection.cs, MetadataReference.cs, Expression.cs,
	Xml.cs, BuildChoose.cs, EventSource.cs, ProcessingPass.cs,
	PropertyPosition.cs, GlobalEngineAccessor.cs, ITargetCollection.cs,
	ItemReference.cs, IEngine.cs, BuildItem.cs, DirectoryScanner.cs,
	IBuildItemGroupCollection.cs, BuildPropertyGroup.cs, IHostLogger.cs,
	IBuildItem.cs, ChangeType.cs, WriteHandler.cs, IHostFeedback.cs,
	ILangSecurityLevelChecker.cs, ITarget.cs, BatchingImpl.cs,
	ConsoleLogger.cs, TargetCollection.cs, PropertyReference.cs,
	IBuildItemGroup.cs, BuildProperty.cs, Engine.cs,
	IBuildPropertyGroupCollection.cs, GroupingCollection.cs,Project.cs,
	BuildItemGroupCollection.cs, ItemPropertyGroupingBase.cs,
	ImportedProject.cs, TaskEngineAssemblyResolver.cs: Added #if NET_2_0.

2005-09-21  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskDatabase.cs: Change Shared to Framework.
	* BuildPropertyGroup.cs, Project.cs: Remove obsoleted
	CaseInsensitiveHashCodeProvider

2005-09-11  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskDatabase.cs: Added handling of LoadInfoType.AssemblyName.
	* Engine.cs, Project.cs: Added handling of MSBuildBinPath reserved
	property.

2005-09-09  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* InternalLoggerException.cs: Changed protected fields to private.

2005-09-03  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Engine.cs: Added check for globalProperties.
	* Project.cs: Added using path from importedProject.FullFileName when
	adding UsingTask elements.

2005-09-01  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskElement.cs: Changed ReflectedType to PropertyType.
	* ChangeType.cs (TransformToString): Changed to pass proper Type to
	TemporaryTransform. 

2005-09-01  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildPropertyGroup.cs: Added check for PropertyType when adding a
	new property.
	* BuildProperty.cs: Organized PropertyType enum.
	* Engine.cs: Added setting CommandLine PropertyType of global
	properties.

2005-08-31  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* InvalidProjectFileException.cs: Changed Message property.
	* ChangeType.cs (TransformToString): Added separator between items.
	* TaskEngineAssemblyResolver.cs: Formatting.

2005-08-31  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* DirectoryScanner.cs: Added.
	* BuildItem.cs: Moved file scanning code to DirectoryScanner.
	* BuildPropertyGroup.cs: Changed Project.Evaluate to Expression.
	* Project.cs: Removed Evalute* ().

2005-08-30  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs: Formatting.
	* Expression.cs: Added check if array == null.
	* BuildItem.cs: Removed 'break' to remove warnings.
	* ConsoleLogger.cs: Formatting.
	* Engine.cs: Added handling of default target(s).
	* Project.cs: Added handling of default target(s).

2005-08-29  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskElement.cs: Added check for parameters.
	* Target.cs: Added logging of target skipping.
	* Expression.cs: Changed returning object[] to string[], bool[]... in
	ToArray ().
	* ItemReference.cs: Fixed for item references without custom
	separators.
	* BatchingImpl.cs: Added real inputs/outputs checking.
	* Engine.cs: Moved global properties setting.
	* Project.cs: Moved global properties setting.

2005-08-27  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Target.cs: Added checks for target existence.
	* BuildItemGroup.cs: Changed to use transforms.
	* MetadataReference.cs: Wrote real implementation.
	* ItemReference.cs: Rewritten to use transforms.
	* BuildItem.cs: Changes for transforms and metadata.
	* ConsoleLogger.cs: Added verbosity checking and fixed error/warning
	formatting.
	* Project.cs: Fixed project importing.
	* ImportedProject.cs: Changed to throw exceptions instead of returning
	bool.

2005-08-24  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* Engine.cs: Removed FIXME.
	* Project.cs: Splitted ProcessElements and added project importing.
	* ImportedProject.cs: Rewritten.

2005-08-20  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskElement.cs: Added getting of objects of every type.
	* BuildItemGroup.cs: Added ToITaskItemArray ().
	* Expression.cs: Implemented part that is not using metadata.
	* ItemReference.cs: Implemented parsing item references. Need to fix
	validity checking.
	* BuildItem.cs: Fixed ToITaskItem ().
	* PropertyReference.cs: Implemented parsing property references. This
	also needs validity checking.

2005-08-19  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskElement.cs: Added Output element handling.
	* Target.cs: Cleaned up.
	* BuildItemGroup.cs: Added creating BuildItem from TaskItem.
	* Expression.cs, MetadataReference.cs, PropertyReference.cs,
	ItemReference.cs, ChangeType.cs: Added.
	* BuildItem.cs: Added creating BuildItem from TaskItem.
	* BuildPropertyGroup.cs: Small changes.
	* BatchingImpl.cs: Fixed to return real task execution result.
	* BuildProperty.cs: Fixed FinalValue property.
	* Engine.cs: Reformatted logging.
	* Project.cs: Added check to EvaluateProperty.

2005-08-16  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* TaskElement.cs: Added part of execution engine.
	* BuildEngine.cs: Added handling of TaskStarted and TaskFinished.
	* BuildItemGroup.cs: Iterating by XmlNode casted to XmlElement.
	* EventSource.cs: Added FireTaskStarted and FireTaskFinished.
	* BuildItem.cs: Added handling of built-in metadata and referencing
	Items by name not FullName.
	* BatchingImpl.cs: Added temporary task "batching".
	* ConsoleLogger.cs: Added temporary workaround to not show sender.
	* Project.cs: Added Evaluate. It will be moved to separate class.

2005-08-14  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* EventSource.cs, Engine.cs: Added CriticalEvents.
	* BuildItem.cs, BuildItemGroup.cs, BuildItemGroupCollection.cs,
	Project.cs: Added some support for items.
	* BuildProperty.cs, BuildPropertyGroup.cs: Cleaned up.

2005-08-12  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildProperty.cs, BuildPropertyGroup.cs, Project.cs: Added loading
	of properties.

2005-08-12  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BatchingImpl.cs: Added.
	* BuildWhen.cs, BuildEngine.cs, Target.cs,
	BuildPropertyGroupCollection.cs, BuildChoose.cs, EventSource.cs,
	BuildItem.cs, BuildPropertyGroup.cs, ConsoleLogger.cs,
	TargetCollection.cs, BuildProperty.cs, Engine.cs, Project.cs,
	GroupingCollection.cs: Updated.

2005-08-06  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* BuildChoose.cs, BuildEngine.cs, BuildItem.cs,
	BuildItemGroupCollection.cs, BuildItemGroup.cs, BuildProperty.cs,
	BuildPropertyGroupCollection.cs, BuildPropertyGroup.cs,
	BuildSettings.cs, BuildWhen.cs, ConsoleLogger.cs, Engine.cs,
	EventSource.cs, FileLogger.cs, GlobalEngineAccessor.cs,
	GroupingCollection.cs, HostLogger.cs, ImportedProject.cs,
	InternalLoggerException.cs, InvalidProjectFileException.cs,
	ItemPropertyGroupingBase.cs, ProcessingPass.cs, Project.cs,
	ProjectFileEncoding.cs, PropertyPosition.cs, SolutionParser.cs,
	TargetCollection.cs, Target.cs, TaskDatabase.cs, TaskElement.cs,
	TaskEngineAssemblyResolver.cs, Utilities.cs, WriteHandler.cs, Xml.cs:
	Initial check-in of implementations.

2005-07-16  Marek Sieradzki  <marek.sieradzki@gmail.com>

	* conditions.jay, IBuildItem.cs, IBuildItemGroup.cs,
	IBuildItemGroupCollection.cs, IBuildProperty.cs,
	IBuildPropertyGroup.cs, IBuildPropertyGroupCollection.cs,
	ICultureStringUtilities.cs, IEngine.cs, IGlobalEngineAccessor.cs,
	IHostFeedback.cs, IHostLogger.cs, ILangSecurityLevelChecker.cs,
	IProject.cs, ITargetCollection.cs, ITarget.cs, ITaskElement.cs:
	Initial check-in of interfaces and a syntax file, real classes are
	changing a lot so I'll wait a moment with checking them in.
