public static async Task <FileObject> CreateFileAsync(GitFileSystem fileSystem, FileParameters fileParams, CancellationToken cancel = default) { if (fileParams.Access.Bit(FileAccess.Write)) { throw new FileException(fileParams.Path, "The git filesystem is read-only."); } if (fileParams.Mode != FileMode.Open) { throw new FileException(fileParams.Path, "The git filesystem is read-only."); } cancel.ThrowIfCancellationRequested(); Blob blob = fileSystem.Commit.GetFile(fileParams.Path); Stream stream = blob.GetContentStream(); IRandomAccess <byte> randomAccess = new SeekableStreamBasedRandomAccess(stream, true); try { GitFileObject f = new GitFileObject(fileSystem, fileParams, randomAccess); await Task.CompletedTask; return(f); } catch { randomAccess._DisposeSafe(); stream._DisposeSafe(); throw; } }
static void Git_Test_1() { while (true) { using (var rep = new GitRepository(GitTestBaseDir)) { using (var fs = new GitFileSystem(new GitFileSystemParams(rep))) { while (true) { fs.ReadDataFromFile("/test.txt"); Sleep(500); } } } } }
public static async Task <IFileSystem> CreateAsync(string path, DirectoryInfo workingDirectory) { IFileSystem?fileSystem = null; if (Uri.TryCreate(path, UriKind.Absolute, out var uri)) { switch (uri.Scheme) { case "https" when uri.LocalPath.TrimEnd('/').EndsWith(".git", StringComparison.Ordinal): var query = uri.ParseQueryString(); query.TryGetValue("folder", out var folder); var repositoryUrl = $"{uri.Scheme}://{uri.Host}/{uri.LocalPath.TrimEnd('/')}"; fileSystem = new GitFileSystem(repositoryUrl, folder, query.ContainsKey("skip-pull"), workingDirectory); break; case "file": fileSystem = OpenFolder(uri.LocalPath); break; case "assembly": fileSystem = OpenAssembly(uri.LocalPath.Replace('/', '.')); break; } } else { if (path.EndsWith(".zip", StringComparison.OrdinalIgnoreCase)) { fileSystem = OpenZip(path); } else if (path.StartsWith(AssemblyPrefix, StringComparison.OrdinalIgnoreCase)) { fileSystem = OpenAssembly(path[AssemblyPrefix.Length..]);
protected GitFileObject(GitFileSystem fileSystem, FileParameters fileParams, IRandomAccess <byte> baseRandomAccess) : base(fileSystem, fileParams, baseRandomAccess) { }