Index: Tools/Google.Apis.Release/ProjectExtenstions.cs
===================================================================
new file mode 100644
--- /dev/null
+++ b/Tools/Google.Apis.Release/ProjectExtenstions.cs
@@ -0,0 +1,85 @@
+/*
+Copyright 2013 Google Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+
+using Microsoft.Build.Evaluation;
+
+using Google.Apis.Utils;
+using Google.Apis.Utils.Trace;
+
+namespace Google.Apis.Release
+{
+ ///
+ /// Extension methods for the Project class.
+ /// Add support in getting the short name of the project and also in replacing the current library version with
+ /// the new version ().
+ ///
+ internal static class ProjectExtenstions
+ {
+ static readonly TraceSource TraceSource = new TraceSource("Google.Apis");
+
+ /// Gets the name of the project.
+ public static string GetName(this Project project)
+ {
+ return project.DirectoryPath.Substring(project.DirectoryPath.LastIndexOf(Path.DirectorySeparatorChar) + 1);
+ }
+
+ /// Replaces Assembly version number with the given one.
+ public static void ReplaceVersion(this Project project, string newVersion)
+ {
+ const string ASSEMBLY_INFO_PREFIX = "[assembly: AssemblyVersion(\"";
+
+ // no need to increase version
+ if (newVersion == null)
+ return;
+
+ var assemblyInfoFile = System.IO.Path.Combine(project.DirectoryPath, "Properties", "AssemblyInfo.cs");
+
+ try
+ {
+ // read all lines and replace the current version with the given newVersion
+ var allLines = File.ReadAllLines(assemblyInfoFile).Select(
+ l =>
+ {
+ // if the line contains assembly information, replace old version with new version
+ if (l.StartsWith(ASSEMBLY_INFO_PREFIX))
+ return ReplaceVersionInLine(l, ASSEMBLY_INFO_PREFIX, newVersion);
+ else
+ return l;
+ });
+ File.WriteAllLines(assemblyInfoFile, allLines);
+ }
+ catch (Exception ex)
+ {
+ TraceSource.TraceEvent(TraceEventType.Error, "Exception occurred while replacing version", ex.Message);
+ }
+ }
+
+ /// Returns the assembly information line with the new version.
+ private static string ReplaceVersionInLine(string line, string assemblyVersionPrefix, string newVersion)
+ {
+ var startVersion = assemblyVersionPrefix.Length;
+ // '.*' ends the old version number (e.g 1.2.* or 1.2.0.*)
+ var endVersion = line.IndexOf(".*", startVersion);
+ var oldVersion = line.Substring(startVersion, endVersion - startVersion);
+ return line.Replace(assemblyVersionPrefix + oldVersion, assemblyVersionPrefix + newVersion);
+ }
+ }
+}