Skip to content

Commit

Permalink
Revert the parts of r59483 that broke the build
Browse files Browse the repository at this point in the history
svn path=/trunk/mcs/; revision=59486
  • Loading branch information
migueldeicaza committed Apr 14, 2006
1 parent a7a068a commit 80fa8f6
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 129 deletions.
Expand Up @@ -32,15 +32,27 @@
using System.Collections.Specialized;
using System.IO;
using Microsoft.Build.Framework;
using Mono.XBuild.Utilities;

namespace Microsoft.Build.Utilities
{
public sealed class TaskItem : MarshalByRefObject, ITaskItem
{
IDictionary metadata;
string itemSpec;
static string[] reservedMetadataNames;
static Hashtable reservedMetadataHash;

static TaskItem ()
{
reservedMetadataNames = new string [] {
"FullPath", "RootDir", "Filename", "Extension", "RelativeDir", "Directory",
"RecursiveDir", "Identity", "ModifiedTime", "CreatedTime", "AccessedTime"};
reservedMetadataHash = CollectionsUtil.CreateCaseInsensitiveHashtable (ReservedMetadataNameCount);
foreach (string s in reservedMetadataNames) {
reservedMetadataHash.Add (s, null);
}
}

public TaskItem ()
{
this.itemSpec = String.Empty;
Expand Down Expand Up @@ -77,6 +89,69 @@ public TaskItem (string itemSpec, IDictionary itemMetadata)
this.metadata = CollectionsUtil.CreateCaseInsensitiveHashtable (itemMetadata);
}

public static ICollection ReservedMetadataNames {
get {
return (ICollection) reservedMetadataNames.Clone ();
}
}

public static int ReservedMetadataNameCount {
get {
return reservedMetadataNames.Length;
}
}

public static bool IsReservedMetadataName (string metadataName)
{
return reservedMetadataHash.Contains (metadataName.ToLower ());
}

public static string GetReservedMetadata (string itemSpec, string metadataName)
{
switch (metadataName.ToLower ()) {
case "fullpath":
return Path.GetFullPath (itemSpec);
case "rootdir":
return Path.GetPathRoot (itemSpec);
case "filename":
return Path.GetFileNameWithoutExtension (itemSpec);
case "extension":
return Path.GetExtension (itemSpec);
case "relativedir":
return Path.GetDirectoryName (itemSpec);
case "directory":
return Path.GetDirectoryName (Path.GetFullPath (itemSpec));
case "recursivedir":
// FIXME: how to handle this?
return "";
case "identity":
return Path.Combine (Path.GetDirectoryName (itemSpec), Path.GetFileName (itemSpec));
case "modifiedtime":
if (File.Exists (itemSpec))
return File.GetLastWriteTime (itemSpec).ToString ();
else if (Directory.Exists (itemSpec))
return Directory.GetLastWriteTime (itemSpec).ToString ();
else
return String.Empty;
case "createdtime":
if (File.Exists (itemSpec))
return File.GetCreationTime (itemSpec).ToString ();
else if (Directory.Exists (itemSpec))
return Directory.GetCreationTime (itemSpec).ToString ();
else
return String.Empty;
case "accessedtime":
if (File.Exists (itemSpec))
return File.GetLastAccessTime (itemSpec).ToString ();
else if (Directory.Exists (itemSpec))
return Directory.GetLastAccessTime (itemSpec).ToString ();
else
return String.Empty;
default:
throw new ArgumentException ("Invalid reserved metadata name");
}
}

public IDictionary CloneCustomMetadata ()
{
IDictionary clonedMetadata = CollectionsUtil.CreateCaseInsensitiveHashtable ();
Expand All @@ -101,8 +176,8 @@ public void CopyMetadataTo (ITaskItem destinationItem)

public string GetMetadata (string metadataName)
{
if (ReservedNameUtils.IsReservedMetadataName (metadataName))
return ReservedNameUtils.GetReservedMetadata (ItemSpec, metadataName);
if (IsReservedMetadataName (metadataName))
return GetReservedMetadata (ItemSpec, metadataName);
else if (metadata.Contains (metadataName))
return (string) metadata [metadataName];
else
Expand All @@ -118,7 +193,7 @@ public void RemoveMetadata (string metadataName)
{
if (metadataName == null)
throw new ArgumentNullException ("metadataName");
if (ReservedNameUtils.IsReservedMetadataName (metadataName))
if (IsReservedMetadataName (metadataName))
throw new ArgumentException ("Can't remove reserved metadata");
if (metadata.Contains (metadataName))
metadata.Remove (metadataName);
Expand All @@ -130,7 +205,7 @@ public void SetMetadata (string metadataName, string metadataValue)
throw new ArgumentNullException ("metadataName");
if (metadataValue == null)
throw new ArgumentNullException ("metadataValue");
if (ReservedNameUtils.IsReservedMetadataName (metadataName))
if (IsReservedMetadataName (metadataName))
throw new ArgumentException ("Can't modify reserved metadata");

if (metadata.Contains (metadataName))
Expand All @@ -156,7 +231,7 @@ public override string ToString ()
get {
ArrayList list = new ArrayList ();

foreach (string s in ReservedNameUtils.ReservedMetadataNames)
foreach (string s in ReservedMetadataNames)
list.Add (s);
foreach (string s in metadata.Keys)
list.Add (s);
Expand Down
@@ -1,7 +1,3 @@
2006-04-14 Marek Sieradzki <marek.sieradzki@gmail.com>

* ReservedNameUtils.cs: Added.

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

* MonoLocationHelper.cs: Added GetXBuildDir ().
Expand Down
@@ -1,119 +0,0 @@
//
// ReservedNameUtils.cs
//
// Author:
// Marek Sieradzki (marek.sieradzki@gmail.com)
//
// (C) 2006 Marek Sieradzki
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#if NET_2_0

using System;
using System.Collections;
using System.Collections.Specialized;
using System.IO;

namespace Mono.XBuild.Utilities {

internal static class ReservedNameUtils {

static string[] reservedMetadataNames;
static Hashtable reservedMetadataHash;

static ReservedNameUtils ()
{
reservedMetadataNames = new string [] {
"FullPath", "RootDir", "Filename", "Extension", "RelativeDir", "Directory",
"RecursiveDir", "Identity", "ModifiedTime", "CreatedTime", "AccessedTime"};
reservedMetadataHash = CollectionsUtil.CreateCaseInsensitiveHashtable (ReservedMetadataNameCount);
foreach (string s in reservedMetadataNames) {
reservedMetadataHash.Add (s, null);
}
}

public static ICollection ReservedMetadataNames {
get {
return (ICollection) reservedMetadataNames.Clone ();
}
}

public static int ReservedMetadataNameCount {
get {
return reservedMetadataNames.Length;
}
}

public static bool IsReservedMetadataName (string metadataName)
{
return reservedMetadataHash.Contains (metadataName.ToLower ());
}

public static string GetReservedMetadata (string itemSpec,
string metadataName)
{
switch (metadataName.ToLower ()) {
case "fullpath":
return Path.GetFullPath (itemSpec);
case "rootdir":
return Path.GetPathRoot (itemSpec);
case "filename":
return Path.GetFileNameWithoutExtension (itemSpec);
case "extension":
return Path.GetExtension (itemSpec);
case "relativedir":
return Path.GetDirectoryName (itemSpec);
case "directory":
return Path.GetDirectoryName (Path.GetFullPath (itemSpec));
case "recursivedir":
// FIXME: how to handle this?
return "";
case "identity":
return Path.Combine (Path.GetDirectoryName (itemSpec), Path.GetFileName (itemSpec));
case "modifiedtime":
if (File.Exists (itemSpec))
return File.GetLastWriteTime (itemSpec).ToString ();
else if (Directory.Exists (itemSpec))
return Directory.GetLastWriteTime (itemSpec).ToString ();
else
return String.Empty;
case "createdtime":
if (File.Exists (itemSpec))
return File.GetCreationTime (itemSpec).ToString ();
else if (Directory.Exists (itemSpec))
return Directory.GetCreationTime (itemSpec).ToString ();
else
return String.Empty;
case "accessedtime":
if (File.Exists (itemSpec))
return File.GetLastAccessTime (itemSpec).ToString ();
else if (Directory.Exists (itemSpec))
return Directory.GetLastAccessTime (itemSpec).ToString ();
else
return String.Empty;
default:
throw new ArgumentException ("Invalid reserved metadata name");
}
}
}
}

#endif

0 comments on commit 80fa8f6

Please sign in to comment.