public override void OnUpload(string name, RavenJObject metadata, int pageId, int pagePositionInFile, int pageSize) { FileSystem.Storage.Batch(accessor => { FileVersioningConfiguration versioningConfiguration; if (actions.TryGetVersioningConfiguration(name, metadata, accessor, out versioningConfiguration) == false) { return; } object value; metadata.__ExternalState.TryGetValue("Next-Revision", out value); accessor.AssociatePage(name + "/revisions/" + value, pageId, pagePositionInFile, pageSize); }); }
public override void AfterDelete(string name) { using (FileSystem.DisableAllTriggersForCurrentThread()) { FileSystem.Storage.Batch(accessor => { FileVersioningConfiguration versioningConfiguration; if (actions.TryGetVersioningConfiguration(name, new RavenJObject(), accessor, out versioningConfiguration)) { foreach (var file in accessor.GetFilesStartingWith(name + "/revisions/", 0, int.MaxValue).Where(file => file != null)) { if (versioningConfiguration != null && versioningConfiguration.PurgeOnDelete) { FileSystem.Files.IndicateFileToDelete(file.FullPath, null); } else { file.Metadata.Remove(Constants.RavenReadOnly); accessor.UpdateFileMetadata(file.FullPath, file.Metadata, null); } } } }); } }
public override void BeforeSynchronization(string name, RavenJObject metadata, SynchronizationType type) { if (type != SynchronizationType.ContentUpdate) { return; } FileSystem.Storage.Batch(accessor => { FileVersioningConfiguration versioningConfiguration; if (actions.TryGetVersioningConfiguration(name, metadata, accessor, out versioningConfiguration) == false) { return; } var revision = actions.GetNextRevisionNumber(name, accessor); metadata.__ExternalState["Synchronization-Next-Revision"] = revision; }); }
public override void AfterRename(string name, string renamed, RavenJObject metadata) { using (FileSystem.DisableAllTriggersForCurrentThread()) { FileSystem.Storage.Batch(accessor => { FileVersioningConfiguration versioningConfiguration; if (actions.TryGetVersioningConfiguration(name, new RavenJObject(), accessor, out versioningConfiguration) == false) { return; } var revisions = accessor.GetFilesStartingWith(name + "/revisions/", 0, int.MaxValue).Where(file => file != null).ToArray(); for (int i = 0; i < revisions.Length; i++) { var file = revisions[i]; if (versioningConfiguration.ResetOnRename) { if (i == (revisions.Length - 1)) { // reset file revision metadata[VersioningUtil.RavenFileRevision] = RavenJToken.FromObject(1); metadata.Remove(VersioningUtil.RavenFileParentRevision); accessor.UpdateFileMetadata(renamed, metadata, null); // rename last existing revision to [renamed]/revisions/1 var revision = file.Name; accessor.RenameFile(string.Format("{0}/revisions/{1}", name, revision), string.Format("{0}/revisions/{1}", renamed, 1), true); } else { FileSystem.Files.IndicateFileToDelete(file.FullPath, null); } } else { var revision = file.Name; accessor.RenameFile(string.Format("{0}/revisions/{1}", name, revision), string.Format("{0}/revisions/{1}", renamed, revision), true); } } }); } }