public PvcsCompleteSystemArchiveDetail(string reportPath, PvcsArchiveDetailLevel pvcsArchiveDetailLevel) { const string allGroupFilename = "AllGroup.txt"; const string prodChangeFilename = "ProdChange.txt"; string prodChangeFilenameWithPath = Path.Combine(reportPath, prodChangeFilename); string allGroupFilenameWithPath = Path.Combine(reportPath, allGroupFilename); if (File.Exists(prodChangeFilenameWithPath)) { using (StreamReader fileStream = new StreamReader(prodChangeFilenameWithPath)) { string currentArchiveName = null; while (!fileStream.EndOfStream) { string fileLine = fileStream.ReadLine().Trim(); string archiveName; string archiveDetailText; ParseArchiveInformation(fileLine, out archiveName, out archiveDetailText); PvcsArchiveDetail pvcsArchiveDetail; if (currentArchiveName == null) { // No archive name so far currentArchiveName = archiveName; pvcsArchiveDetail = new PvcsArchiveDetail(archiveName); PvcsArchiveDetailCollection.Add(archiveName, pvcsArchiveDetail); } else { // Existing current archive if (String.Compare(currentArchiveName, archiveName, /*ignore case*/ true) == 0) { // Get the existing Archive Detail pvcsArchiveDetail = PvcsArchiveDetailCollection[archiveName]; } else { // Different Archive currentArchiveName = archiveName; pvcsArchiveDetail = new PvcsArchiveDetail(archiveName); PvcsArchiveDetailCollection.Add(archiveName, pvcsArchiveDetail); } } // Existing current archive pvcsArchiveDetail.AddArchiveDetail(archiveDetailText); } // while not end of stream } // using StreamReader } if (File.Exists(allGroupFilenameWithPath)) { using (StreamReader fileStream = new StreamReader(allGroupFilenameWithPath)) { while (!fileStream.EndOfStream) { string fileLine = fileStream.ReadLine().Trim(); string archiveName; string archiveDetailText; ParseArchiveInformation(fileLine, out archiveName, out archiveDetailText); if (!PvcsArchiveDetailCollection.ContainsKey(archiveName)) { // Add a report entry for an Archive that has no changes PvcsArchiveDetail pvcsArchiveDetail = new PvcsArchiveDetail(archiveName); pvcsArchiveDetail.AddArchiveDetail(archiveDetailText); PvcsArchiveDetailCollection.Add(archiveName, pvcsArchiveDetail); } // Add a report entry for an Archive that has no changes } } } } // Constructor
public PvcsCompleteSystemArchiveDetail(string reportPath, PvcsArchiveDetailLevel pvcsArchiveDetailLevel) { bool useProdChange = true; const string allGroupFilename = "AllGroup.txt"; const string prodChangeFilename = "ProdChange.txt"; string prodChangeFilenameWithPath = Path.Combine(reportPath, prodChangeFilename); string allGroupFilenameWithPath = Path.Combine(reportPath, allGroupFilename); if (useProdChange) { // Import from ProdChange Report if (File.Exists(prodChangeFilenameWithPath)) { Console.WriteLine(); Console.WriteLine("{0} : Adding PVCS Archive revisions that contain changes", DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")); try { using (StreamReader fileStream = new StreamReader(prodChangeFilenameWithPath)) { string currentArchiveName = null; while (!fileStream.EndOfStream) { string fileLine = fileStream.ReadLine().Trim(); string archiveName; string archiveDetailText; ParseArchiveInformation(fileLine, out archiveName, out archiveDetailText); PvcsArchiveDetail pvcsArchiveDetail; if (currentArchiveName == null) { // No archive name so far currentArchiveName = archiveName; pvcsArchiveDetail = new PvcsArchiveDetail(archiveName); PvcsArchiveDetailCollection.Add(archiveName, pvcsArchiveDetail); } else { // Existing current archive if (String.Compare(currentArchiveName, archiveName, /*ignore case*/ true) == 0) { // Get the existing Archive Detail pvcsArchiveDetail = PvcsArchiveDetailCollection[archiveName]; } else { // Different Archive currentArchiveName = archiveName; pvcsArchiveDetail = new PvcsArchiveDetail(archiveName); PvcsArchiveDetailCollection.Add(archiveName, pvcsArchiveDetail); } } // Existing current archive pvcsArchiveDetail.AddArchiveDetail(archiveDetailText); } // while not end of stream } // using StreamReader } catch (Exception) { throw new UnableToOpenFileException(prodChangeFilename); } Console.WriteLine(); Console.WriteLine("{0} : Completed adding PVCS Archives revisions that contain changes", DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")); } else { throw new FileNotFoundException(prodChangeFilenameWithPath); } } // Import from ProdChange Report if (File.Exists(allGroupFilenameWithPath)) { // Import any archives not included in the ProdChange import // The ProdChange Report only contains Archives with changes Console.WriteLine(); Console.WriteLine("{0} : Adding revisions for PVCS Archives that contain no changes (Production only)", DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")); Console.WriteLine(); try { using (StreamReader fileStream = new StreamReader(allGroupFilenameWithPath)) { while (!fileStream.EndOfStream) { string fileLine = fileStream.ReadLine().Trim(); string archiveName; string archiveDetailText; ParseArchiveInformation(fileLine, out archiveName, out archiveDetailText); if (!PvcsArchiveDetailCollection.ContainsKey(archiveName)) { // Add a report entry for an Archive that has no changes if (useProdChange) { Console.WriteLine("{0}{1} : Adding \"{2}\"", ConsoleDisplay.Indent(1), archiveName, archiveDetailText); } PvcsArchiveDetail pvcsArchiveDetail = new PvcsArchiveDetail(archiveName); pvcsArchiveDetail.AddArchiveDetail(archiveDetailText); PvcsArchiveDetailCollection.Add(archiveName, pvcsArchiveDetail); } // Add a report entry for an Archive that has no changes } } } catch (Exception) { throw new UnableToOpenFileException(allGroupFilenameWithPath); } Console.WriteLine(); Console.WriteLine("{0} : Completed adding revisions for PVCS Archives that contain no changes (Production only)", DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")); } // Import any archives not included in the ProdChange import else { throw new FileNotFoundException(allGroupFilenameWithPath); } Console.WriteLine(); Console.WriteLine("{0} : Adding list of PVCS Source Revisions that represent generated files", DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")); Console.WriteLine(); // These generated files should really be read from a file but I've put them here // Don't add these files as ignored because, although most of them are generated and will represent // differences between a Promotion Group Share and a Repository, they should be change controlled //_pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\AssemblyInfo.cpp"); //_pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\AssemblyInfo.cs"); //_pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\AssemblyInfo.vb"); _pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\Legacy\INETFoundation\Types\BaseEnumerations.cs"); _pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\Legacy\INETFoundation\Types\ClientEnumerations.cs"); _pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\Legacy\INETFoundation\Types\HouseholdEnumerations.cs"); _pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\Legacy\INETFoundation\Types\MotorEnumerations.cs"); _pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\Legacy\INETFoundation\Types\NicheEnumerations.cs"); // This one is not generated //_pvcsArchiveIgnoreSet.Add(@"Z:\Endsleigh\Legacy\INETFoundation\Types\TravelEnumerations.cs"); if (_pvcsArchiveIgnoreSet.Count < 1) { Console.WriteLine("{0} : No PVCS Source Revisions exist in the set of generated files", DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")); } else { foreach (string archiveSetIgnoreEntry in _pvcsArchiveIgnoreSet) { Console.WriteLine("{0}{1}", ConsoleDisplay.Indent(1), archiveSetIgnoreEntry); } } Console.WriteLine(); Console.WriteLine("{0} : Completed adding list of PVCS Source Revisions that represent generated files", DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")); } // Constructor