public static void DeleteProjectItem(Project project, string relativePathAndName, bool deleteFile, out FileStateInfo fileStateInfo) { fileStateInfo = new FileStateInfo(); fileStateInfo.FileState = FileStateConstants.Failed; var currentProjectFile = new FileInfo(project.FileName); relativePathAndName = relativePathAndName.TrimStart(new char[] { Path.DirectorySeparatorChar }); var fullName = Path.Combine(currentProjectFile.Directory.FullName, relativePathAndName); fullName = fullName.Replace($"{Path.DirectorySeparatorChar}{Path.DirectorySeparatorChar}", $"{Path.DirectorySeparatorChar}"); fileStateInfo.FileName = fullName; var newFile = new FileInfo(fullName); fileStateInfo.FileState = FileStateConstants.Failed; if (newFile.Exists) { var p = FindProjectItemByFileName(project.ProjectItems, fullName); if (p != null) { p.Remove(); } if (deleteFile) { try { File.Delete(fullName); } catch { } } } }
public ProjectItem AddProjectItem(ProjectItem parent, string fileName, out FileStateInfo fileStateInfo) { fileStateInfo = new FileStateInfo(); try { fileStateInfo.FileName = fileName; var newItem = parent.ProjectItems.AddFromFileCopy(fileName); fileStateInfo.FileState = FileStateConstants.Success; return(newItem); } catch (System.Runtime.InteropServices.COMException ex) { if (ex.Message.ToLower().Contains("already exists")) { fileStateInfo.FileState = FileStateConstants.Skipped; } else { fileStateInfo.FileState = FileStateConstants.Failed; } return(null); } catch (Exception ex) { fileStateInfo.FileState = FileStateConstants.Failed; throw; } }
public static bool CheckFile(String path) { if (CurrentContentFile == null) { return(true); } string relPath = path.Replace(RootDirectory, String.Empty); FileStateInfo[] array = ((IEnumerable <FileStateInfo>)CurrentContentFile.Files).Select(f => f).Where(f => f.FileName == relPath).ToArray(); if (array.Length == 0) { return(true); } FileStateInfo fileStateInfo = array[0]; FileInfo fileInfo = new FileInfo(path); long length = fileInfo.Length; if (fileStateInfo.FileSize != length) { return(false); } DateTime lastWriteTimeUtc = fileInfo.LastWriteTimeUtc; if (fileStateInfo.LastWrite != lastWriteTimeUtc) { return(false); } using (FileStream fileStream = fileInfo.OpenRead()) { byte[] hash = new MD5CryptoServiceProvider().ComputeHash(fileStream); fileStream.Close(); return(fileStateInfo.MD5Hash == hash); } }
private void projectItemGenerator_ProjectItemDeleted(object sender, ProjectItemDeletedEventArgs e) { try { var project = EnvDTEHelper.Instance.GetProject(e.ProjectName); var parent = EnvDTEHelper.Instance.GetProjectItem(e.ProjectName, e.ParentItemName, e.ParentItemType); var fileStateInfo = new FileStateInfo(); if (e.ParentItemName != string.Empty) { EnvDTEHelper.Instance.DeleteProjectItem(parent, e.ProjectItemName, out fileStateInfo); } else { EnvDTEHelper.DeleteProjectItem(project, e.ProjectItemName, out fileStateInfo); } Application.DoEvents(); //Write Log nHydrateLog.LogInfo("Project Item Deleted: {0}", e.ProjectItemName); e.FileState = fileStateInfo.FileState; e.FullName = fileStateInfo.FileName; //this.OnProjectItemGenerated(sender, e); } catch (Exception ex) { //this.OnProjectItemGeneratedError(this, e); nHydrateLog.LogWarning(ex); } }
public ProjectItem AddProjectItem(Project project, ProjectItem parent, string fileName, string content, bool overwrite, out FileStateInfo fileStateInfo) { try { BuildCache(project); fileStateInfo = new FileStateInfo(); var fi = new FileInfo(this.GetFileName(parent)); var fullName = Path.Combine(fi.DirectoryName, fileName); fileStateInfo.FileName = fullName; try { var fi2 = new FileInfo(fullName); if (File.Exists(fullName) && !overwrite) { fileStateInfo.FileState = FileStateConstants.Skipped; return(null); } else if (fi2.Exists && (fi2.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } else { File.WriteAllText(fullName, content); fileStateInfo.FileState = FileStateConstants.Success; } } catch (Exception ex) { fileStateInfo.FileState = FileStateConstants.Failed; //GlobalHelper.ShowError(ex); } ProjectItem newItem = null; if (_projectCache[project].Select(x => x.Name).Contains(fullName.ToLower())) { //Do Nothing } else { if (_projectItemCache.ContainsKey(fullName)) { newItem = _projectItemCache[fullName]; } else { newItem = parent.ProjectItems.AddFromFile(fullName); } } return(newItem); } catch (Exception ex) { throw; } }
public ProjectItem AddFileAsProjectItem(Project project, string fileName, string relativePathAndName, bool overwrite, out FileStateInfo fileStateInfo) { try { fileStateInfo = new FileStateInfo(); fileStateInfo.FileState = FileStateConstants.Failed; FileInfo newFile = null; if (project.Kind == Constants.vsProjectKindUnmodeled) { var applicationObject = (DTE)EnvDTEHelper.Instance._applicationObject; //Handle on Solution Explorer window var slnExplorer = applicationObject.Windows.Item(Constants.vsWindowKindSolutionExplorer); var slnHierarchy = (UIHierarchy)slnExplorer.Object; slnExplorer.Activate(); var dbProject = EnvDTEHelper.Instance.Find(project); dbProject.Select(vsUISelectionType.vsUISelectionTypeSelect); } else { var currentProjectFile = new FileInfo(project.FileName); var fullName = StringHelper.EnsureDirectorySeparatorAtEnd(currentProjectFile.Directory.FullName) + relativePathAndName; fullName = fullName.Replace($"{Path.DirectorySeparatorChar}{Path.DirectorySeparatorChar}", $"{Path.DirectorySeparatorChar}"); fileStateInfo.FileName = fullName; newFile = new FileInfo(fullName); if (newFile.Exists && !overwrite) { fileStateInfo.FileState = FileStateConstants.Skipped; return(null); } else if (newFile.Exists && (newFile.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } if (!newFile.Directory.Exists) { newFile.Directory.Create(); } File.Copy(fileName, newFile.FullName); } try { fileStateInfo.FileState = FileStateConstants.Success; return(project.ProjectItems.AddFromFile(newFile.FullName)); } catch (Exception ex) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } } catch (Exception ex) { throw; } }
DateTime SelectFileTime(FileStateInfo info, FileTime fileTimeState) { switch (fileTimeState) { case FileTime.CheckIn: return(info.VersionDate); case FileTime.Modification: return(info.ModifiedOn); } return(DateTime.UtcNow); }
public void DeleteProjectItem(ProjectItem parent, string fileName, out FileStateInfo fileStateInfo) { fileStateInfo = new FileStateInfo(); var fi = new FileInfo(this.GetFileName(parent)); var fullName = Path.Combine(fi.DirectoryName, fileName); fullName = fullName.Replace($"{Path.DirectorySeparatorChar}{Path.DirectorySeparatorChar}", $"{Path.DirectorySeparatorChar}"); fileStateInfo.FileName = fullName; var p = parent.ProjectItems.Item(0); //var newItem = parent.ProjectItems.AddFromFile(fullName); fileStateInfo.FileState = FileStateConstants.Success; }
public bool GetLocalFileModified(FileStateInfo info, string localPath, string vcsPath, DateTime projectDate, out FileBaseInfoState fileState, DateTime lastWrite) { try { using (Stream fileStream = fileSystem.OpenRead(localPath)) { byte[] localHash = DXVCSHelpers.GetHashMD5(fileStream); bool hashEquals = DXVCSHelpers.BytesAreEquals(localHash, info.Hash); fileState = FileBaseInfoState.Modified; return(!hashEquals); } } catch (IOException) { fileState = FileBaseInfoState.Locked; return(false); } }
public static FileStateInfo FromFile(FileInfo info) { var result = new FileStateInfo(); result.FileName = info.FullName.Replace(HashGenerator.RootDirectory, ""); result.FileSize = info.Length; result.LastWrite = info.LastWriteTimeUtc; using (FileStream fileStream = info.OpenRead()) { byte[] hash = new MD5CryptoServiceProvider().ComputeHash(fileStream); fileStream.Close(); result.MD5Hash = hash; } return(result); }
/// <summary> /// Just gen file with no project /// </summary> public void AddProjectItem(string fileContent, byte[] fileContentBinary, ProjectItemContentType contentType, string relativePathAndName, bool overwrite, out FileStateInfo fileStateInfo) { try { fileStateInfo = new FileStateInfo(); fileStateInfo.FileState = FileStateConstants.Failed; FileInfo newFile = null; var fullName = relativePathAndName; fullName = fullName.Replace($"{Path.DirectorySeparatorChar}{Path.DirectorySeparatorChar}", $"{Path.DirectorySeparatorChar}"); fileStateInfo.FileName = fullName; newFile = new FileInfo(fullName); if (newFile.Exists && !overwrite) { fileStateInfo.FileState = FileStateConstants.Skipped; } else { if (!newFile.Directory.Exists) { newFile.Directory.Create(); } if (contentType == ProjectItemContentType.String) { using (var sw = newFile.CreateText()) { sw.Write(fileContent); } } else { File.WriteAllBytes(newFile.FullName, fileContentBinary); } fileStateInfo.FileState = FileStateConstants.Success; } } catch (Exception ex) { throw; } }
private static void SetFileStateInfoAttributes(XElement settingsGroup, FileStateInfo fileStateInfo) { foreach (var setting in settingsGroup.Elements()) { if (string.Compare(setting.Name.LocalName, "Setting", StringComparison.InvariantCultureIgnoreCase) == 0) { if (!setting.HasAttributes) { continue; } foreach (var attribute in setting.Attributes()) { if (string.Compare(attribute.Name.LocalName, "Id", StringComparison.InvariantCultureIgnoreCase) == 0 && string.Compare(attribute.Value, "LatestServerVersionTimestamp", StringComparison.InvariantCultureIgnoreCase) == 0) { fileStateInfo.LatestServerVersionTimestamp = setting.Value; } if (string.Compare(attribute.Name.LocalName, "Id", StringComparison.InvariantCultureIgnoreCase) == 0 && string.Compare(attribute.Value, "LatestServerVersionNumber", StringComparison.InvariantCultureIgnoreCase) == 0) { fileStateInfo.LatestServerVersionNumber = Convert.ToInt32(setting.Value); } if (string.Compare(attribute.Name.LocalName, "Id", StringComparison.InvariantCultureIgnoreCase) == 0 && string.Compare(attribute.Value, "CheckedOutTo", StringComparison.InvariantCultureIgnoreCase) == 0) { fileStateInfo.CheckedOutTo = setting.Value; } if (string.Compare(attribute.Name.LocalName, "Id", StringComparison.InvariantCultureIgnoreCase) == 0 && string.Compare(attribute.Value, "IsCheckedOutOnline", StringComparison.InvariantCultureIgnoreCase) == 0) { bool.TryParse(setting.Value, out var isCheckedOutOnline); fileStateInfo.IsCheckedOutOnline = isCheckedOutOnline; } } } } }
private static FileStateInfo GetFileStateInfo(XElement settingBundle) { FileStateInfo fileStateInfo = null; foreach (var settingsGroup in settingBundle.Elements()) { if (string.Compare(settingsGroup.Name.LocalName, "SettingsGroup", StringComparison.InvariantCultureIgnoreCase) == 0) { if (!settingsGroup.HasAttributes) { return(fileStateInfo); } var settingsBundleId = GetSettingsBundleAttributeValue(settingsGroup, "Id"); if (settingsBundleId == "LanguageFileServerStateSettings") { fileStateInfo = new FileStateInfo(); SetFileStateInfoAttributes(settingsGroup, fileStateInfo); } } } return(fileStateInfo); }
bool EqualsCheckOutParams(FileStateInfo fsi, FileLocation fl, out bool differentHost) { return EqualsCheckOutParams(fsi, fl.LocalPath, out differentHost); }
public FileDataLocation(string path, string localPath, FileStateInfo info, byte[] data) : base(path, localPath, info) { this.Data = data; }
private void projectItemGenerator_ProjectItemGenerated(object sender, ProjectItemGeneratedEventArgs e) { //.NET is a single-threaded application so we much release to let the UI refresh sometimes. if (_doEventCount % 10 == 0) { Application.DoEvents(); } _doEventCount++; try { const string solutionDirReplaceText = "$(solutiondir)"; if (e.FullName != null && e.FullName.ToLower().Contains(solutionDirReplaceText)) { var ti = e.FullName.ToLower().IndexOf(solutionDirReplaceText); e.FullName = e.FullName.Remove(ti, solutionDirReplaceText.Length).Insert(ti, EnvDTEHelper.Instance.SolutionDirectory.FullName); } if (e.ProjectItemName != null && e.ProjectItemName.ToLower().Contains(solutionDirReplaceText)) { var ti = e.ProjectItemName.ToLower().IndexOf(solutionDirReplaceText); e.ProjectItemName = e.ProjectItemName.Remove(ti, solutionDirReplaceText.Length).Insert(ti, EnvDTEHelper.Instance.SolutionDirectory.FullName); } //Get the parent project if one exists Project project = null; ProjectItem parent = null; if (!string.IsNullOrEmpty(e.ProjectName)) { if (projectCache.ContainsKey(e.ProjectName)) { var p = projectCache[e.ProjectName]; //Test this COM object to ensure it has not expired. //If error, do nothing and the project will be requeried try { var s = p.Name; project = p; } catch (Exception) { //Do Nothing projectCache.Remove(e.ProjectName); } } var fromCache = true; if (project == null) { fromCache = false; project = EnvDTEHelper.Instance.GetProject(e.ProjectName); projectCache.Add(e.ProjectName, project); } parent = EnvDTEHelper.Instance.GetProjectItem(e.ProjectName, e.ParentItemName, e.ParentItemType); //This should not happen. If do dump the cache project and requery if (parent == null && fromCache) { if (projectCache.ContainsKey(e.ProjectName)) { projectCache.Remove(e.ProjectName); } project = EnvDTEHelper.Instance.GetProject(e.ProjectName); projectCache.Add(e.ProjectName, project); parent = EnvDTEHelper.Instance.GetProjectItem(e.ProjectName, e.ParentItemName, e.ParentItemType); } } var fileStateInfo = new FileStateInfo(); ProjectItem projectItem = null; if (e.ParentItemName != string.Empty) { if (e.ContentType == ProjectItemContentType.String) { projectItem = EnvDTEHelper.Instance.AddProjectItem(project, parent, e.ProjectItemName, e.ProjectItemContent, e.Overwrite, out fileStateInfo); } else { projectItem = EnvDTEHelper.Instance.AddProjectItem(parent, e.ProjectItemContent, out fileStateInfo); } if (fileStateInfo.FileState == EnvDTEHelper.FileStateConstants.Success) { EnvDTEHelper.SetProperties(projectItem, e.Properties); } } else { if (e.ContentType == ProjectItemContentType.String || e.ContentType == ProjectItemContentType.Binary) { if (project == null) { EnvDTEHelper.Instance.AddProjectItem(e.ProjectItemContent, e.ProjectItemBinaryContent, e.ContentType, e.ProjectItemName, e.Overwrite, out fileStateInfo); } else { projectItem = EnvDTEHelper.Instance.AddProjectItem(project, e.ProjectItemContent, e.ProjectItemBinaryContent, e.ContentType, e.ProjectItemName, e.Overwrite, out fileStateInfo); } } else { projectItem = EnvDTEHelper.Instance.AddFileAsProjectItem(project, e.ProjectItemContent, e.ProjectItemName, e.Overwrite, out fileStateInfo); } if (fileStateInfo.FileState == EnvDTEHelper.FileStateConstants.Success) { EnvDTEHelper.SetProperties(projectItem, e.Properties); } } //TEMP processedFiles.Add(fileStateInfo.FileName); //TEMP //Custom Tool Functionality if (e.RunCustomTool && projectItem != null) { if (!string.IsNullOrEmpty(e.CustomToolName)) { EnvDTEHelper.SetProperty(projectItem, "Generator", e.CustomToolName); EnvDTEHelper.SetProperty(projectItem, "CustomTool", e.CustomToolName); } //Try to run the custom tool try { var vsProjectItem = projectItem.Object as VSLangProj.VSProjectItem; if (vsProjectItem != null) { vsProjectItem.RunCustomTool(); } } catch { //Do Nothing } } #region Compute CRC //System.IO.StreamReader sr = System.IO.File.OpenText(""); //nHydrate.Generator.Common.Util.CRC32HashAlgorithm hash = new CRC32HashAlgorithm(); //byte[] arr = hash.ComputeHash(sr.BaseStream); //sr.Close(); //XmlHelper.AddAttribute(newfileNode, "crc", "0"); #endregion if (fileStateInfo.FileName == string.Empty) { System.Diagnostics.Debug.Write(string.Empty); } if (fileStateInfo.FileState == EnvDTEHelper.FileStateConstants.Failed) { System.Diagnostics.Debug.Write(string.Empty); } //Write Log nHydrateLog.LogInfo("Project Item Generated: {0}", e.ProjectItemName); e.FileState = fileStateInfo.FileState; e.FullName = fileStateInfo.FileName; this.OnProjectItemGenerated(sender, e); } catch (Exception ex) { this.OnProjectItemGeneratedError(this, e); nHydrateLog.LogWarning(ex); } }
public ProjectItem AddProjectItem(Project project, string fileContent, byte[] fileContentBinary, ProjectItemContentType contentType, string relativePathAndName, bool overwrite, out FileStateInfo fileStateInfo) { try { BuildCache(project); fileStateInfo = new FileStateInfo(); fileStateInfo.FileState = FileStateConstants.Failed; FileInfo newFile = null; if (project.Kind == Constants.vsProjectKindUnmodeled) { var applicationObject = (DTE)EnvDTEHelper.Instance._applicationObject; //Handle on Solution Explorer window var slnExplorer = applicationObject.Windows.Item(Constants.vsWindowKindSolutionExplorer); var slnHierarchy = (UIHierarchy)slnExplorer.Object; slnExplorer.Activate(); var dbProject = EnvDTEHelper.Instance.Find(project); dbProject.Select(vsUISelectionType.vsUISelectionTypeSelect); } else { var currentProjectFile = new FileInfo(project.FileName); var fullName = StringHelper.EnsureDirectorySeparatorAtEnd(currentProjectFile.Directory.FullName) + relativePathAndName; fullName = fullName.Replace($"{Path.DirectorySeparatorChar}{Path.DirectorySeparatorChar}", $"{Path.DirectorySeparatorChar}"); fileStateInfo.FileName = fullName; newFile = new FileInfo(fullName); if (newFile.Exists && !overwrite) { fileStateInfo.FileState = FileStateConstants.Skipped; if (_projectCache[project].Select(x => x.Name).Contains(fullName.ToLower())) { //Do Nothing return(null); } else { return(project.ProjectItems.AddFromFile(newFile.FullName)); } } else if (newFile.Exists && (newFile.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } if (!newFile.Directory.Exists) { newFile.Directory.Create(); } if (contentType == ProjectItemContentType.String) { using (var sw = newFile.CreateText()) { sw.Write(fileContent); } } else { File.WriteAllBytes(newFile.FullName, fileContentBinary); } } try { fileStateInfo.FileState = FileStateConstants.Success; if (_projectCache[project].Select(x => x.Name).Contains(newFile.FullName.ToLower())) { //Do Nothing return(null); } else { return(project.ProjectItems.AddFromFile(newFile.FullName)); } } catch (Exception ex) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } } catch (Exception ex) { throw; } }
public FileLocation(string path, string localPath, FileStateInfo info) : this(path, localPath) { this.Info = info; }
bool EqualsCheckOutParams(FileStateInfo fsi, string localPath, out bool differentHost) { differentHost = !string.Equals(fsi.CheckOutHost, Environment.MachineName, StringComparison.CurrentCultureIgnoreCase); return(string.Equals(fsi.CheckOutFolder, HelperPaths.GetDirectory(localPath), StringComparison.CurrentCultureIgnoreCase) && !differentHost); }
public bool GetLocalFileModified(FileStateInfo info, string localPath, string vcsPath, DateTime projectDate, out FileBaseInfoState fileState, DateTime lastWrite) { try { using (Stream fileStream = fileSystem.OpenRead(localPath)) { byte[] localHash = DXVCSHelpers.GetHashMD5(fileStream); bool hashEquals = DXVCSHelpers.BytesAreEquals(localHash, info.Hash); fileState = FileBaseInfoState.Modified; return !hashEquals; } } catch (IOException) { fileState = FileBaseInfoState.Locked; return false; } }
bool EqualsCheckOutParams(FileStateInfo fsi, FileLocation fl, out bool differentHost) { return(EqualsCheckOutParams(fsi, fl.LocalPath, out differentHost)); }
bool EqualsCheckOutParams(FileStateInfo fsi, string localPath, out bool differentHost) { differentHost = !string.Equals(fsi.CheckOutHost, Environment.MachineName, StringComparison.CurrentCultureIgnoreCase); return string.Equals(fsi.CheckOutFolder, HelperPaths.GetDirectory(localPath), StringComparison.CurrentCultureIgnoreCase) && !differentHost; }
DateTime SelectFileTime(FileStateInfo info, FileTime fileTimeState) { switch (fileTimeState) { case FileTime.CheckIn: return info.VersionDate; case FileTime.Modification: return info.ModifiedOn; } return DateTime.UtcNow; }
private static FileAssignmentInfo GetFileAssignmentInfo(XElement settingsGroup, FileStateInfo fileStateInfo) { var settingsBundleId = GetSettingsBundleAttributeValue(settingsGroup, "Id"); if (settingsBundleId == "LanguageFileServerStateSettings") { return(null); } var fileAssignmentInfo = new FileAssignmentInfo { FileStateInfo = fileStateInfo, Phase = GetFileAssignmentPhase(settingsBundleId) }; if (string.IsNullOrEmpty(fileAssignmentInfo.Phase)) { return(fileAssignmentInfo); } SetFileAssignmentAttributes(settingsGroup, fileAssignmentInfo); return(fileAssignmentInfo); }