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);
                 }
             }
         }
     }
 }
示例#3
0
        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)
 {
 }