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); + } + } +}