private static void ProcessFileChanges(IResource repository, ResourceProxy csProxy, XmlElement node, int revision) { foreach (XmlElement pathNode in node.SelectNodes("paths/path")) { string action = pathNode.GetAttribute("action"); string path = pathNode.InnerText; int pos = path.LastIndexOf('/'); string folderName = path.Substring(0, pos); string fileName = path.Substring(pos + 1); IResource folder = FindOrCreateFolder(repository, folderName); csProxy.AddLink(Props.AffectsFolder, folder); FileChange fileChange = FileChange.Create(); fileChange.Name = fileName; fileChange.AffectsFolder = folder; switch (action) { case "A": fileChange.ChangeType = "add"; break; case "D": fileChange.ChangeType = "delete"; break; case "R": fileChange.ChangeType = "replace"; break; default: fileChange.ChangeType = "change"; break; } fileChange.Revision = revision; fileChange.Save(); csProxy.AddLink(Props.Change, fileChange.Resource); } }
private static void SaveChangeSet(IResource repository, IResource changeSet, ChangeSetDetails details) { if (changeSet.HasProp(Props.Change)) { return; } ResourceProxy proxy = new ResourceProxy(changeSet); proxy.BeginUpdate(); SetChangeSetDescription(proxy, details.Description); foreach (var fileChangeData in details.FileChanges) { int pos = fileChangeData.Path.LastIndexOf('/'); string folderName = fileChangeData.Path.Substring(0, pos); string fileName = fileChangeData.Path.Substring(pos + 1); IResource folder = FindOrCreateFolder(repository, folderName); proxy.AddLink(Props.AffectsFolder, folder); var fileChange = FileChange.Create(); fileChange.Name = fileName; fileChange.AffectsFolder = folder; fileChange.ChangeType = fileChangeData.ChangeType; fileChange.Revision = fileChangeData.Revision; fileChange.Diff = fileChangeData.Diff; fileChange.Binary = fileChangeData.Binary; fileChange.Save(); proxy.AddLink(Props.Change, fileChange.Resource); } proxy.EndUpdate(); Core.TextIndexManager.QueryIndexing(proxy.Resource.Id); }