/// <summary> /// Unpacks this package into the specified directory. /// </summary> /// <param name="baseDirectory">The directory to use.</param> public static Package Unpack(string rootLocation, Stream packageStream) { XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; XmlReader reader = XmlReader.Create(packageStream, settings); XPathDocument doc = new XPathDocument(reader); // Read the name so we can know where to create it. var nav = doc.CreateNavigator(); var nameNode = nav.SelectSingleNode("/Package/@Name"); string name = nameNode.Value; string packageDir = System.IO.Path.Combine(rootLocation, name); System.IO.Directory.CreateDirectory(packageDir); Package newPackage = new Package(packageDir, false); newPackage.ReadPackage(nav); newPackage.SaveManifest(); return(newPackage); }
/// <summary> /// Handles the Click event of the Build Package Button /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param> private void BuildPkgButton_Click(object sender, RoutedEventArgs e) { MainBorder.Visibility = System.Windows.Visibility.Visible; var viewModel = (PackageBuilderViewModel)DataContext; PackageSourceInfo info = viewModel.PackageSourceInfo; bool noError = true; TraceLab.Core.PackageSystem.Package pkg = null; string pkgFilePath = GetFilePath(info.Name); if (pkgFilePath != null) { string pkgFileName = System.IO.Path.GetFileNameWithoutExtension(pkgFilePath); string pkgTempDirectory = pkgFilePath + "~temp"; try { System.IO.Directory.CreateDirectory(pkgTempDirectory); try { pkg = new TraceLab.Core.PackageSystem.Package(info.Name, pkgTempDirectory, false); } catch (TraceLab.Core.PackageSystem.PackageAlreadyExistsException) { MessageBox.Show("Package already exists in: " + pkgTempDirectory, "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error); noError = false; } catch (TraceLab.Core.PackageSystem.PackageException ex) { MessageBox.Show("Error creating package: " + ex.Message, "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error); noError = false; } if (pkg != null && noError) { foreach (PackageFileSourceInfo item in info.Files) { noError = noError && AddItemToPackage(pkg, item); } pkg.SaveManifest(); using (System.IO.FileStream stream = new System.IO.FileStream(pkgFilePath, System.IO.FileMode.Create)) { pkg.Pack(stream); } } } catch (System.IO.IOException error) { MessageBox.Show("Unable to create package. Error: " + error.Message, "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error); noError = false; } catch (System.UnauthorizedAccessException error) { MessageBox.Show("Unable to create package - Unauthorized access: " + error.Message, "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error); noError = false; } try { if (System.IO.Directory.Exists(pkgTempDirectory)) { System.IO.Directory.Delete(pkgTempDirectory, true); } } catch (System.IO.IOException error) { MessageBox.Show("Unable to cleanup after package creation. Error: " + error.Message, "After Package Cleanup Failure", MessageBoxButton.OK, MessageBoxImage.Exclamation); } catch (System.UnauthorizedAccessException error) { MessageBox.Show("Unable to cleanup after package creation. Unauthorized access: " + error.Message, "After Package Cleanup Failure", MessageBoxButton.OK, MessageBoxImage.Warning); } } if (noError && pkg != null) { MessageBox.Show("Package \"" + info.Name + "\" was built successfully.", "Package Created", MessageBoxButton.OK, MessageBoxImage.Information); } MainBorder.Visibility = System.Windows.Visibility.Hidden; }
public void SaveManifestTest() { var name = "TestPackage"; var packageRoot = WriteTestPackage(name); // Load the package Package target = new Package(packageRoot, true); var manifestFile = System.IO.Path.Combine(PackageTestRoot, name, "TestPackage.manifest"); var newManifestFile = System.IO.Path.Combine(PackageTestRoot, name, name + ".manifest"); // Move the manifest to a backup System.IO.File.Move(manifestFile, manifestFile + ".bak"); // Compare the written manifest with the m anifest that is saved in the test resources Assert.IsFalse(System.IO.File.Exists(newManifestFile)); // Force the save of the manifest target.SaveManifest(); // Compare the written manifest with the m anifest that is saved in the test resources Assert.IsTrue(System.IO.File.Exists(newManifestFile)); var backup = System.IO.File.ReadAllText(manifestFile + ".bak", Encoding.UTF8); var manifest = System.IO.File.ReadAllText(newManifestFile, Encoding.UTF8); Assert.IsTrue(backup.SequenceEqual(manifest)); }
/// <summary> /// Unpacks this package into the specified directory. /// </summary> /// <param name="baseDirectory">The directory to use.</param> public static Package Unpack(string rootLocation, Stream packageStream) { XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; XmlReader reader = XmlReader.Create(packageStream, settings); XPathDocument doc = new XPathDocument(reader); // Read the name so we can know where to create it. var nav = doc.CreateNavigator(); var nameNode = nav.SelectSingleNode("/Package/@Name"); string name = nameNode.Value; string packageDir = System.IO.Path.Combine(rootLocation, name); System.IO.Directory.CreateDirectory(packageDir); Package newPackage = new Package(packageDir, false); newPackage.ReadPackage(nav); newPackage.SaveManifest(); return newPackage; }